Polyan 0 26 апреля, 2017 Опубликовано 26 апреля, 2017 · Жалоба Здравствуйте! Уважаемые коллеги, стоит задача по реализации USART на микроконтроллере 1886ВЕ4У (PIC17C756). Приобрели у Миландр программатор, отладочную плату с микросхемой 5559ИН4У (аналог МАХ232) и кварцевый генератор 48МГц, написали код (среда IDE for 1886) : Include 1886VE4.INC ;********* Переменные ************************************ CBLOCK 0x20 ;Начальный адрес блока констант Rbyte ;Принятый байт ENDC ; ;******** Константы *************************************** Baudrate equ 4Dh ; скорость 9600 ;--------------------------------------------------------- BSR1 equ 00Fh ; Регистр выбора банка PORTA equ 112h ; Порт А PORTD equ 114h ; Порт D ;-------Регистры передатчика и приемника---------------------- TXREG1 equ 516h ; буфер передатчика RCREG1 equ 514h ; буфер приемника PIR1 equ 214h ; регистр флагов передатчика PIE1 equ 215h ; регистр разрешения/запрета прерываний передатчика (1-й банк) TXSTA1 equ 515h ; конфигурация передатчика (1-й банк) RCSTA1 equ 513h ; конфигурация приемника SPBRG1 equ 517h ; настройка скорости ;******************************************************** BSR1 EQU 01FH ; PCLATH1 EQU 020H ; ALUSTA1 EQU 021H ; WREG1 EQU 022H ; WORK0 EQU 030H ; рабочий регистр 0 WORK1 EQU 031H ; рабочий регистр 1 WORK2 EQU 032H ; рабочий регистр 2 WORK3 EQU 033H ; рабочий регистр 3 org 0000H Start BSF GLINTD ; (CPUSTA,GLINTD) запрет всех прерываний CLRF BSR1,F ; установка SFR и GPR Bank 0 ;******** Настройка портов ****************************************************************************** Start MOVLB 01h ; выбор Банк1 CLRF PORTA ; инициализация порта А ;******** Настройка приемо-передатчика ****************************************************************** MOVLB 05h ; выбор Банк1 MOVLW Baudrate ; загрузить устанавливаемую скорость в аккумулятор MOVWF SPBRG1 ; установить скорость MOVLW 20h ; 00100000 8-разрядные данные, включить передачу, MOVWF TXSTA1 ; высокоскоростной асинхронный режим MOVLB 02H ; переход в банк2 BCF PIE1, 1 ; запрещены прерывания от TXIE=0 BCF PIE1, 0 ; запрещены прерывания от RСIE=0 MOVLB 05H ; переход в банк5 MOVLW 80h ; 10000000 8-разрядные данные, выключить прием, MOVWF RCSTA1 ; включить модуль USART ;---------- Прием ------------------------- BSF RCSTA1,4 ; непрерывный прием разрешен Prog BTFSS PIR1,1 ; если 1-й бит регистра PIR1 = 1, то в буфер пришли данные, пропускаем следующую команду GOTO Prog MOVLW RCREG10 ; читаем буфер приемника в аккумулятор MOVWF Rbyte ; помещаем это значение в принятый байт BCF RCSTA1,4 ; выключаем приемник INCF Rbyte,1 ; прибавляем к принятому байту 1 peredacha BTFSS TXSTA1,1 ; если 1-й бит регистра TXSTA = 1, то передача завершена (TSR пуст) GOTO peredacha BSF RCSTA1,4 ; включаем приемник GOTO Prog BTFSS TXSTA1,1 ; если 1-й бит регистра TXSTA1=1,завершена end Программируется нормально, но USART не работает. Проблема в коде (проверили). Может, кто-нибудь сталкивался с нечто подобным. Любое предложение будет ценным, так как опыта большого нет. Пожалуйста, не спрашивайте про тех.поддержку и форум Миландр........... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться