Programmet jag har testat med är detta:
Kod: Markera allt
START ORG h'0000'
goto INIT
ISR ORG h'0004'
goto INIT
INIT
banksel OSCCON
movlw b'01110101'
movwf OSCCON
movlw b'00001111'
movwf OSCTUNE
banksel PORTA
clrf PORTA
clrf PORTB
clrf PORTC
clrf PORTD
banksel ANSEL
clrf ANSEL
clrf ANSELH
banksel TRISA
clrf TRISA
clrf TRISB
movlw b'11000000'
movwf TRISC
clrf TRISD
goto MAIN
MAIN
BOOT_UP_UART
banksel BAUDCTL
movlw b'01001000'
movwf BAUDCTL
banksel SPBRG
movlw d'103' ; 207 = 9200bps, 103 = 19200bps, 34 = 57600bps
movwf SPBRG
banksel RCSTA
movlw b'10010000'
movwf RCSTA
banksel TXSTA
movlw b'00100100'
movwf TXSTA
UART_PREPARE
call DELAY
movf RCREG, W
movf RCREG, W
movf RCREG, W
call UART_MESSAGE
UART_RX
bsf PORTD,1
call CHAR_RX
call DELAY
goto UART_RX
CHAR_RX
banksel PIR1
btfss PIR1, RCIF
goto CHAR_RX
movf RCREG,W
;bsf PORTD,1
return
UART_MESSAGE
movlw h'41'
call CHAR_TX
return
CHAR_TX
banksel TXREG
movwf TXREG
CHAR_TX_WAIT
banksel TXSTA
btfss TXSTA,TRMT
goto CHAR_TX_WAIT
banksel PORTD
bsf PORTD,0
return
DELAY
;1999996 cycles
movlw 0x11
movwf d1
movlw 0x5D
movwf d2
movlw 0x05
movwf d3
Delay_0
decfsz d1, f
goto $+2
decfsz d2, f
goto $+2
decfsz d3, f
goto Delay_0
;4 cycles (including call)
return
END
Edit: Kom att tänka på att jag inte hade sådana här problem med en 16F688. Där gick det att skicka till 16F887 utan problem. Dock fick jag problem när jag skulle skicka från 16F887 till 16F688.
16F688 har en .INC fil från MPLAB 7.62 medan 16F887 använder den som kommer med MPLAB 7.60.