Хотелось бы видеть блок-схему, составлял ли ее автор топика? Именно с нее должна начинаться любая программа сложнее "помигать светодиодом"
Повторю вопрос: какое ТЗ?
Я думаю 90% так начинали (я тоже), пока им тут (или еще где) мозги не вправилиploop писал(а):Да ладно, сам когда начинал писал битами.
Код: Выделить всё
SEI
LDI R24,$0D
CALL $00C2
Cat писал(а):Я уж не "начинаю", давно пишу. Что поделать, я дитя CVAVR, сейчас уже себя переучить не могу, да и как-то так не испытываю напрягов.
Хотелось бы видеть блок-схему, составлял ли ее автор топика? Именно с нее должна начинаться любая программа сложнее "помигать светодиодом"
Повторю вопрос: какое ТЗ?
Engineer_Keen писал(а):Я думаю 90% так начинали (я тоже), пока им тут (или еще где) мозги не вправилиploop писал(а):Да ладно, сам когда начинал писал битами.![]()
Что касается проги, то во-первых при компиляции вылезает варнинг:
warning: 'TIMER0_COMPA_vect' appears to be a misspelled signal handler
Во-вторых, вот что получается в районе asm("sei"), т.е. прям перед while в майн:Т.е вместо вызова lcd_com(0x0D), прога переходит на вектор обработчика как раз TIMER0_COMPA_vect...Код: Выделить всё
SEI LDI R24,$0D CALL $00C2
А, нет, стоп, не ту кнопку для трассировки нажал... Функция cd_com(0x0D) выполняется, как раз во время нее случается TIMER0_COMPA_vect, а раз она "appears to be a misspelled", вместо нее стоит заглушка и переход на 0, т.е. ресет. Короче вектор надо правильно обозвать и все заработает.
нет, все хорошо пишетEngineer_Keen писал(а):А что у вас варниниги при компиляции не вылезали? Переименовываем TIMER0_COMPA_vect в TIMER0_COMP_vect и все должно работать.
вроде бы 16Cat писал(а):Почему TCNT1=0x00; ? Разве счетчик таймера 1 не 16-битный, и в данном случае регистр TCNT1 не разбит на TCNT1H TCNT1L, к которым доступ осуществляется путем двух действий?
исправилEngineer_Keen писал(а):А что у вас варниниги при компиляции не вылезали? Переименовываем TIMER0_COMPA_vect в TIMER0_COMP_vect и все должно работать.
Странно, ну все равно переименуйтеokmonster писал(а):нет, все хорошо пишет
Так какая разница, писать TCNT1=0x00 или TCNT1=0x0000, думаю компилятор сам в нужной последовательности загрузит нули в L и H или нет?Cat писал(а):Почему TCNT1=0x00; ? Разве счетчик таймера 1 не 16-битный, и в данном случае регистр TCNT1 не разбит на TCNT1H TCNT1L, к которым доступ осуществляется путем двух действий?
avr studio 5Cat писал(а):Тогда идем в хидеры вашего компилятора и смотрим как осуществлен доступ к данному регистру. Что за компилятор?
Ассемблерный код из даташита:Engineer_Keen писал(а): Так какая разница, писать TCNT1=0x00 или TCNT1=0x0000, думаю компилятор сам в нужной последовательности загрузит нули в L и H или нет?
Код: Выделить всё
;самая первая команда после JMP:
CLR R1
[...]
;в коде где стоит TCNT1=0x00:
OUT $2D,R1
OUT $2C,R1
Тонкая подколка зачтена!Engineer_Keen писал(а): Если помните наизусть таблицу регистров это как раз TCNT1H и TCNT1L, так что все ок...