Si no es complejo para nada.. uno trasmite una dato por UART cosa siempre y cuando exista algun cambio en PORTA
Y el otro cambia las salidas PORTA,3 y 4 + PORTB cada cierto tiempo.
El unico problema a solucionar para unirlos es:
- En uno el TRISA esta definido como 0x0F , es decir de PORTA,0 a 3 todas entradas, y en el otro el PORTA,3 es una salida
- El programa de transmitir, no tieen en cuenta que va a leer las salidas, asi que un cambio de las salidas haria que transmita cuando no debe, para eso se deberia agergar un AND al datos del PORTA antes de compararlos
Tomando eso en cuenta y decidiendo hacer que el TRISA sea 0x07, asi deberia quedar el programa:
list p=16f88, r=dec ;especificaciones del micro
#include <p16f88.inc> ; inclusion de archivos y registros
__CONFIG _CONFIG1, _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _MCLR_OFF & _LVP_OFF & _INTRC_IO
cblock H'70'
d1
d2
d3
TEMP
tempa
endc
RST code 0x00
goto Start
Start
bsf STATUS, RP0
movlw b'00000111'
movwf TRISA
clrf TRISB
movlw 0x60
movwf OSCCON
clrf ANSEL
MOVLW D'25' ; 9600 BAUD @ 20 MHZ FOSC +0.16 ERR
MOVWF SPBRG
MOVLW B'00100100' ; BRGH = 1
MOVWF TXSTA ; ENABLE ASYNC TRANSMISSION, SET BRGH
BANKSEL RCSTA ; BANK0
MOVLW B'10010000'
MOVWF RCSTA ; ENABLE ASYNC RECEPTION
MOVF RCREG,W
MOVF RCREG,W
MOVF RCREG,W ; FLUSH RECEIVE BUFFER
clrf PORTA
bsf PORTA, 4
bsf PORTA, 3
CLRF TEMP
movlw d'02'
movwf tempa
goto INICIO
SETTLE
DECFSZ TEMP
GOTO SETTLE
INICIO
movlw b'1001111'
bcf PORTA, 4
movwf PORTB
call Delay
bsf PORTA, 4
movlw b'0111111'
bcf PORTA, 3
movwf PORTB
call Delay
bsf PORTA, 3
movf PORTA, W
andlw 0x00
subwf tempa, W
btfsc STATUS, Z
goto INICIO
movf PORTA, W
movwf tempa
addlw h'30'
call transmitir
goto INICIO
transmitir
NOP
BTFSS PIR1,TXIF ;XMIT BUFFER EMPTY?
GOTO transmitir ;NO, WAIT
MOVWF TXREG
return
Delay
;49993 cycles
movlw 0x0E
movwf d1
movlw 0x28
movwf d2
Delay_0
decfsz d1, f
goto $+2
decfsz d2, f
goto Delay_0
;3 cycles
goto $+1
nop
;4 cycles (including call)
return
END
El programa que pase tiene 2 problemas:
- El UART solo va a enviar luego de que haga toda la animacion de los leds y puede que cambie las entradas y no envie nada, segun que tan grande sean las demoras
- Como todo en la vida no es color de rosa, le meti un error para que lo solucionaras, ya que era tan facil de unirlos algun laburo tenes que tener o no vas a aprender