Главная  
18.04.2024 г.
Главная
Проекты
Статьи
Начинающим
Архив новостей
Ссылки
Контакты
Поиск
Файлы
Форум
Карта сайта
Авторизация





Забыли пароль?
Ещё не зарегистрированы? Регистрация
Поддержи наш сайт!
Через WebMoney

 R785211844650
 Z210696637574
 E368177590409

Форум ARV Research
Добро пожаловать, Гость
Пожалуйста Вход или Регистрация.
Забыли пароль?
передача через UART 8 байт (1 просматривает)
_GEN_GOTOBOTTOM Ответить

TOPIC: передача через UART 8 байт

#8142
samoilovich26 (Пользователь)
Новичок
Постов: 1
graphgraph
передача через UART 8 байт 04.04.2013 16:38 Репутация: 0  
Добрый день всем! Задача такая:
- передать 8 байт в контроллер
- распределить по регистрам
- сравнить один из байтов с число, если совпадает отправить полученную посылку обратно

долго бьюсь, может кто подскажет где не так делаю.
отправляю данные, а в ответ не то приходит

.device ATmega8

.include "C:Program Files (x86)AtmelAVR Studio 5.1extensionsAtmelAVRAssembler2.1.51.17avrassemblerincludem8def.inc"
.list
.nolist
;===================================
; Объявления:
.def Counter1= r0
.def Data_X= r1
.def adr_dev= r2
.def funct= r3
.def reg_H= r4
.def reg_L= r5
.def Dt_H= r6
.def Dt_L= r7
.def CRC_L= r8
.def CRC_H= r9

.def Counter2= r10
.def adr= r11
.def CNT= r12
.def CRC16_H= r13
.def CRC16_L= r14

.def Counter_RX= r20
.def SaveSREG= r21

;===================================
; Начало программы

rjmp Init ; Первая выполняемая команда

;===================================
Init:
ldi Counter_RX, 8

uart_init:
LDI r16, 71
out UBRRL, r16
LDI r16, 0
out UBRRH, r16

ldi r16,0
out UCSRA,r16

;Прерывания запрещены,прием-передача разрешены
ldi r16, (1<<RXEN)|(1<<TXEN)|(1<<RXCIE)|(0<<TXCIE)|(0<<UDRIE)
out UCSRB,r16

;Формат кадра 8бит
ldi r16, (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1)
out UCSRC,r16


;===================================
Start:
SBIS UCSRA,RXC
rjmp Start;
rjmp rx_ok

priem_ok:
ldi r17, 0x10
cp funct, r17
breq otpravka
rjmp Start

;отправка
otpravka:
ldi Counter_RX, 8

otpravka_ok:
cpi Counter_RX, 0
breq Start
SBIS UCSRA, UDRE;
rjmp otpravka_ok;
cpi Counter_RX, 8
breq otprav_adr
cpi Counter_RX, 7
breq otprav_funct
cpi Counter_RX, 6
breq otprav_adr_H
cpi Counter_RX, 5
breq otprav_adr_L
cpi Counter_RX, 4
breq otprav_dt_H
cpi Counter_RX, 3
breq otprav_dt_L
cpi Counter_RX, 2
breq otprav_CRCH
cpi Counter_RX, 1
breq otprav_CRCL
rjmp Start

otprav_adr:
mov r16, adr_dev
dec Counter_RX
clr adr_dev
rjmp Buff_Push
otprav_funct:
mov r16, funct
dec Counter_RX
clr funct
rjmp Buff_Push
otprav_adr_H:
mov r16, reg_H
dec Counter_RX
clr reg_H
rjmp Buff_Push
otprav_adr_L:
mov r16, reg_L
dec Counter_RX
clr reg_L
rjmp Buff_Push
otprav_dt_H:
mov r16, Dt_H
dec Counter_RX
clr Dt_H
rjmp Buff_Push
otprav_dt_L:
mov r16, Dt_L
dec Counter_RX
clr Dt_L
rjmp Buff_Push
otprav_CRCH:
mov r16, CRC_H
dec Counter_RX
clr CRC_H
rjmp Buff_Push
otprav_CRCL:
mov r16, CRC_L
dec Counter_RX
clr CRC_L
rjmp Buff_Push

; запись в буфер отправки
Buff_Push:
out UDR, r16
rjmp otpravka_ok



;прием
rx_ok:
ldi Counter_RX, 8
rjmp rx_ok1

rx_ok1:
cpi Counter_RX, 0
breq priem_ok

in r16, UDR
SBIC UCSRA,RXC
rjmp rx_ok1

cpi Counter_RX, 8
breq priem_adr
cpi Counter_RX, 7
breq priem_funct
cpi Counter_RX, 6
breq priem_adr_H
cpi Counter_RX, 5
breq priem_adr_L
cpi Counter_RX, 4
breq priem_dt_H
cpi Counter_RX, 3
breq priem_dt_L
cpi Counter_RX, 2
breq priem_CRCH
cpi Counter_RX, 1
breq priem_CRCL
rjmp priem_ok

priem_adr:
mov adr_dev, r16
dec Counter_RX
clr r16
rjmp rx_ok1
priem_funct:
mov funct, r16
dec Counter_RX
clr r16
rjmp rx_ok1
priem_adr_H:
mov reg_H, r16
dec Counter_RX
clr r16
rjmp rx_ok1
priem_adr_L:
mov reg_L, r16
dec Counter_RX
clr r16
rjmp rx_ok1
priem_dt_H:
mov Dt_H, r16
dec Counter_RX
clr r16
rjmp rx_ok1
priem_dt_L:
mov Dt_L, r16
dec Counter_RX
clr r16
rjmp rx_ok1
priem_CRCH:
mov CRC_H, r16
dec Counter_RX
clr r16
rjmp rx_ok1
priem_CRCL:
mov CRC_L, r16
dec Counter_RX
clr r16
rjmp rx_ok1
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
_GEN_GOTOTOP Ответить
© Copyright 2007 Best of Joomla, Работает на FireBoardполучить последние сообщения прямо на Ваш рабочий стол