Здравствуйте!
Уважаемые коллеги, стоит задача по реализации 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 не работает. Проблема в коде (проверили).
Может, кто-нибудь сталкивался с нечто подобным.
Любое предложение будет ценным, так как опыта большого нет.
Пожалуйста, не спрашивайте про тех.поддержку и форум Миландр...........