Valera_1411 | Дата: Понедельник, 17.12.2012, 18:15 | Сообщение # 1 |
Рядовой
Группа: Пользователи
Сообщений: 4
Статус: Offline
| Помогите плиз, как прописать прием и отпарвку сообщений через uart по каналау 1 в atmega64 на ассемблере.
|
|
| |
HiSER | Дата: Среда, 19.12.2012, 20:17 | Сообщение # 2 |
Продвинутый автор!
Группа: Проверенные
Сообщений: 254
Статус: Offline
| Что именно не получается?
|
|
| |
Valera_1411 | Дата: Среда, 26.12.2012, 20:11 | Сообщение # 3 |
Рядовой
Группа: Пользователи
Сообщений: 4
Статус: Offline
| именно сам не понимаю. вот код использую мегу 64А: .include "L:\projekt\ASM\program\Appnotes\m64def.inc" .list .equ TxD0 = PE1 ;Выход передатчика-вывод 1 порта E .equ RxD0 = PE0 ;Вход приемника-вывод 0 порта E .equ TxD1 = PD3 ;Выход передатчика-вывод 1 порта D .equ RxD1 = PD2 ;Вход приемника-вывод 0 порта D .equ XTAL = 12000000 ; .equ BaudRate = 2400 ; .equ Baud = (XTAL/(16*BaudRate))-1 .equ UCS_A0=0b00100000 ;0-RXC0(Флаг завершения приема) ;0-TXC0(Флаг завершения передачи) ;1-UDRE0(Флаг опустошения регистра данных) ;0-FE0(Флаг ошибки кадрирования) ;0-DOR0(Флаг переполнения) ;0-UPE0(Флаг ошибки контроля четности) ;0-U2X0(Флаг удвоения скорости обмена) ;0-MPCM0(Флаг мультипроцессорного обмена) .equ UCS_B0=0b00011000 ;0-RXCIE0(Флаг разрешения прерывания по завершению приема) ;0-TXCIE0(Флаг разрешения прерывания по завершению передачи) ;0-UDRIE0(Флаг разрешения прерывания при очистке регистра данных UART) ;1-RXEN0(Флаг разрешения приема) ;1-TXEN0(Флаг разрешения передачи) ;0-UCSZ02(Флаг формата посылок) ;0-RXB80(Флаг 8-й бит принимаемых данных) ;0-TXB80(Флаг 8-й бит переданных данных) .equ UCS_C0=0b00001110 ;_-зарезервировано ;0-UMSEL0(Флаг режима работы USART) ;00-UPM0(Флаг режима схемы контроля и формирования бита четности) ;1-USBS0(Флаг колличества стоп-битов) ;11-UCSZ0(Флаг формата посылок) ;0-UCPOL0(Флаг полярности тактового сигнала) .def t0=r16 ;Временный рабочий регистр r16 .def t1=r17 ;Временный рабочий регистр r17 .def i1=r25 ;Временный рабочий регистр прерывания
.cseg .org 0 jmp Initial .org ADCCaddr ;Адрес вектора прерывания ldi i1, 0b00001000 ;____01__-SM(шумоподавление ADC) ;___0____-SE(запрет спящего режима) out MCUCR, i1 reti Initial: ldi t1, Low(RAMEND) out SPL, t1 ldi t1, High(RAMEND) out SPH, t1 sei InitPorts: clr t0 ;Вход (1) out DDRB, t0 ;Порт В out DDRC, t0 ;Порт С ser t0 ;Выход (0) out DDRA, t0 ;Порт А out DDRE, t0 ;Порт Е sts DDRG, t0 ;Порт G out PORTB, t0 ;Подтягивающие резисторы порта В out PORTC, t0 ;Подтягивающие резисторы порта С
;--Установка начальных условий------------------------------------------------------------------
ldi t0, 0b00110011 out PORTA, t0 ;ser t0 ;out PORTB, t0 ;out PORTC, t0 clr t0 out PORTE, t0 sts PORTG, t0 ;*************************************************************************************************
;**ОСНОВНАЯ ПРОГРАММА*****************************************************************************
rcall InitUSART Proverka: ldi zH,High(Nachalo<<1) ldi zl,Low(Nachalo<<1) rcall Out_Text ldi zH,High(Komanda<<1) ldi zl,Low(Komanda<<1) rcall Out_Text rjmp Opisanie
Opisanie: ldi zH,High(Opisanie_komand1<<1) ldi zl,Low(Opisanie_komand1<<1) rcall Out_Text ldi zH,High(Opisanie_komand2<<1) ldi zl,Low(Opisanie_komand2<<1) rcall Out_Text ldi zH,High(Opisanie_komand3<<1) ldi zl,Low(Opisanie_komand3<<1) rcall Out_Text
InitUSART: ldi t1, High(Baud) ldi t0, Low(Baud) out UBRR0L, t0 sts UBRR0H, t1 ;--Используем передатчик и приемник------- ldi t0, UCS_B0 out UCSR0B, t0 ;--Пределы передачи: 8бит 1 стоп-бит------ ldi t0, UCS_C0 sts UCSR0C, t0 ;--Удвоение скорость передачи данных------ ;ldi t1, UCS_A0 ;out UCSR0A, t1 ret
Out_Text: lpm t0, z+ cpi t0, 0 breq OT2 OT1: sbis UCSR0A, UDRE0 rjmp OT1 out UDR0, t0 rjmp Out_Text OT2: ret
Komanda: .db 13,10,"Введите команду: ",0 Nachalo: .db 13,10,"Автоматизированный пульт контроля блоков электроэлементов",0
Opisanie_komand1: .db 13,10,"Opisanie - описание команд ",0 Opisanie_komand2: .db 13,10,"Nastr - настройка БЭЭ АЮИЖ.469135.421",0 Opisanie_komand3: .db 13,10,"Bee421 - автоматический контроль БЭЭ АЮИЖ.469135.421 ",0
Сообщение отредактировал Valera_1411 - Четверг, 27.12.2012, 20:21 |
|
| |
HiSER | Дата: Среда, 26.12.2012, 22:47 | Сообщение # 4 |
Продвинутый автор!
Группа: Проверенные
Сообщений: 254
Статус: Offline
| А как я могу помочь если ты сам не понимаешь что пишешь?
|
|
| |
Valera_1411 | Дата: Четверг, 27.12.2012, 20:23 | Сообщение # 5 |
Рядовой
Группа: Пользователи
Сообщений: 4
Статус: Offline
| смысл такой, пишу программу по контролю заводских блоков электроэлементов, у меня по uart должны предаться некоторые сообщения на комп, часть которых я прописал вконце программы. Пробовал моделировать прогу в протеусе - работает. На железе вообще нехочет. Возможно или в части инициализации(InitUSART) uart проблема или в части передачи сообщения(Out_Text)? Если есть рабочий код инициализации и передачи сообщения, пришлите плиз для меги 64.
Сообщение отредактировал Valera_1411 - Четверг, 27.12.2012, 20:24 |
|
| |
HiSER | Дата: Четверг, 27.12.2012, 21:47 | Сообщение # 6 |
Продвинутый автор!
Группа: Проверенные
Сообщений: 254
Статус: Offline
| Если в протеусе нормально эмулируется, может все таки в железе проблема? Добавлено (27.12.2012, 21:47) --------------------------------------------- Попробуй еще отключить JTAG из-за него может еще не работать.
|
|
| |