Ассемблер (ASM) для AVR в вопросах и ответах
Если важен размер кода, то да, сдвиги можно зациклить. А если быстродействие, то без разницы...
- Реклама
Если не видно разницы, то зачем платить больше?Engineer_Keen писал(а):А если быстродействие, то без разницы...
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Открыл последний проект:А то смотрю народ совсем T-флагом не пользуется, забыли его
Found 18 matches for "bld".
Found 17 matches for "bst".
Found 5 matches for " set ".
Found 11 matches for "clt".
Но манипуляций с С наверняка больше
Ну ладно, не в этом суть 
Манипуляций с чем???Engineer_Keen писал(а):Но манипуляций с С наверняка больше
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Реклама
Флаг C - естественный, т.е. устанавливается практически после любой операции, чего не скажешь о Т. Однако про Т тоже забывать не стоит, для битовых операций он очень удобен.Found 16 matches for "brtc".
Found 1 match for "brts".
Found 21 matches for "brcc".
Found 6 matches for "brcs".
- Сообщения: 1
- Зарегистрирован: Ср апр 04, 2012 20:58:13
Помогите написать программку для атмеги 8535 на ассеьлере
Настроить порт А на вывод низкого уровня, после этого осуществить вывод высокого уровня на ножку А0 через 0,512 мс.
Перенёс сюда
ploop
Настроить порт А на вывод низкого уровня, после этого осуществить вывод высокого уровня на ножку А0 через 0,512 мс.
Перенёс сюда
ploop
Ну прям любой - ни в одной логической и далеко не во всех арифметических. А бит Т никогда не работает "автоматически", он всегда - инструмент в руках программиста.ploop писал(а): Флаг C - естественный, т.е. устанавливается практически после любой операции
Код: Выделить всё
.include "m8535def.inc"
.org 0
CLI ;запрет прерываний
WDR ;останов WATCHDOG'a.
LDI R16,0b00011000
OUT WDTCR,R16
LDI R16,0b00010000
OUT WDTCR,R16
CLR R16
OUT PORTA,R16 ;все лапки порта А = 0
SER R16
OUT DDRA,R16 ;портА на выход
LDI R16,0x80 ;задержка
m1: DEC R16 ;зависит от
BRNE m1 ;частоты тактирования
LDI R16,0x01
OUT PORTA,R16 ;установка А0 = 1
loop: RJMP loop
Docendo discimus
Поэтому пишите на СиGudd-Head писал(а):Если не видно разницы, то зачем платить больше?
Вопрос по AVR именно на Assemblere:
Есть программа "часы" она написана для AT89C2051, хочу написать сам для AT90S2313, в той книге написано:
*********Определение констант
bank0 equ 00000000B
bank1 equ 00001000B
*********Резервирование ячеек
BSEG
ORG 0
bufT: DBIT 1 ;буфер десятичной точки
Вопросы конкретики (2 штуки)
1)Вопрос: А что это за bank0, bank1-что то вроде регистров общего назначения?(temp, РОН, r16-r31)
2)Вопрос: Про "резервирование ячеек" вообще в голову ни что не приходит?
Вопрос абстракции
1) Алгоритм "часов" я понял так: все работает от вектора прерывания по переполнению 1-го единственного таймера, и динамическая индикация, и секундная точка и еденицы минут!!! (десятки минут и часы уже условием сравнения) ВОПРОС: а как это на одном таймере, он же должен сбрасываться после первого переполнения???
Есть программа "часы" она написана для AT89C2051, хочу написать сам для AT90S2313, в той книге написано:
*********Определение констант
bank0 equ 00000000B
bank1 equ 00001000B
*********Резервирование ячеек
BSEG
ORG 0
bufT: DBIT 1 ;буфер десятичной точки
Вопросы конкретики (2 штуки)
1)Вопрос: А что это за bank0, bank1-что то вроде регистров общего назначения?(temp, РОН, r16-r31)
2)Вопрос: Про "резервирование ячеек" вообще в голову ни что не приходит?
Вопрос абстракции
1) Алгоритм "часов" я понял так: все работает от вектора прерывания по переполнению 1-го единственного таймера, и динамическая индикация, и секундная точка и еденицы минут!!! (десятки минут и часы уже условием сравнения) ВОПРОС: а как это на одном таймере, он же должен сбрасываться после первого переполнения???
- Вложения
-
- p0020.gif
- вот фрагмент книги...
- (220.73 КБ) 423 скачивания
[color=#FF4000]Ищу где? и как? надо пользоваться личкой[/color]
bank0, bank1 - это просто константы.
"резервирование ячеек" - это наверно те же константы, только являются адресами ячеек памяти или регистров. В AT90S2313 адресация непрерывная, поэтому и ячейки памяти и регистры находятся в одном адресном пространстве, но доступ к регистрам(первые 32 ячейки памяти) наиболее быстрый.
В часах таймер используется только как источник точных интервалов времени. он просто отсчитывает интервалы, а с них уже формируются секунды, минуты и т.д.
"резервирование ячеек" - это наверно те же константы, только являются адресами ячеек памяти или регистров. В AT90S2313 адресация непрерывная, поэтому и ячейки памяти и регистры находятся в одном адресном пространстве, но доступ к регистрам(первые 32 ячейки памяти) наиболее быстрый.
В часах таймер используется только как источник точных интервалов времени. он просто отсчитывает интервалы, а с них уже формируются секунды, минуты и т.д.
1) В 51-м контроллере в качестве регистров R0-R7 можно использовать 4 набора ячеек ОЗУ - те самые банки. Именно их начальные адреса задаются константами bank0,bank1.
2) Это просто задание конкретных адресов для конкретных переменных. BSEG - это область ОЗУ, в которой можно обращаться побитно. В AVR так не получится, придется резервировать 1 байт и обращаться к его битам через маски.
3)Alexeyslav в принципе объяснил. Таймер настраивается на самый маленький необходимый интервал (например секунда), а в его прерывании уже считаются секунды. При счете 60 они сбрасываются, а минуты прибавляются и т.д.
2) Это просто задание конкретных адресов для конкретных переменных. BSEG - это область ОЗУ, в которой можно обращаться побитно. В AVR так не получится, придется резервировать 1 байт и обращаться к его битам через маски.
3)Alexeyslav в принципе объяснил. Таймер настраивается на самый маленький необходимый интервал (например секунда), а в его прерывании уже считаются секунды. При счете 60 они сбрасываются, а минуты прибавляются и т.д.
в 51 регистровый банк - выделенная область из 8 регистров, которая в данный момент доступна для производства вычислений (исполнения команд) с акумулятором или пересылок, логики , загрузок (основной набор команд)
у avr регистровый банк в таком понимании - весь набор регисров РОН/"регистровый файл" (но не память!)
однако в полное соответствие возможно сопоставить только R16-R32 (R0-R15 не допускают непосредственной загрузки константой и операций с непосредственными данными).
дополнительные сложности создаст также отсутствие команд сложения с константой и десятичной коррекции результата
для генерации опорного интервала предпочтительно применить 16-разрядный таймер в режиме генерации прерывания "по совпадению" (возможна корректировка ошибки хода) с тактированием от кварцованного генератора

да и еще один момент - совмещенный контроллер дисплея/клавиатуры (чтоб индикатор равномерно светился и кнопушки опрашивались без сбоев)
у 51 аппаратный приоритетный контроллер прерываний, а у avr программное разрешение вложенных перываний мудрить надобно или брать единый для всех процессов базовый квантователь, а секунду формировать из некоторого количества строк развертки дисплея
у avr регистровый банк в таком понимании - весь набор регисров РОН/"регистровый файл" (но не память!)
однако в полное соответствие возможно сопоставить только R16-R32 (R0-R15 не допускают непосредственной загрузки константой и операций с непосредственными данными).
дополнительные сложности создаст также отсутствие команд сложения с константой и десятичной коррекции результата
для генерации опорного интервала предпочтительно применить 16-разрядный таймер в режиме генерации прерывания "по совпадению" (возможна корректировка ошибки хода) с тактированием от кварцованного генератора
да и еще один момент - совмещенный контроллер дисплея/клавиатуры (чтоб индикатор равномерно светился и кнопушки опрашивались без сбоев)
у 51 аппаратный приоритетный контроллер прерываний, а у avr программное разрешение вложенных перываний мудрить надобно или брать единый для всех процессов базовый квантователь, а секунду формировать из некоторого количества строк развертки дисплея
почти у всех мег таймер Т1 может работать в асинхронном режиме с внешним кварцем на 32768Гц, и получать прерывание в 1 сек.
только интереснее не простое переполнение использовать, а прерывание по совпадению
а кто тактирует - 32768 или системный кварцевый - не суть важно (правда у системного на 20МГц точность естественно выше будет (при увеличении затрат потребляемой мощности по питанию) да и экономия в выводах...
а кто тактирует - 32768 или системный кварцевый - не суть важно (правда у системного на 20МГц точность естественно выше будет (при увеличении затрат потребляемой мощности по питанию) да и экономия в выводах...
- Сообщения: 882
- Зарегистрирован: Ср фев 22, 2012 01:25:21
Разве у 20мгц точность выше чем 32768 ?BOB51 писал(а):у системного на 20МГц точность естественно выше будет
Помоему это не так.....
Поясните пжлста, почему так считаете?
возьми разброс, допустим +/- 5% (хотя кварцы намного стабильнее), подели до частоты 1Гц и посмотри в каком случае точность выше
Поделил. Получилось ±5%и посмотри в каком случае точность выше
Что я делаю не так?



