Форум РадиоКот https://radiokot.ru/forum/ |
|
PIC16f88 не хочет принимать байт по UART https://radiokot.ru/forum/viewtopic.php?f=58&t=196364 |
Страница 1 из 1 |
Автор: | MyxoMop [ Пн янв 13, 2025 18:00:42 ] | ||
Заголовок сообщения: | PIC16f88 не хочет принимать байт по UART | ||
Не понимаю, не хочет принимать байт и всё тут. Передача в терминал работает. На приеме висит в цикле ожидая флага 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
|
Автор: | Родэрик [ Пн янв 13, 2025 18:43:31 ] |
Заголовок сообщения: | Re: PIC16f88 не хочет принимать байт по UART |
вот это : Код: wait_symbol btfss PIR1, RCIF ;bit 5 movlw b'00000001' ;инвертируем RB0 xorwf PORTB, F goto wait_symbol так и задумывалось? и ещё - зачем включаете прерывания (gie)? зы: вопрос по gie снимается ... сейчас только заметил, что те строки закомментированы |
Автор: | MyxoMop [ Пн янв 13, 2025 18:53:35 ] |
Заголовок сообщения: | Re: PIC16f88 не хочет принимать байт по UART |
Родэрик писал(а): так и задумывалось? изначально конечно нет, просто чтоб видеть в каком месте затык, ну т.е. пока ждем приема - дергается нога для теста. Но без этого тоже не работало. Родэрик писал(а): и ещё - зачем включаете прерывания (gie)? так эта строка закомментирована, пробовал на всякий случай включать переферийные прерывания PEIE без глобального gie - не помогло. строку gie просто скопировал вместе с peie с другого проекта. |
Автор: | Родэрик [ Пн янв 13, 2025 18:56:10 ] |
Заголовок сообщения: | Re: PIC16f88 не хочет принимать байт по UART |
я про то, что "goto wait_symbol" всегда будет работать ... |
Автор: | MyxoMop [ Пн янв 13, 2025 19:08:15 ] |
Заголовок сообщения: | Re: PIC16f88 не хочет принимать байт по UART |
я про то, что "goto wait_symbol" всегда будет работать ... А, точно. Пропустил. Но на самом деле я это вставил совсем недавно, без этого в таком виде wait_symbol btfss PIR1, RCIF ;bit 5 goto wait_symbol тоже не работало. Upd. Щас убрал, перекомпилил - заработало! Родэрик, большое спасибо. Завтра начну писать настоящий код. Конечно таких останавливающих программу ждущих циклов не будет. Мне тут главное было отладить прием-передачу. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |