Manual Proteus BASICO

ITSOEH MICROCONTROLADORES 2010 2010 INSTITUTO TECNOLÓGICO SUPERIOR OCCIDENTE DEL ESTADO DE HIDALGO. DEL MIXQUIAHUA

Views 150 Downloads 3 File size 1MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

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