ASC PIC16F877 con MikroC [Modo de compatibilidad]

Anuncio
Segundo Parcial
Programación 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 1’s, de otra manera
regresa 0.
|
OR (inclusive); compara pares de bits y regresa 1 si uno o ambos son 1’s, 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 lógicos
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.
Configuración de puerto como salida.
Inicializa variable.
Envía 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
Envía 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 aritméticas
Operador
Operación
+
Suma
-
Resta
*
Multiplicación
/
División
%
Resto, regresa el residuo de la división entera (no puede ser usado con variables flotantes
++
Como prefijo Incrementa en uno el valor de la variable antes de evaluar la expresión. Como
Postfijo suma en uno la variable después de ser evaluado la expresión.
--
Como prefijo decrementa en uno el valor de la variable antes de evaluar la expresión. Como
Postfijo resta en uno la variable después de ser evaluado la expresión.
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 envíe al puerto
C los siguientes valores utilizando para generarlas,
las instrucciones de desplazamiento y/o aritméticas.
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 F0–F7 no se reconocen en minúsculas.
M.I. Alfredo Santillana Cedillo
Practica No. 12
Secuencias condicionadas ( problema )
• Realizar un programa que envíe secuencias
distintas al puerto D, dependiendo del valor de
la terminal RA0. Si RA0 es igual a cero se envía
la serie de dos bits desplazados hacia la
izquierda, mientras que si RA0 es igual a 1
entonces se envía la serie de tres bits
desplazados hacia la derecha.
M.I. Alfredo Santillana Cedillo
Secuencias condicionadas (algoritmo)
1. Configuración de puertos
2. Inicia contador
3. Si RA0 es igual a 0 entonces envía
secuencia_izquierda
4. De lo contrario envía 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
Envía
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
Envía
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 envíe
una secuencia de números 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 numeración debe ser incremental; en
caso contrario debe decrementarse.
M.I. Alfredo Santillana Cedillo
Practica No.13 (esquemático)
M.I. ALFREDO SANTILLANA CEDILLO.
Descargar