Comuinicacion Serial

Bueno primero que todo me gustaría saber si saber de alguna página o tienes una archivo para la comunicación serial del pic con el computador con un 16f84, a cualquier tasa.
También quiero saber como puedo hacer para dispara un scr con un pic, osea que cuando se de una señal del pic me deje pasar una señal de 120V a 60Hz, por favor necesito el esquema.
Y por ultimo quiero saber si sabes de algún circuito que me sirva para medir corriente que viene por la linea de alimentación del hogar (120V @ 60Hz).
Gracias
Cesar Páez

1 respuesta

Respuesta
1
1.-En una oportunidad realicé una practica de TX y RX de datos al PC. Aquí te envío el programa. Disfrútalo.
2.- En ésta dirección encuentras la forma de realizar la conexión y manejar potencia. Espero te sirva. No se te olvide mucho cuidado al manejar corriente alterna, puedes poner en peligro tu vida. Ve despacio.
Gherson F.
http://www.geocities.com/acuariogratis2/electronica/apagadomomentaneo.html
;PROGRAMA PARA LA TRANSMISION Y RECEPCION DE DATOS A TRAVES DEL PUERTO COM1
; ****** APLICACION INDUSTRIAL DE MICROCONTROLADORES ******
;
; UTILIZANDO EL MICROCONTROLADOR < PIC 16F84 >
; GHERSON FLOREZ P.
;
; ®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®
; ® ®
; ® PROPIEDADES DE LA TRAMSMISION ®
; ® ®
; ® VELOCIDAD DE TRANSMISION EN BAUDIOS = 9600 ®
; ® BITS DE DATOS = 8 ®
; ® PARIDAD = NINGUNA ®
; ® CONTROL DE FLUJO = NINGUNO ®
; ® BITS DE PARO = 1 ®
; ® VERIFICAION DE PARIDAD = DESACTIVADO ®
; ® DETECCION DE LA PORTADORA = DESACTIVADO ®
; ® ®
; ®---------------------------------------------------------------®
; ® PARA "TERMINAL DE WINDOWS 311" ®
; ® ®
; ® PREFERENCIAS DE LA TERMINAL ®
; ® ®
; ® MENU CONFIGURACION -> PREFERENCIAS DE LA TERMINAL ®
; ® RC->RC/AL = SELECCIONAR " DE ENTRADA " ®
; ® ®
; ®---------------------------------------------------------------®
; ® PARA "HYPERTERMINAL DE WINDOWS 95" ®
; ® ®
; ® CONFIGURACION ASCII ®
; ® ®
; ® PROPIEDADES -> CONFIGURACION -> CONFIGURACION ASCII ®
; ® EN LAS OPCIONES DE " AL RECIBIR ASCII ", SELECCIONAR ®
; ® SOLAMENTE: ®
; ® "AGREGAR AVANCE DE LINEA AL FINAL DE CADA LINEA RECIBIDA" Y ®
; ® "AJUSTAR LINEAS QUE SOBREPASAN EL ANCHO DE LA TERMINAL" ®
; ® ®
; ®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®
;*****************************************************************************
;
; P R O G R A M A
;
;*****************************************************************************
list p=pic16f84
#include <p16f84.inc>
pcl equ 0x02 ;Contador De Programa
tmr0 equ 0x01 ;timer0
optionr equ 0x81 ;Registro Opcion
status equ 0x03 ;Registro estado
Porta equ 0x05 ;Puerto A
Portb equ 0x06 ;Puerto B
intcon equ 0x0B ;Registro intcon
trisa equ 0x85 ;Controlador del Puerto A
trisb equ 0x86 ;Controlador del Puerto B
CLETRA equ 0x0C ;Contador para el numero de letras del mensaje
CONTBIT equ 0x0D ;Cuenta el Bit de cada letra
LETRA equ 0x0E ;Letras que se esta Visualizando
#define BANK1 bsf status,5 ;Macro para abreviar el Banco 1
#define BANK0 bcf status,5 ;Macro para abreviar el Banco 0
Org 0 ;Directiva de ensamble, posición 0 de la M. RAM
goto INICIO ;Va a la Etiqueta INICIO
TABLA movf CLETRA,0 ;w = CLETRA
Addwf pcl, 1 ;pcl + w y el resultado lo guarda en pcl
retlw 'A' ;Retorno literal con el ASCCI de la letra
retlw 'P'
Retlw 'L'
Retlw 'I'
Retlw 'C'
Retlw 'A'
Retlw 'C'
Retlw 'I'
Retlw 'O'
Retlw 'N'
Retlw ' '
Retlw 'I'
Retlw 'N'
Retlw 'D'
Retlw 'U'
Retlw 'S'
Retlw 'T'
Retlw 'R'
Retlw 'I'
Retlw 'A'
Retlw 'L'
Retlw ' '
Retlw 'D'
Retlw 'E'
Retlw ' '
Retlw 'M'
Retlw 'I'
Retlw 'C'
Retlw 'R'
Retlw 'O'
Retlw 'C'
Retlw 'O'
Retlw 'N'
Retlw 'T'
Retlw 'R'
Retlw 'O'
Retlw 'L'
Retlw 'A'
Retlw 'D'
Retlw 'O'
Retlw 'R'
Retlw 'E'
Retlw 'S'
Retlw 0x0D
Retlw 0x0D
Retlw 'R'
Retlw 'E'
Retlw 'C'
Retlw 'E'
Retlw 'P'
Retlw 'C'
Retlw 'I'
Retlw 'O'
Retlw 'N'
Retlw ' '
Retlw 'Y'
Retlw ' '
Retlw 'T'
Retlw 'R'
Retlw 'A'
Retlw 'N'
Retlw 'S'
Retlw 'M'
Retlw 'I'
Retlw 'S'
Retlw 'I'
Retlw 'O'
Retlw 'N'
Retlw ' '
Retlw 'D'
Retlw 'E'
Retlw ' '
Retlw 'D'
Retlw 'A'
Retlw 'T'
Retlw 'O'
Retlw 'S'
Retlw ' '
Retlw 'U'
Retlw 'T'
Retlw 'I'
Retlw 'L'
Retlw 'I'
Retlw 'Z'
Retlw 'A'
Retlw 'N'
Retlw 'D'
Retlw 'O'
Retlw ' '
Retlw 'E'
Retlw 'L'
Retlw ' '
Retlw 'P'
Retlw 'I'
Retlw 'C'
Retlw ' '
Retlw '1'
Retlw '6'
Retlw 'F'
Retlw '8'
Retlw '4'
Retlw '. '
Retlw 0x0D
retlw 0x0D ;104 Caracteres
;*****************************************************************************
;
;PROGRAMACION DE LOS PTOS, CALIBRACION DE PREESCALIZADOR E INICIO DE VARIABLES
;
;*****************************************************************************
INICIO BANK1 ;Seleccion de banco1
movlw 0x01 ;w = 01
movwf trisb ;trisb = w
movlw 0x00 ;w = 2
movwf trisa ;trisa = w
movlw 0xC0 ;w = 0xC0
movwf optionr ;optionr = w
BANK0 ;Seleccion de banco1
bsf Porta,0 ;Ra0 = 1 (TX=1)
clrf CLETRA ;si, CLETRA = 0
;*****************************************************************************
;
;INICIO DE LA TRANSMISION DEL MENSAJE
;
;*****************************************************************************
MAIN call TABLA ;llama la tabla
movwf LETRA ;LETRA = w
call ENVIA ;Llama Rutina para enviar un Bit del Mensaje
incf CLETRA,1 ;incremeta CLETRA
movlw .104 ;w = 104
xorwf CLETRA,0 ;Exor entre w (104) y Cletra
btfss status,2 ;CLETRA = 104?, envió las 104 letras?
goto MAIN ;no
;*****************************************************************************
;
;ESTA PARTE DEL PROGRAMA SE ENCARGA DE RECIBIR EL BIT PARA LUEGO ENVIARLO.
;
;*****************************************************************************
RX_Y_TX call RECIBE ;Si, Llama la rutina para recibir un caracter
call ENVIA
goto RX_Y_TX
;*****************************************************************************
;
;ESTA RUTINA SE ENCARGA DE TRASMITIR UNO A UNO LOS BIT DE LA TABLA Y CONTROLAR
;LOS RESPECTIVOS TIEMPOS DE BIT QUE PARA NUESTRO CASO ES DE 104 mS (APROX.)
;
;*****************************************************************************
ENVIA bcf Porta,0 ;rb1 = 0 (star bit)
call RETARDO ;Retardo de un tiempo de bit (APROXIMADAMENTE)
movlw .8 ;w = 8
movwf CONTBIT ;CONTBIT = w
nop
nop
NEXT btfsc LETRA,0 ;El bit 0 de Letra es Cero?
goto UNO ;no, va a UNO
CERO nop ;si, no realiza operacion
bcf Porta,0 ;RB0 = 0
goto DECREMENTA ;Va a DECREMENTA
UNO bsf Porta,0 ;RB0 = 1
goto DECREMENTA ;Va a DECREMENTA
DECREMENTA ;Etiqueta
rrf LETRA,1 ;rotar un bit a la derecha
movlw .214
movwf tmr0
bcf intcon,2
call WAIT
nop
decfsz CONTBIT,1 ;decrementa CONTBIT, salta si 0, CONTBIT = 0?
goto NEXT ;no
nop ;si, no realiza operacion
nop ;no realiza operacion
nop ;no realiza operacion
nop ;no realiza operacion
bsf Porta,0 ;si, envia el stop bit
call RETARDO ;Llama retardo para esperar el tiempo del
call RETARDO ;stop bit mas o menos.
return ;retorna del llamado
;*****************************************************************************
;
;ESTA RUTINA SE ENCARGA DE RECIBIR EL DATO QUE TRANSMITE EL COMPUTADOR
;
;*****************************************************************************
RECIBE btfsc Portb,0 ;Llego es estar bit?
goto RECIBE ;no, va a RECIBE
movlw .234 ;si,w = 243
movwf tmr0 ;tmr0 = w
bcf intcon,2 ;borra bandera de desbordamiento del tmr0
MEDTIME btfss intcon,2 ;Paso medio tiempo de bit?
goto MEDTIME ;no, va a MEDTIME
btfsc Portb,0 ;si, fue realmente Start bit?
goto RECIBE ;no, va a RECIBE
movlw .8 ;SI, w = 8
movwf CONTBIT ;CONTBIT = w
movlw .210 ;w = 210
movwf tmr0 ;tmr0 = w
Bcf intcon, 2 ;borra bandera de desbordamiento del tmr0
call WAIT ;Llama rutina de Retardo Programable
no ;no realiza operación
ESTADO btfss Portb,0 ;RB0 = 1?
goto ZERO ;no, va a ZERO
nop ;no realiza operacion
ONE bsf LETRA,7 ;"1" en el bit 7 de LETRA
call ROTA ;Llama rutina de rotacion de LETRA
goto DEC ;Va a DECREMENTA
ZERO bcf LETRA,7 ;"0" en el bit 7 de LETRA
call ROTA ;Llama rutina de rotacion de LETRA
goto DEC ;Va a DECREMENTA
ROTA rrf LETRA,1 ;rotar un bit a la derecha
call RETARDO ;Llama rutina de retardo
return ;retorna del llamado
DEC decfsz CONTBIT,1 ;decrementa CONTBIT
goto ESTADO ;va a ESTADO
rlf LETRA,1 ;rotar un bit a la izquierda
return ;retorna del llamado
RETARDO movlw .213 ;w = 213
movwf tmr0 ;tmr0 = 213
bcf intcon,2 ;borra bandera de desbordamiento del tmro
WAIT btfss intcon,2 ;El tmr0 desbordó?
goto WAIT ;no, va a Wait (Incrementa el tmr0)
return ;si, retorna del llamado
end ;fin

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas