# Rutina de comunicacion RS232 con PIC16F84



## boanerge (May 2, 2006)

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.


----------



## ilpancho (May 7, 2006)

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


----------



## boanerge (May 8, 2006)

VAle cumpa, te has pasado de buena onda.

  Gracias de verdad.


----------



## SIMACS (Mar 26, 2008)

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


----------



## Meta (Mar 26, 2008)

Mira esto en Proteus con .hex incluidos.


----------



## boanerge (Abr 6, 2008)

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...


----------



## cooperharris (Abr 10, 2008)

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.


----------



## leo_programer (Abr 10, 2008)

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!


----------



## SIMACS (Ago 11, 2008)

Gracias a todos por su aporte la verdad me fue muy util ya resolvi el problema


----------

