Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Cuando el PIC en cuestion no tiene UART fisica, como es el caso del 16F84A, CCS puede crear "puertos virtuales", con la siguiente instruccion: #use rs232(baud=9600,parity=N,xmit=PIN_xx0,rcv=PIN_yy,bits=8, force_sw,invert) Donde PIN_xx y PIN_yy son los pines que quieres usar para transmitir y recibir. Utilizamos el comando "invert" con el MAX232 Con esta pequea variacion, logramos controlar las salidas del pic a traves del puerto serie y recibir informacion de si esta activada o no la salida en el PC. Los leds se encienden o apagan segun el numero pulsado y el Pc recibe el informe de estado del led pulsado.
R1
330
R2
330
R3
330
R4
330
#use delay(clock=4000000) //Especifico que utilizo "reloj" de 4MhZ #define RS232_RCVPIN_B1 // Definimos pin que recibe transmission del PC #define RS232_XMIT PIN_B2 //Definimos pin que envia transmission del PC //Se utilizan los mismos pines que el 16f628 (equivalente a 16f84 con UART) #use rs232(baud=9600,parity=N,xmit=RS232_XMIT,rcv=RS232_RCV,bits=8, force_sw,INVERT) // Utilizo la emulacion de RS232 ya que 16f84 no tiene UART //En la linea anterior tambien asignamos PIN como TX y PIN comp RX //OBSERVESE QUE AL UTILIZAR UN MAX232 HEMOS DE INVERTIR LAS SEALES //CON EL COMANDO "INVERT"
D1
D2
D3
D4
#use fast_io(a) //Comando que mejora las capacidades de las comunicaciones #bit led0=porta.0 //Asigna el valor "bit" (1 o 0) a la variable "led" (Puerta A pin 0) #bit led1=porta.1 //Asigna el valor "bit" (1 o 0) a la variable "led" (Puerta A pin 1) #bit led2=porta.2 //Asigna el valor "bit" (1 o 0) a la variable "led" (Puerta A pin 2) #bit led3=porta.3 //Asigna el valor "bit" (1 o 0) a la variable "led" (Puerta A pin 3)
char valor; //Define la variable "valor" como carater. void mensaje(void); //Defino la funcion "mensaje para poder utilizarla luego //Comienzo del programa set_tris_a(0x00); //Ponemos la puerta A al completo a 0 void main()// Comienzo del programa -| puts("========== Control de 4 leds ==========="); puts("Pulsa '1' para encender o apagar el led 1"); puts("Pulsa '2' para encender o apagar el led 2");
C1
33pF
C2
33pF
www.pesadillo.com
1 6 2 7 3 8 4 9
P1
DCD DSR RXD RTS TXD CTS DTR RI
//Enviamos texto al puerto serie led0=0; //predefinimos el valor del led en "0" led1=0; //predefinimos el valor del led en "0" led2=0; //predefinimos el valor del led en "0" led3=0; //predefinimos el valor del led en "0"
X1
www.pesadillo.com
VCC CRYSTAL 16 15 4
while(true) // Repetir indefinidamente -| if(kbhit()) // Si se recibe datos a travs del puerto serie... -| valor=getc(); //Recoger valor (cadena) en la variable "valor"
U1
OSC1/CLKIN OSC2/CLKOUT MCLR RA0 RA1 RA2 RA3 RA4/T0CKI RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7 PIC16F84A 17 18 1 2 3 6 7 8 9 10 11 12 13
switch (valor) -| //Cual es el valor tecleado? case '1': //En el caso de que sea "1" led0=!led0; //Invertir el estado de la variable "led" if(input(PIN_A0)==1) -| //Si el pin RA0, est a 1. puts("P1ON"); // Mando Pulsador 1 ON (P1on) |ELSE -| //Si el pin RA0, est a 1. puts("P1OF"); // Mando Pulsador 1 OFF (P1of) |break; case '2': //En el caso de que sea "2" led1=!led1; //Invertir el estado de la variable "led"
R22
10k 100
R23
C4
ERROR 1 1uF 3
RESET
if(input(PIN_A1)==1) -| //Si el pin RA2, est a 1. puts("P2ON"); // Mando 0x01 por RS232. (numero 1) |ELSE -| // si no... puts("P2OF"); // Mando 0x01 por RS232. (numero 1) |break;
U2
COMPIM
case '3': //En el caso de que sea "3" led2=!led2; //Invertir el estado de la variable "led" if(input(PIN_A2)==1) -| //Si el pin RA2, est a 1. puts("P3ON"); // Mando 0x01 por RS232. (numero 1) |ELSE -| // si no... puts("P3OF"); // Mando 0x01 por RS232. (numero 1) |break; case '4': //En el caso de que sea "4" led3=!led3; //Invertir el estado de la variable "led" if(input(PIN_A3)==1) -| //Si el pin RA2, est a 1. puts("P4ON"); // Mando 0x01 por RS232. (numero 1) |ELSE -| // si no... puts("P4OF"); // Mando 0x01 por RS232. (numero 1) |break; default :
www.pesadillo.com
C2+
C2-
C5
1uF MAX232
C3
1uF
||-
C6
1uF
|-//Fin programa
void mensaje () //Define mensaje por defecto -| puts("ERROR"); //Enviar mensaje al puerto. |-
NOTA: Sustituya los caracteres "-|" por comienzo de llave y los caracteres "|-" por fin de llave.