hola
mi nombre es javier eduardo soy estudiante de electronica en colombia tengo el sigte inconveniente:
estoy realizando un proyecto donde debo controlar varios dispositivos conectados AL PIC 16F873
EL PROBLEMA ES " no se como hacer la interfaz de comunicacion entre el pc y el pic ya que consegui un diseño completo en una revista de la cekit pero no entiendo lo del envio y la recepcion de los datos ya que no se como lo hace el codigo es el sgt:
STATUS equ 03h ;registro de estados
INTCON equ 0bh ;registro INTCON
PIE1 equ 8ch ;registro de interrupcion perifericos
PIR1 equ 0ch ;Bandera de interrupcion
RCSTA equ 18h ;registro de Estado de Rx
TXSTA equ 98h ;registro de estado de Tx
SPBRG equ 99h ;registro generador de baud rate
TX equ 19h
RX equ 1Ah
OPCION equ 81h
PORTA equ 05h ;direccion en RAM
PORTB equ 06h ;direccion 06 de la RAM
PORTC equ 07h
loops equ 0dh ;utilizado en retardos
loops2 equ 0eh ;utilizado en retardos
TRISA equ 85h ;configuracion del puerto A
TRISB equ 86h ;configuracion puerto B
TRISC equ 87h ;configuracion puerto C
RX1 equ 20h ;registro para los datos Rx
RX2 equ 21h
RX11 equ 22h
RX22 equ 23h
CONTARX equ 24h ;contador de bytes recibidos
RXMEM equ 25h ;Guarda el ultimo Rx leido
z equ 02h ;bandera de 0 del registro de estados
c equ 00h ;bandera de carry del registro de estados
w equ 00h ;el resultado se guarda en w
r equ 01h ;el resultado se guarda enen registro
reset org 00h ;reset en la direccion 00
goto inicio ;se salta al inicio del programa
;---------------------interrupciones-----------------------
interrupcion
org 4 ;rutina de interrupcion
btfss PIR1,5 ;verifica si hay int de USART
goto saleint
movf RX,w ;lee el registro serial
movwf RXMEM ;lo guarda en memoria
incf CONTARX,r ;contador de bytes recibidos
movf CONTARX,w ;carga el contador de bytes
xorlw 01h ;compara
btfsc STATUS,z ;si es cero(diferente)salta
goto primerbyte ;si es igual......
movf CONTARX,w ;carga el contador de bytes
xorlw 02h ;compara
btfsc STATUS,z ;si es cero(diferente)salta
goto segbyte ;si es igual......
movf CONTARX,w ;carga el contador de bytes
xorlw 03h ;compara
btfsc STATUS,z ;si es cero(diferente)salta
goto tercerbyte ;si es igual
goto cuartobyte
primerbyte
movf RXMEM,w ;lee dato serial memorizado
movwf RX1 ;lo guarda en el registro del dato1
goto saleint
segbyte
movf RXMEM,w ;lee dato serial memorizado
movwf RX2 ;lo guarda en el registro del dato2
goto saleint
tercerbyte
movf RXMEM,w ;lee dato serial memorizado
movwf RX11 ;lo guarda en el registro del dato3
goto saleint
cuartobyte
movf RXMEM,w ;lee dato serial memorizado
movwf RX22 ;lo guarda en el registro del dato4
clrf CONTARX ;pone en ceros el contador de bytes
movf RX1,w ;lee dato serial memorizado
xorwf RX11,w ;compara el 1er y 3er byte
btfss STATUS,z ;si la bandera es uno (iguales)salta
goto enviar
movf RX1,w ;tomar el 1er byte recibido
movwf PORTA ;LO TRANSFIERE AL PUERTO A
movf RX2,W
xorwf RX22,w ;compara el 2do y 4to byte
btfss STATUS,z ;si la bandera es uno(1) (iguales)salta
goto saleint
movf RX2,w ;toma el 3er byte recibido
movwf PORTC ;lo transfiere al puerto c
enviar
movf RX1,w
movwf TX ;envia el 1er byte hacia el Pc
call retardo
comf PORTB,w
movwf TX ;envia el puertoB hacia el Pc
call retardo
movf RX2,w
movwf TX ;envia el 3er byte hacia el Pc
saleint
retfie ;regresa de la interrupcion
;---------------PROGRAMA PRINCIPAL-----------------------
inicio bsf STATUS,5 ;banco 2
movlw B'00000000' ;
movwf TRISA ;puerto A como salidas
movlw B'11110111' ;
movwf TRISB ;puerto B como entradas
movlw B'10000000' ;
movwf TRISC ;puerto C como salidas
movlw 020h ;en el registro PEI1 solo se
movwf PIE1 ;SE PROGRAMA bit para interrupcion serial
movlw B'00100100' ;en el registro de estado de Tx se
movwf TXSTA ;programan TXENAB Y BRGH
movlw D'25' ;en el registro de baud rate se
movwf SPBRG ;para 9600 bps (clock=4MHZ)
bcf STATUS,5 ;BANCO 1
movlw 0c0h ;en el registro INTCON solo se
movwf INTCON ;bit PEIE y se habilita GIE
movlw B'10010000' ;en el registro de estado de RX
movwf RCSTA ;se programa bit SPENAB Y CRENAB
movlw 00h
movwf CONTARX ;se pone en ceros el cont de bytes
leer
nop
nop
goto leer ;
;-------------------------------------------------------------------------
retardo ;subrutina de retardo de 50 milisegundos
movlw D'10' ;el registro loops contiene el numero
movwf loops ;de milisegundos del retardo
top2 movlw D'110' ;
movwf loops2 ;
top nop
nop
nop
nop
clrwdt
nop
decfsz loops2 ;pregunta si termino 1 ms
goto top
decfsz loops ;pregunta si termina el retardo
goto top2
retlw 0
end
;===================================================================================
;fusibles de programacion
; osc XT
; watchdog off
; code protect off
; power-up-timer ON
; micro. PIC16F873
;===================================================================================