ITSOEH MICROCONTROLADORES 2010 2010 INSTITUTO TECNOLÓGICO SUPERIOR OCCIDENTE DEL ESTADO DE HIDALGO. DEL MIXQUIAHUA
Views 150 Downloads 3 File size 1MB
ITSOEH
MICROCONTROLADORES
2010
2010
INSTITUTO TECNOLÓGICO SUPERIOR OCCIDENTE DEL ESTADO DE HIDALGO.
DEL
MIXQUIAHUALA DE JUAREZ, HGO.
INGENIERÍA ELECTROMECANICA CURSO ESPECIAL PARA TITULACIÓN. MANUAL DE PRÁCTICAS BASICO Y AVANZADO DE MICROCONTROLADORES PRESENTA:
Ing. Guadalupe Calvo Torres 1
PERIODO: FEBRERO JULIO 10
ITSOEH
MICROCONTROLADORES
// Práctica No. 1 // Programa para encender los bit 0, 1, 3, 5 y 7 del puerto B //AUTOR: Ing. Guadalupe Calvo Torres #include
Fecha: 25 Marzo 10
//Declara el pic a utilizar
#use delay(clock=4000000) //Declara la frecuencia del reloj externo(cristal) del pic #fuses xt,nowdt,noprotect //Declara cristal de baja frecuencia, no perro guardián y código no protegido #byte porta=0x05
//El puerto a se encuentra en la localidad de memoria 5 del pic
#byte portb=0x06
//El puerto b se encuentra en la localidad de memoria 6 del pic
main()
// inicio del cuerpo del programa
{ set_tris_a(0x1F);
// tris = 0xfF, el puerto A, cada bit, será solo de entrada In = 1 //
set_tris_b(0x00);
// tris = 0x00, el puerto B, cada bit, será solo de salida Out = 0 //
while(1)
//Inicio del programa principal
{ portb=0xAB;
//mostrar el dato A(1010), Y EL DATO B(1011) POR EL PUERTO B
} }
2
2010
ITSOEH
MICROCONTROLADORES
3
2010
ITSOEH /*
MICROCONTROLADORES
Práctica No. 2
Programa que permita guardar el dato 3AH en la dirección de memoria de datos 20H y el dato 5BH en la dirección 21H, después realice un intercambio de datos entre 20H y 21H. */ //AUTOR: Ing. Guadalupe Calvo Torres
Fecha: 25 Marzo 10
#include //declaración del pic a utilizar #use delay(clock=4000000)//declaración del reloj de baja frecuencia #fuses xt,nowdt, noprotect, nolvp //reloj de baja frecuencia, código no protegido y no programar con bajo voltaje #byte porta=0x05
//puerrto a en la localidad de memoria 5
#byte portb=0x06
//puerto b en la localidad de memoria 6
#byte portc=0x07
//puerto c en la localidad de memoria 7
#byte portd=0x08
//puerto d en la localidad de memoria 8
main()
//inicio del cuerpo del programa
{ int a,b,c;
//Declaración de variables de tipo entero
set_tris_d(0xFF); // tris = 0xFF, el puerto D, cada bit, será solo de entrada In = 1 // set_tris_b(0x00); // tris = 0xFF, el puerto B, cada bit, será solo de salida Out = 0 // while(1)
//inicio del programa principal
{ a=0x5B;
//asigna el valor 01011011 en binario a la variable "a"
b=0x3A;
//asigna el valor 00111010 en binario a la variable "b"
c=a;
//el valor que tiene la variable "a" la pasa a la variable "c"
a=b;
//el valor que tiene la variable "b" la pasa a la variable "a"
b=c;
//el valor que tiene la variable "c" la pasa a la variable "b"
} }
4
2010
ITSOEH
MICROCONTROLADORES
5
2010
ITSOEH /*
MICROCONTROLADORES
Práctica No. 3
Continuando del ejercicio número 2, sabiendo que datos existen en las localidades de memoria 0CH y 0DH, agregue las instrucciones que permitan sacar el dato de la localidad de memoria 0CH al puerto B y el de la localidad 0Dh en el puerto D.*/ //AUTOR: Ing. Guadalupe Calvo Torres
Fecha: 25 Marzo 10
#include #use delay(clock=4000000) #fuses xt,nowdt,noprotect, nolvp #byte porta=0x05 #byte portb=0x06 #byte portc=0x07 #byte portd=0x08 main() { int a,b,c; set_tris_b(0x00); // tris = 0xFF, el puerto b, cada bit, será solo de salida out = 0 // set_tris_d(0x00); // tris = 0xFF, el puerto d, cada bit, será solo de salida Out = 0 // while(1) { a=0x5B; b=0x3A; c=a; a=b; b=c; portb=b;
//el dato almacenado en "b" lo muestra en el puerto b
portd=a;
//el dato almacenado en "a" lo muestra en el puerto d
} }
6
2010
ITSOEH
MICROCONTROLADORES
7
2010
ITSOEH /*
MICROCONTROLADORES
Práctica No. 4
Realizar un programa que permita monitorear el estado del puerto D (Entrada) en el puerto B (salida). */ //AUTOR: Ing. Guadalupe Calvo Torres
Fecha: 25 Marzo 10
#include #use delay(clock=4000000) #fuses xt,nowdt,noprotect, nolvp #byte porta=0x05 #byte portb=0x06 #byte portc=0x07 #byte portd=0x08 main() { set_tris_b(0x00); // Salidas set_tris_d(0xFF); // Entradas while(1) { portb=portd; //los datos recibidos en el puerto d, los envía al puerto b } }
8
2010
ITSOEH
MICROCONTROLADORES
9
2010
ITSOEH /*
MICROCONTROLADORES
Práctica No. 5
Realizar un programa que permita hacer la operación de suma del puerto D (entrada) con el dato 05H y el resultado mostrarlo en el puerto B. PORTB = PORTA + 05H */ //AUTOR: Ing. Guadalupe Calvo Torres
Fecha: 25 Marzo 10
#include #use delay(clock=4000000) #fuses xt,nowdt,noprotect, nolvp #byte portb=0x06 #byte portd=0x08 main() { set_tris_b(0x00); // Salidas set_tris_d(0xFF); // Entradas while(1) { portb=portd + 0x05; //suma los datos que estén entrando en el puerto d con el dato 00000101 y lo muestra en pto b } }
10
2010
ITSOEH
MICROCONTROLADORES
11
2010
ITSOEH /*
MICROCONTROLADORES
Práctica No. 6
Realizar un programa que permita hacer la función espejo en el puerto B, el nibble menos significativo del puerto será de entrada y el nibble más significativo será de salida, permitiendo de esta manera monitorear el estado del nibble de entrada en el nibble de salida. */ //AUTOR: Ing. Guadalupe Calvo Torres
Fecha: 25 Marzo 10
#include #use delay(clock=4000000) #fuses xt,nowdt,noprotect, nolvp #byte status=0x03 #byte porta=0x05 #byte portb=0x06 #byte portc=0x07 #byte portd=0x08 main() { set_tris_b(0x0F); // salidas el nibble alto y entradas el nibble bajo while(1) { portb=swap(portb); //intercambia los datos que están en un nibble } }
12
2010
ITSOEH
MICROCONTROLADORES
13
2010
ITSOEH /*
MICROCONTROLADORES
Práctica No. 7
Resuelva el problema de una alarma que funciona como sigue: -Se activa el buzzer conectado en RB0 mientras el sensor en RD2 se activa. (si RD2=Activo RB0=Activo, si RD2=Desactivado RB0=Desactivado) */ //AUTOR: Ing. Guadalupe Calvo Torres
Fecha: 25 Marzo 10
#include #use delay(clock=4000000) #fuses xt,nowdt,noprotect, nolvp #byte status=0x03 #byte porta=0x05 #byte portb=0x06 #byte portc=0x07 #byte portd=0x08 main() { set_tris_b(0x00); // Salidas set_tris_d(0xFF); // Entradas portb=0; while(1) { if (input(PIN_D2))
//si hay entrada en el pin d2?
output_high(PIN_B0);//envía una salida en alto en el pin rb0 else
//si no
output_low(PIN_B0); //envía un nivel bajo en el pin rb0 } }
14
2010
ITSOEH
MICROCONTROLADORES
15
2010
ITSOEH /*
MICROCONTROLADORES
Práctica No. 8
Resuelva el problema de la misma alarma, solo que activará el buzzer conectado al bit RB0 cuando cualquiera de los 5 (RD0, RD1, RD2, RD3, RD4) sensores se active. (Activar=ON=1 Lógico) */ //AUTOR: Ing. Guadalupe Calvo Torres
Fecha: 25 Marzo 10
#include #use delay(clock=4000000) #fuses xt,nowdt,noprotect, nolvp #byte status=0x03 #byte porta=0x05 #byte portb=0x06 #byte portc=0x07 #byte portd=0x08 main() { int dato;
//declara la variable dato de tipo entera
set_tris_b(0x00); // Salidas set_tris_d(0xFF); // Entradas portb=0;
//limpiar puerto b
while(1) { dato=portd & 0x1F; //lee el puerto d y aplica una función and con el dato 00011111 y lo asigna a la variable dato if (dato||0x00)
//lo que resultó, le aplica una or a todo el byte con el dato 00000000
output_high(PIN_B0); //y en via un nivel alto en el bit rb0 else
// si no
output_low(PIN_B0); //envía un nivel bajo en el bit rb0 } // Fin del ciclo while }// Fin del programa
16
2010
ITSOEH
MICROCONTROLADORES
17
2010
ITSOEH /*
MICROCONTROLADORES
Práctica No. 9
Resuelva el problema de la misma alarma utilizando todas las instrucciones lógicas, solo que activará el buzzer conectado al bit RB0 cuando cualquiera de los 5 (RD0, RD1, RD2, RD3, RD4) sensores se active. (Activar=ON=1 Lógico). */ //AUTOR: Ing. Guadalupe Calvo Torres
Fecha: 25 Marzo 10
#include #use delay(clock=4000000) #fuses xt,nowdt,noprotect, nolvp #byte porta=0x05 #byte portb=0x06 #byte portc=0x07 #byte portd=0x08 main() { int dato; set_tris_b(0x00); // Salidas set_tris_d(0xFF); // Entradas portb=0; while(1) { dato=input_d() & 0x01; if (dato==1) output_high(PIN_B0); else { dato=input_d() | 0x00; if (dato==2) output_high(PIN_B0); else { dato=input_d() ^ 0x04; if (dato==0)
18
2010
ITSOEH
MICROCONTROLADORES
output_high(PIN_B0); else { dato=input_d() & 0x08; if (dato==8) output_high(PIN_B0); else { dato=input_d() | 0x0; if (dato==0x10) output_high(PIN_B0); else output_low(PIN_B0); } } } } } }
19
2010
ITSOEH
MICROCONTROLADORES
20
2010
ITSOEH /*
MICROCONTROLADORES
Práctica No. 10
Continuando con la misma alarma, esta vez se activará el buzzer conectado al bit RB0 cuando los dos sensores conectados en RD0 y RD2 se activen (Activar=ON=1 Lógico). Solo cuando los dos se activen. */ //AUTOR: Ing. Guadalupe Calvo Torres
Fecha: 25 Marzo 10
#include #use delay(clock=4000000) #fuses xt,nowdt,noprotect, nolvp #byte porta=0x05 #byte portb=0x06 #byte portc=0x07 #byte portd=0x08 main() { set_tris_b(0x00); // Salidas set_tris_d(0xFF); // Entradas portb=0;
//limpiar el puerto b
while(1) { if (portd==0x05) //si el dato 00000101 es igual al dato presionado en el puerto d output_high(PIN_B0);//envía una salida alta en el pin rb0 else
//si no
output_low(PIN_B0); //envía una salida baja en el bit rb0 } }
21
2010
ITSOEH
MICROCONTROLADORES
22
2010
ITSOEH /*
MICROCONTROLADORES
Práctica No. 11
Realizar un programa que permita obtener un señal cuadrada simétrica de 50 HZ en el bit 0 del puerto B. AUTOR: Ing. Guadalupe Calvo Torres #include
Fecha: 25 Marzo 10 */
// Selección del dispositivo
#use delay(clock=4000000)
// Frecuencia del cristal
#fuses xt,nowdt,noprotect, nolvp // Configuración externa #byte porta=0x05 // Etiquetas de los registros #byte portb=0x06 #byte portc=0x07 #byte portd=0x08 void main() { set_tris_b(0x00); // Configuración puerto B como salidas portb=0;
//limpiar el puerto b
while(1) { output_high(PIN_B0); //activar el bit rb0 delay_ms(10);
//retardo de 1 decima de segundo
output_low(PIN_B0); //desactivar el bit rb0 delay_ms(10);
//retardo de 1 decima de segundo
} }
23
2010
ITSOEH
MICROCONTROLADORES
24
2010
ITSOEH /*
MICROCONTROLADORES
Práctica No. 12
Realizar un programa que controle el semáforo vehicular, de acuerdo al siguiente patrón en el crucero vehicular. NORTE/SUR
ESTE/OESTE
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 ROJO AMARI VERDE
ROJO AMARI VERDE
AUTOR: Ing. Guadalupe Calvo Torres #include
Fecha: 25 Marzo 10 */
// Selección del dispositivo
#use delay(clock=4000000)
// Frecuencia del cristal
#fuses xt,nowdt,noprotect, nolvp // Configuración externa #byte porta=0x05 // Etiquetas de los registros #byte portb=0x06 #byte portc=0x07 #byte portd=0x08 void main() { set_tris_b(0x00); // Configuración puerto B como salidas portb=0; while(1) { portb=0x24; // N/S-Verde RB5
E/O-Rojo RB2
delay_ms(5000); portb=0x44; // N/S-Amarillo RB6
E/O-Rojo RB2
delay_ms(1000); portb=0x81; // N/S-Rojo RB7
E/O-verde RB0
delay_ms(5000); portb=0x82; // N/S-Rojo RB7
E/O-Amarillo RB1
delay_ms(1000); } }
25
2010
ITSOEH
MICROCONTROLADORES
26
2010
ITSOEH /*
MICROCONTROLADORES
Práctica No. 13
Haga un programa para controlar el crucero de un peatón en una calle. Haga que la señal del peatón este constantemente en rojo y la señal para los vehículos este constantemente en verde. Cuando presionen el "push button", la señal del vehículo cambia a amarillo, y después de 1 segundo, la señal del vehículo cambia a rojo, y la señal del peatón cambia a verde en el mismo tiempo. Después de 5 segundos la señal del peatón que ha estado en verde cambia a rojo, y después de 1 segundo, la señal de los vehículos regresa a la condición previa de presionar el "pushbotton", y espera nuevamente para ser presionado. PEATON
C. AUTOMOVIL
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 ROJO VERDE
ROJO AMARI VERDE
AUTOR: Ing. Guadalupe Calvo Torres #include #use delay(clock=4000000)
Fecha: 25 Marzo 10 */
// Selección del dispositivo // Frecuencia del cristal
#fuses xt,nowdt,noprotect, nolvp // Configuración externa #byte porta=0x05 // Etiquetas de los registros #byte portb=0x06 #byte portc=0x07 #byte portd=0x08 void main() { set_tris_b(0x00); // Configuración puerto B como salida set_tris_d(0xff); // Configuración puerto D como entrada portb=0; while(1) { if (input(PIN_D0)) { portb=0x82; // Peatón-Rojo RB7
C. Automóvil-Amarillo RB1
delay_ms(1000); portb=0x44; // Peatón-Verde RB6
C. Automóvil-Rojo RB2
delay_ms(5000);
27
2010
ITSOEH
MICROCONTROLADORES
portb=0x84; // Peatón-Rojo RB7
C. Automóvil-Rojo RB2
delay_ms(1000); } portb=0x81;
// Peatón-Rojo RB7
C. Automóvil-Verde RB0
} }
28
2010
ITSOEH /*
MICROCONTROLADORES
Práctica No. 14
Realice un programa que permita rotar el dato 01H en el puerto B de manera infinita. Controle la rotación para que el bit se rote de la posición de Bit 0 al Bit 7. AUTOR: Ing. Guadalupe Calvo Torres #include #use delay(clock=4000000)
Fecha: 25 Marzo 10 */
// Selección del dispositivo // Frecuencia del cristal
#fuses xt,nowdt,noprotect, nolvp // Configuración externa #byte porta=0x05 // Etiquetas de los registros #byte portb=0x06 void main() { set_tris_b(0x00); // Configuración puerto B como salida portb=0x01;
//enviar el dato 00000001 por el puerto b
while(1) { rotate_left(&portb,1); //Rotar el dato 00000001 por el puerto b a la izquierda delay_ms(100); } }
29
2010
ITSOEH
MICROCONTROLADORES
30
2010
ITSOEH /*
MICROCONTROLADORES
Práctica No. 15
Realice un programa que permita rotar el dato 01H en el puerto B a la izquierda y cuando llegue al bit 7 se realice la rotación a la derecha, de la posición de bit 7 a la posición bit 0. Repita el proceso de rotación izquierda-derecha en forma cíclica. AUTOR: Ing. Guadalupe Calvo Torres #include
Fecha: 25 Marzo 10 */
// Selección del dispositivo
#use delay(clock=4000000)
// Frecuencia del cristal
#fuses xt,nowdt,noprotect,nolvp // Configuración externa #byte porta=0x05 // Etiquetas de los registros #byte portb=0x06 // Función usando la instrucción FOR void rotarizder() { int j; for (j=0;j