Не понимаю, не хочет принимать байт и всё тут. Передача в терминал работает. На приеме висит в цикле ожидая флага RCIF в PIR1. Или в протеусе это в принципе не работает? Но передачу ведь его терминал принимает.
Вот просто тестовый код, потом все будет переписано по уму, это просто проверить саму возможность приема. В архиве моделька с кодом
Код:
list p=16f88 ; list directive to define processor
#include <p16f88.inc> ; processor specific variable definitions
errorlevel -302, -307
__CONFIG _CONFIG1, H'3B0A'
__CONFIG _CONFIG2, H'0000'
CBLOCK 0x70 ; all banks vars
w_temp ; variable used for context saving
status_temp ; variable used for context saving
pclath_temp
ENDC
CBLOCK 0x20 ; bank 0 vars
char0
COUNT1
ENDC
;**********************************************************************
ORG 0x000 ; reset vector
bsf STATUS, RP0 ; Bank 1
movlw b'00000111' ; setting port to digital
movwf CMCON
goto main ; go to beginning of program
ORG 0x004 ; interrupt vector location
retfie
;**********************************************************************
main
clrf OSCCON
movlw b'10000001'
movwf OPTION_REG
clrf ANSEL ; digital I/O
movlw b'01111110' ; PORTB 0, 7-output
movwf TRISB
movlw b'11111111' ; PORTA - input
movwf TRISA
bcf STATUS, RP0 ; Bank 0
clrf PORTA
clrf PORTB
bsf STATUS, RP0 ; Bank 1
;---CONFIGURE SPBRG FOR DESIRED BAUD RATE
movlw D'51' ;baud rate = 19200bps -> x=Fosc/(baud_rate*16)-1
movwf SPBRG ;at 16MHZ
;---CONFIGURE TXSTA
movlw B'00100100' ;Configures TXSTA as 8 bit transmission, transmit enabled, async mode, high speed baud rate
movwf TXSTA
bsf PIE1, RCIE
bcf STATUS, RP0 ; Bank 0
movlw b'10010000' ;enable serial port receive
movwf RCSTA
; bsf INTCON,6 ; Peripheral Interrupt Enable
; bsf INTCON, GIE ; Global Interrupt Enable
movlw 0x41
movwf char0 ;put A (ascii code 0x41) character to char0 register
main_cycle
;send / TX
movlw 0x54 ;T
movwf TXREG ;place the A character to TXREG
bsf STATUS, RP0 ; Bank 1
wthere1
btfss TXSTA, TRMT ;check if TRMT is empty
goto wthere1 ;if not, check again
bcf STATUS, RP0 ;bank 0, if TRMT is empty then the character has been sent
movlw 0x65 ;e
movwf TXREG ;place the A character to TXREG
bsf STATUS, RP0 ; Bank 1
wthere2
btfss TXSTA, TRMT ;check if TRMT is empty
goto wthere2 ;if not, check again
bcf STATUS, RP0 ;bank 0, if TRMT is empty then the character has been sent
movlw 0x73 ;s
movwf TXREG ;place the A character to TXREG
bsf STATUS, RP0 ; Bank 1
wthere3
btfss TXSTA, TRMT ;check if TRMT is empty
goto wthere3 ;if not, check again
bcf STATUS, RP0 ;bank 0, if TRMT is empty then the character has been sent
movlw 0x74 ;t
movwf TXREG ;place the A character to TXREG
bsf STATUS, RP0 ; Bank 1
wthere4
btfss TXSTA, TRMT ;check if TRMT is empty
goto wthere4 ;if not, check again
bcf STATUS, RP0 ;bank 0, if TRMT is empty then the character has been sent
ccc1
;receive
bcf RCSTA, CREN ;CREN bit
bsf RCSTA, CREN ;CREN bit
wait_symbol btfss PIR1, RCIF ;bit 5
movlw b'00000001' ;инвертируем RB0
xorwf PORTB, F
goto wait_symbol
movf RCREG, W
movwf COUNT1
; bcf PIR1, RCIF ;сбросится сам при чтении RCREG
movlw b'10000000' ;инвертируем RB7
xorwf PORTB, F
incf char0, F
movf char0, W
movwf TXREG ;place W to TXREG
bsf STATUS, RP0 ; Bank 1
wthere5 btfss TXSTA, TRMT ;check if TRMT is empty
goto wthere5 ;if not, check again
bcf STATUS, RP0 ;bank 0, if TRMT is empty then the character has been sent
goto ccc1
; goto main_cycle
END