You are on page 1of 17

Segundo Parcial

Programacin en Mikro C
para microcontroladores PIC
PIC16F877

M.I. Alfredo Santillana Cedillo

Operadores a nivel de bits


Operador

&

operacion
AND; compara pares de bits y regresa 1 si ambos son 1s, de otra manera
regresa 0.

OR (inclusive); compara pares de bits y regresa 1 si uno o ambos son 1s, de


otra manera regresa 0.

OR (exclusiva); compara pares de bits y regresa 1 si los bits son


complementarios, de otra manera regresa 0.

Complemento (unitario); invierte cada bit

<<

Corrimiento hacia la izquierda; mueve los bits hacia la izquierda, descartando


el bit mas a la izquierda y asignando ceros al bit a la derecha.

>>

Corrimiento hacia la derecha; mueve los bits hacia la derecha, descartando el


bit mas a la derecha y asignando ceros al bit a la izquierda.

M.I. Alfredo Santillana Cedillo

Ejemplos operadores lgicos


0x1234 & 0x5678

/* Igual 0x1230 */

porque...
0x1234 :
0001 0010 0011 0100
0x5678:
0101 0110 0111 1000
----------------------------------&:
0001 0010 0011 0000

esto es, 0x1230

/* De forma similar: */
0x1234 | 0x5678;
0x1234 ^ 0x5678;
~ 0x1234;
M.I. Alfredo Santillana Cedillo

/* Igual 0x567C */
/* Igual 0x444C */
/* Igual 0xEDCB */

Ejemplos a nivel de bits


000001 << 5;
0x3801 << 4;

/* Igual 000040 */
/* Igual 0x8010, sobreflujo! */

0x02F6 >> 4;
0xFF56 >> 4;

/* Igual 0x002F */
/* Igual 0x0FF5 */

Corrimiento a la derecha division entre 2n.


Corrimiento a la izquierda producto por 2n.
M.I. Alfredo Santillana Cedillo

Practica No.9
Luces con desplazamiento (algoritmo)
1.
2.
3.
4.
5.
6.

Configuracin de puerto como salida.


Inicializa variable.
Enva valor de la variable al puerto.
Modifica la variable.
Si variable es cero, Inicializa la variable.
Regresa a 3.

M.I. Alfredo Santillana Cedillo

Luces con desplazamiento (diagrama de flujo)


Luces

Configura puerto
como salida

Modifica
variable

si

Inicializa variable
variable = 0

Enva variable
al puerto

M.I. Alfredo Santillana Cedillo

no

Inicializa
variable

Luces con desplazamiento (programa 1)


void main ( void )
{ unsigned short dato;
TRISD = 0;
dato = 0b00000001;
while ( 1 )
{
PORTD = dato;
Delay_ms ( 300 );
dato = dato << 1;
if ( dato == 0 )
dato = 0x01;
}
}
M.I. Alfredo Santillana Cedillo

Operaciones aritmticas
Operador

Operacin

Suma

Resta

Multiplicacin

Divisin

Resto, regresa el residuo de la divisin entera (no puede ser usado con variables flotantes

++

Como prefijo Incrementa en uno el valor de la variable antes de evaluar la expresin. Como
Postfijo suma en uno la variable despus de ser evaluado la expresin.

--

Como prefijo decrementa en uno el valor de la variable antes de evaluar la expresin. Como
Postfijo resta en uno la variable despus de ser evaluado la expresin.

M.I. Alfredo Santillana Cedillo

Luces con desplazamiento (programa 2)


void main ( void )
{ unsigned short dato;
TRISD = 0;
dato = 1;
while ( 1 )
{
PORTD = dato;
Delay_ms (250);
dato = dato * 2;
if ( dato == 0 )
dato = 0x01;
}
}
M.I. Alfredo Santillana Cedillo

Practica No. 10 y 11
10. El alumno realizara un programa que enve al puerto
C los siguientes valores utilizando para generarlas,
las instrucciones de desplazamiento y/o aritmticas.
1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45

11. Lo mismo que el ejercicio anterior con la siguiente


secuencia:
3, 6, 12, 24, 48, 92, 172, 1, 3, 6, 9, 12, 15, 18, 21, 24
M.I. Alfredo Santillana Cedillo

Acceso a bits individual


mikroC te permite acceso individual en variables de 8 bits (char
and unsigned short). Simplemente usando el selector (.)
seguido de uno de los identificadores F0, F1, , F7, siendo F7
el bit mas significativo.
Ejemplo:
// Si RB0 es uno, colocar en uno la terminal RC0:
if ( PORTB.F0 )
PORTC.F0 = 1;

Los Identificadores F0F7 no se reconocen en minsculas.


M.I. Alfredo Santillana Cedillo

Practica No. 12
Secuencias condicionadas ( problema )
Realizar un programa que enve secuencias
distintas al puerto D, dependiendo del valor de
la terminal RA0. Si RA0 es igual a cero se enva
la serie de dos bits desplazados hacia la
izquierda, mientras que si RA0 es igual a 1
entonces se enva la serie de tres bits
desplazados hacia la derecha.
M.I. Alfredo Santillana Cedillo

Secuencias condicionadas (algoritmo)


1. Configuracin de puertos
2. Inicia contador
3. Si RA0 es igual a 0 entonces enva
secuencia_izquierda
4. De lo contrario enva secuencia_derecha
5. Incrementa contador
6. Si contador es igual a 8 entonces contador igual a 0
7. Regresa a 3
M.I. Alfredo Santillana Cedillo

Secuencias condicionadas (diagrama de flujo)


Luces
Enva
secuencia_izquierda

Configura puertos
RD salida, RA entrada

Incrementa
contador

Limpia contador

si
si

Contador = 10

RA0 = 0

no
no

M.I. Alfredo Santillana Cedillo

Enva
Secuencia_derecha

Limpia
contador

Secuencias condicionadas (programa)


short izquierda[10] = { 0, 1, 3, 6, 12, 24, 48, 96, 192, 128 };
short derecha[10] = { 128, 192, 226, 102, 56, 28, 14, 7, 3, 1 };
void main ( void )
{
TRISD = 0;
ADCON1 = 6;
TRISA = 0x7F;
Contador = 0;
for ( ; ; )
{
Delay_ms ( 500 );
if ( PORTA.F0 = = 0 )
PORTD = izquierda [ contador];
else
PORTD = derecha [ contador];
contador + + ;
If ( contador = = 10 )
contador = 0;
}

M.I. Alfredo Santillana


Cedillo
}

Practica No. 13
13. El alumno desarrollara un programa que enve
una secuencia de nmeros BCD a un display
de 7 segmentos ubicados en el puerto D. Si la
terminal RA1 ubicada en el puerto A, es igual a
0, la numeracin debe ser incremental; en
caso contrario debe decrementarse.

M.I. Alfredo Santillana Cedillo

Practica No.13 (esquemtico)

M.I. ALFREDO SANTILLANA CEDILLO.

You might also like