1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 33
1

Принять через uart байт и записать его в память

21.01.2016, 18:46. Показов 2038. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вобщем, если верить преподавателю, этот код надо немного переделать для желаемого эффекта
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
.device ATmega8
.nolist
.include "c:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m8def.inc"
.list
 
.def        temp=r16
 
.org        $000
                     rjmp      init
.org        $00c
;                    rjmp      goRXC
                     rjmp      goUDRE
;                    rjmp      goTXC
 
init:
                     ldi               temp,low(RAMEND)
                     out               SPL,temp
                     ldi               temp,high(RAMEND)
                     out               SPH,temp
                     clr               temp
                     out               DDRD,temp
                     ldi               temp,0b11111100
                     out               DDRD,temp
                     ldi               temp,0b00000000
                     out               UCSRA,temp
                     ldi               temp,0b11111000
                     out               UCSRB,temp
                     ldi               temp,0b10000110
                     out               UCSRC,temp
                     ldi               temp,207
                     out               UBRRL,temp
                     clr               temp
                     out               UBRRH,temp
                     sei
 
start:
                     in                temp,pinB
goUDRE:
                     out               UDR,temp
                     rjmp      start
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.01.2016, 18:46
Ответы с готовыми решениями:

Как в симуляторе "принять" байт по UART?
Всем привет! Вопрос такого плана... Как в симуляторе студии "принять" байт по UART? Т.е. например...

Как по UART передать принять пару-тройку байт? Не могу стартануть
Всем привет! Есть устройство с UART интерфейсом. Любой терминальной программой я посьілаю запрос...

Принять массив байт через сокет
Добрый вечер.. Есть соединение на сокетах. С сервера идут сообщения по 8 байт. Как их принимать...

Передача 4 байт по UART через прерывание
Пробую передать четыре байта по UART из прерывания. При первой попытки байты передаются нормально...

Как через serialport принять неизвестное количество байт
как через serialport принять неизвестное количество байт

13
1176 / 653 / 111
Регистрация: 15.05.2012
Сообщений: 4,012
22.01.2016, 14:39 2
Согласен. Переделок минимум.

Не по теме:

Напильник - наше всё.

1
814 / 797 / 201
Регистрация: 21.09.2012
Сообщений: 2,656
22.01.2016, 16:50 3
По поводу SPL и SPH. По идее сначала заносится старший байт, потом младший
1
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
22.01.2016, 17:45 4
Лучший ответ Сообщение было отмечено Tess94 как решение

Решение

Будем посмотреть, поверит ли вам препод
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
        .device ATmega8
            .equ    XTAL = 8000000  
        .equ    baudrate = 9600  
        .equ    bauddivider = XTAL/(16*baudrate)-1   
 
.cseg
.org $00
            rjmp    start                
 
      
.org        $00c 
start:
;Инициализация стека
            ldi     R16, high (ramend)
            out     SPH, R16
            ldi     R16, low (ramend)
            out     SPL, R16
;Инициализация портов
 
; Настройка USORT
        ldi     R16, low(bauddivider)
        out     UBRRL,R16
        ldi     R16, high(bauddivider)
        out     UBRRH,R16
 
        ldi     R16,0
        out     UCSRA, R16
 
; Прерывания запрещены, прием-передача разрешен.
        ldi     R16, (1<<RXEN)|(1<<TXEN)|(0<<RXCIE)|(0<<TXCIE)|(0<<UDRIE)
        out     UCSRB, R16  
 
; Формат кадра - 8 бит, пишем в регистр UCSRC, за это отвечает бит селектор
        ldi     R16, (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1)
        out     UCSRC, R16 
; рабочий цикл
work:
        call    uart_rcv
            sts $100, r16   ; Записать в память в ячейку $100
            rjmp    work
; Ожидание байта
uart_rcv:   sbis    UCSRA,RXC   ; Ждем флага прихода байта
        jmp uart_rcv    ; вращаясь в цикле
 
        in  R16,UDR     ; байт пришел - забираем.
        ret         ; Выходим. Результат в R16
ВНИМАНИЕ!!!! выше написанное представляет из себя ворованные с разных ресурсов куски кода.
возможны ошибки.
1
1176 / 653 / 111
Регистрация: 15.05.2012
Сообщений: 4,012
22.01.2016, 18:52 5
Цитата Сообщение от Dolphin Посмотреть сообщение
сначала заносится старший байт
В чем разница?

Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от Витальич Посмотреть сообщение
ворованные
Если что - я галочки ставлю.

