Rutina de comunicacion RS232 con PIC16F84

Hola amigos:

Les cuento, estoy realizano mi proyecto de titulo y se trata de hacer un modulo de aprendisaje, para la electronica digital, donde la idea es insertar fallas a traves del PC.
Pretendo comunicar al pc con el módulo a traves del PIC16F84, la idea es que este se interrumpa cuando el pc se comunique y salte a una rutina que atienda a esta interrupción accionando a un rele que provoque una falla enel módulo. Bueno el tema de la programación lo manejo en terminos generales.

Lo que necesito es que me ayudeis, por favor, a programar lo anterior descrito; como la rutina de comunicacion (RS232 o USB, la que sea mejor) y la interrupcion misma (cual usar entre las que posee el PIC y por que usarla, etcétera), que pines utilizar para la comunicacion y por que, etc , etc.

Como les contara, manejo el tema pero me falta el empujon para empesar a programar el pic vajo los conceptos que les conté.

Atento a vuestros comentarios, saludos cordiales.

Ronald A.
 

Estos es el programa que uso para enviar y recibir por RS232 con el 16F84 en assembler. Yo uso el programa MPLAB para complilar.

Codigo para enviar datos:


list p=16f84A
include "p16f84A.inc"
indf equ 0h
tmro equ 1h
pc equ 2h
status equ 3h
fsr equ 4h
ptoa equ 5h
ptob equ 6h
trisa equ 85h
trisb equ 86h
trans equ 0fh
r0d equ 0dh
r0e equ 0eh
unidad equ 10h
decena equ 11h
centena equ 12h
r14 equ 14h
r1b equ 1bh
loops equ 13h
loops2 equ 14h
conta equ 15h
z equ 2
rp0 equ 5h
z equ 2h
c equ 0h
w equ 0h
r equ 1h
tx equ 7h
org 00

goto inicio
org 05h
delay1 movlw .166
startup movwf r0e
redo nop
nop
decfsz r0e
goto redo
retlw 0
retardo movlw d'100'
movwf loops
top2 movlw d'110'
movwf loops2
top nop
nop
nop
nop
nop
nop
decfsz loops2
goto top
decfsz loops
goto top2
retlw 0

enviar movwf trans
xmrt movlw 8
movwf r0d
bcf ptob,tx
call delay1
xnext bcf ptob,tx
bcf status,c
rrf trans
btfsc status,c
bsf ptob,tx
call delay1
decfsz r0d
goto xnext
bsf ptob,tx
call delay1
retlw 0

inicio bsf status,rp0
movlw 00h
movwf trisa
movlw 07fh
movwf trisb
bcf status,rp0
bsf ptob,tx


end






Código para recibir:



list p=16f84A
include "p16f84A.inc"
radix hex
org 0x0c


indf equ 0h
tmro equ 1h
pc equ 2h
status equ 3h
fsr equ 4h
ptoa equ 5h
ptob equ 6h
trisa equ 85h
trisb equ 86h
r0d equ 0dh
r0e equ 0eh
conta equ 10h
recep equ 11h
z equ 2
c equ 0
rp0 equ 5h
z equ 2h
c equ 0h

w equ 0h
r equ 1h
rx equ 6h


org 00
goto inicio
org 05h
unoymedio
movlw .249
goto startup
delayl movlw .166
startup movwf r0e
redo nop
nop
decfsz r0e
goto redo
retlw 0
recibir nop
clrf recep
btfsc ptob,rx
goto recibir
call unoymedio
rcvr movlw 8
movwf conta
rnext bcf status,c
btfsc ptob,rx
bsf status,c
rrf recep
call delayl
decfsz conta
goto rnext
retlw 0
inicio bsf status,rp0
movlw 00h
movwf trisa
movlw 0ffh
movwf trisb
bcf status,rp0
clrf recep
clrf ptoa
ciclo call recibir
movlw 30h
subwf recep,w
movwf ptoa
goto ciclo

end
 
ilpancho
Excelente este aporte, pero tengo un problema al enviar datos al PC pues, al parecer el programa que tengo en c no responde a la recepción de datos, No se tu pero yo tengo el programa que esta en un libro de microcontroladores avanzado de cekit- desearia que alguno me hiciera el favor de enviarme un archivo o un link que permita leer los datos enviados por el pic
Hey gracias a todos
 

Adjuntos

  • recibe1_644.c
    1.3 KB · Visitas: 535
Hola....Simacs....creo que tu problema es C...en cuanto a recibir datos desde el pic....lo mejor es que empieses a jugar con el hiper terminal que cualquier windows trae....y hay siges....ojalá te sirva de algo ...suerte...
 
primero tienes que tener presente el protocolo de comunicacion, no sirve de nada copiar y pegar codigo,lo que se aprende bien no se olvida,recuerda tambien que tienes qeu conectar un integrado como por ejemplo el max 232 entre el pic y el puerto rs232 porque los voltajes que envian ambos dispositivos son diferentes, unos positivos y otros negativos con mayor nivel,es menester ester interpretador.
 
hola a todos, hace rato que no publico pero bueno, y aunque parece que el problema esta solucionado, aqui hago mi pequeño aporte para lo de c, es para un 16f877 (creo, no me acuerdo), y pues, funciona, de pronto a alguno le sirva, lo encuentran aqui:
link1

cuidensen!
 
Atrás
Arriba