0
Витальич
24.01.2016, 09:26
  #6

Не по теме:

Вот и делай людям добро. ТС - пропала даже спасибо не сказала, pyzhman галочки ставит, кстати я запомню, если что, адресок я Ваш срисовал. magirus в другой теме за УГО уголовным преследованием пугает. Черная полоса одним словом.

0
1176 / 653 / 111
Регистрация: 15.05.2012
Сообщений: 4,012
24.01.2016, 09:41 7

Не по теме:

Цитата Сообщение от Витальич Посмотреть сообщение
адресок
Ню-ню. Сюда только разве что вертолетом. Три дня лопату в машине вожу - с утра разгрести на работу ехать и вечером, чтобы домой попасть. По пути всяких самоуверенных из кювета еще выдергивать. :)



Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от Витальич Посмотреть сообщение
УГО уголовным преследованием
Всё, хана. Теперь у меня вечная ассоциация будет.



Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от Витальич Посмотреть сообщение
людям добро...Черная полоса
Хорошими делааааааами
Прославиться нельзя.(с)

0
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 33
24.01.2016, 10:49  [ТС] 8
Ладно, всем спасибо. Как правильно, нам препод так и не сказал. (ни до, ни после)
0
1976 / 1275 / 130
Регистрация: 04.01.2010
Сообщений: 4,607
25.01.2016, 09:38 9
Цитата Сообщение от pyzhman Посмотреть сообщение
Три дня лопату в машине вожу - с утра разгрести на работу ехать и вечером
нью-йорк?

Цитата Сообщение от pyzhman Посмотреть сообщение
сначала заносится старший байт
В чем разница?
написано только, что
Writing UBRRL will trigger an immediate update of the baud rate prescaler.
То есть при записи UBBRL сразу меняется делитель. Видимо, при записи UBRRH это происходит либо не сразу, либо вообще не происходит...
0
1176 / 653 / 111
Регистрация: 15.05.2012
Сообщений: 4,012
25.01.2016, 10:58 10
Цитата Сообщение от Voland_ Посмотреть сообщение
при записи UBBRL
Выше речь шла про стек.
1
814 / 797 / 201
Регистрация: 21.09.2012
Сообщений: 2,656
05.02.2016, 18:17 11
Цитата Сообщение от pyzhman Посмотреть сообщение
В чем разница?
При записи старшего байта, не происходит прямой записи в регистр. Сначала он попадает в буфер и только после записи младшего, записываются эти два байта одновременно в регистр. Это так называемая Двойная буферизация
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
05.02.2016, 20:59 12
Dolphin, а доказать свои слова для стека, можно ссылку?
0
814 / 797 / 201
Регистрация: 21.09.2012
Сообщений: 2,656
05.02.2016, 22:07 13
К сожалению именно для стека не нашел, но вот например в даташите на офф сайте атмел, есть такое описание
Принять через uart байт и записать его в память

Если пишем в регистр, то сначала старший, который помещается во временный регистр и записывается полностью, когда заносим младший.
А читаем наоборот, сначала младший, при этом старший уходит во временный регистр.

Возможно ошибся на счет стека.. Но в том же даташит в примерах инициализация стека происходит именно в этом порядке
0
1176 / 653 / 111
Регистрация: 15.05.2012
Сообщений: 4,012
07.02.2016, 16:27 14
Цитата Сообщение от Dolphin Посмотреть сообщение
Возможно ошибся на счет стека
Опыт, как известно, критерий истины. Проверьте простой программкой. (Мне, сбст, оно не интересно, бо плавали/знаем.)
0
07.02.2016, 16:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.02.2016, 16:27
Помогаю со студенческими работами здесь

Записать в память 8 байт
Доброго времени суток! Какой инструкцией можно записать в ячейку памяти только 8 разрядное чило,...

Как записать байт по адресу 378h, то есть выдать его на Lpt порт.
Как записать байт по адресу 378h, то есть выдать его на Lpt порт. На Delphi я писал так: ...

Принять данные по UART, начиная с указанной позиции
Приветствую! Работаю в AtmelStudio 7 с мк Atmega8 Как можно организовать получение данных с...

MS Comm как принять 1 байт
Поставил заворот (прд.-прм.) посылаю 1-14 байт(символов) не принимает как только посылаю 15 байт...

Принять старший и младший байт
Не могу понять условие задачи - в массив необходимо положить сначала старший байт некого числа в...

Принять массив байт с \0 в середине
Глупый вопрос. Клиент передает несколько строк ASCII с \0 в конце в одном массиве байт. Первый байт...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru