Помогите новичку с внешними прирываниями ATMEGA48
Помогите новичку с внешними прирываниями ATMEGA48
Собственно сталкнулся с такой проблеммой как внешние прирывания в MEGA48.
Вот простая программа которая нехочет работать в PROTEUS:
При нажатия кнопки ,увеличивается TEMP,и выводится на выход PORTC
а также поясните для чего pcicr , pcmsk0, pcifr -а даташите нечего непонял(
И еще хотел спросить INTO и PCINT0 отдельно?
тоесть для PCINTO ненадо заполнять eicra EIMSK EIfr
тоесть для INTO ненадо заполнять pcicr pcmsk0 pcifr
Файлы прикрепленны
;
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m48def.inc"
.list
.nolist
.list
;
.def temp =r16;
.org 0x000
rjmp unit;
.org 0x0001
rjmp EXT_INT0;настраиваем прерывание into
.org 0x0003
rjmp PCINT0; настраиваем прерывание PCINTo
unit :
clr temp;
out DDRB,temp;
clr temp;
out DDRD,temp;
ser temp;
out DDRc,temp;
ldi r16,high(RAMEND) ; устанавливаем область стека
out SPH,r16 ;
ldi r16,low(RAMEND) ;
out SPL,r16 ;
clr temp;
ldi temp,0b00000010 ;INT0 ISC11=1,SC10=0
sts eicra,temp ;по спадающему фронту
ldi temp,0b00000001 ;разрешаем прерывание INT0
sts EIMSK,temp;
ldi temp,0b00000000 ;по низкому уровню ставим 0
sts EIfr,temp;
ldi temp,0b00000001 ;устанавливаем контроль
sts pcicr,temp; ; прирывания на PCINT0-7
ldi temp,0b00000001
sts pcmsk0,temp;
ldi temp,0b00000000 ; Флаг устанавливается автоматически
sts pcifr,temp; ; при возникновения событии на PCINT0
; сбрасывается в 0 при прирывании
; после снова устанавливается в 1
;разрешаем прерывание
sei
start:
out portc,temp;
rjmp start;
;прерывание
!!!!! PCINTo: !!!!!!!!!!!!!! - в АВР выдает ошибку
EXT_INT0:
inc temp;
reti
Вот простая программа которая нехочет работать в PROTEUS:
При нажатия кнопки ,увеличивается TEMP,и выводится на выход PORTC
а также поясните для чего pcicr , pcmsk0, pcifr -а даташите нечего непонял(
И еще хотел спросить INTO и PCINT0 отдельно?
тоесть для PCINTO ненадо заполнять eicra EIMSK EIfr
тоесть для INTO ненадо заполнять pcicr pcmsk0 pcifr
Файлы прикрепленны
;
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m48def.inc"
.list
.nolist
.list
;
.def temp =r16;
.org 0x000
rjmp unit;
.org 0x0001
rjmp EXT_INT0;настраиваем прерывание into
.org 0x0003
rjmp PCINT0; настраиваем прерывание PCINTo
unit :
clr temp;
out DDRB,temp;
clr temp;
out DDRD,temp;
ser temp;
out DDRc,temp;
ldi r16,high(RAMEND) ; устанавливаем область стека
out SPH,r16 ;
ldi r16,low(RAMEND) ;
out SPL,r16 ;
clr temp;
ldi temp,0b00000010 ;INT0 ISC11=1,SC10=0
sts eicra,temp ;по спадающему фронту
ldi temp,0b00000001 ;разрешаем прерывание INT0
sts EIMSK,temp;
ldi temp,0b00000000 ;по низкому уровню ставим 0
sts EIfr,temp;
ldi temp,0b00000001 ;устанавливаем контроль
sts pcicr,temp; ; прирывания на PCINT0-7
ldi temp,0b00000001
sts pcmsk0,temp;
ldi temp,0b00000000 ; Флаг устанавливается автоматически
sts pcifr,temp; ; при возникновения событии на PCINT0
; сбрасывается в 0 при прирывании
; после снова устанавливается в 1
;разрешаем прерывание
sei
start:
out portc,temp;
rjmp start;
;прерывание
!!!!! PCINTo: !!!!!!!!!!!!!! - в АВР выдает ошибку
EXT_INT0:
inc temp;
reti
- Вложения
-
- perivanie.rar
- (7.11 КБ) 224 скачивания
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: Помогите новичку с внешними прирываниями ATMEGA48
- проблема в том, что плохо читал datasheet.сталкнулся с такой проблеммой как внешние прирывания в MEGA48
В PROTEUS не работаю, так что пардон....
1 INT0 и PCINT0 различные прерывания.
2 Много лишних(бесполезных) команд и директив ассемблера
3 Если пишешь 3 JMPa на обработку прерывания, то и обработчиков должно быть столько-же.
4 Если работаешь с кнопками неплохо-бы обрабатывать и "дребезг контактов" ...
советую почитать книжку Евстифеева про Мегу, там все доходчиво описано. Успехов...
- simpleX
- Первый раз сказал Мяу!
- Сообщения: 39
- Зарегистрирован: Сб май 30, 2009 00:51:42
- Откуда: Россия, г. Курск
- Контактная информация:
Re: Помогите новичку с внешними прирываниями ATMEGA48
Пожалуйста, поподробнее: какую именно ошибку выдаёт?
"Никогда не опускайся чего б тебе ни стоило, как бы ни было плохо.
А если отступил и сдал немного, то, считай, душа продалась и сдохла!
Честь и кровь - сохрани свою совесть, свобода и любовь - вот она русская гордость"
А если отступил и сдал немного, то, считай, душа продалась и сдохла!
Честь и кровь - сохрани свою совесть, свобода и любовь - вот она русская гордость"
Re: Помогите новичку с внешними прирываниями ATMEGA48
здравствуйте и снова я)на счет ошибки ладно разобрался - просто я думал что надо писать именно PCINTo: - а оказывается это обычный безусловный переход.
Спасибо за книжку!!!! - много узнал) - относительно)
даже почти получилось настроить PCINT - проблемма:
при подачи sin сигнал на ножку(PROTEUS!!!!!) он как и должен прерывается по изменению сигнала, а вот при подключение через кнопку, она срабатывает 1 раз,и все стоит на месте(- это очень надо)
и неполучается настроить int0 - вроде просто но неполучается - несрабатывает,код программы:
.org 0x000
rjmp unit;
.org 0x0001
rjmp sydi;настраиваем прерывание into
unit :
clr temp;
out DDRB,temp;
out DDRD,temp;
ser temp;
out DDRc,temp;
ldi r16,high(RAMEND) ; устанавливаем область стека
out SPH,r16 ;
ldi r16,low(RAMEND) ;
out SPL,r16 ;
ldi temp,0b00000010 ;INT0 ISC11=1,SC10=0
sts eicra,temp ;по спадающему фронту
ldi temp,0b00000001 ;разрешаем прерывание INT0
sts EIMSK,temp;
ldi temp,0b00000001 ;
sts EIfr,temp;
sei
start:
out portc,temp;
rjmp start;
;прерывание
sydi:
inc temp;
reti
Спасибо за книжку!!!! - много узнал) - относительно)
даже почти получилось настроить PCINT - проблемма:
при подачи sin сигнал на ножку(PROTEUS!!!!!) он как и должен прерывается по изменению сигнала, а вот при подключение через кнопку, она срабатывает 1 раз,и все стоит на месте(- это очень надо)
и неполучается настроить int0 - вроде просто но неполучается - несрабатывает,код программы:
.org 0x000
rjmp unit;
.org 0x0001
rjmp sydi;настраиваем прерывание into
unit :
clr temp;
out DDRB,temp;
out DDRD,temp;
ser temp;
out DDRc,temp;
ldi r16,high(RAMEND) ; устанавливаем область стека
out SPH,r16 ;
ldi r16,low(RAMEND) ;
out SPL,r16 ;
ldi temp,0b00000010 ;INT0 ISC11=1,SC10=0
sts eicra,temp ;по спадающему фронту
ldi temp,0b00000001 ;разрешаем прерывание INT0
sts EIMSK,temp;
ldi temp,0b00000001 ;
sts EIfr,temp;
sei
start:
out portc,temp;
rjmp start;
;прерывание
sydi:
inc temp;
reti
- simpleX
- Первый раз сказал Мяу!
- Сообщения: 39
- Зарегистрирован: Сб май 30, 2009 00:51:42
- Откуда: Россия, г. Курск
- Контактная информация:
Re: Помогите новичку с внешними прирываниями ATMEGA48
Во-первых, надо в начале своей программы подключать заголовочный файл
с адресами регистров и прочими объявлениями для конкретного камня -
в данном случае это m48def.inc
Во-вторых, у вас ошибка в коде, при записи в регистр EIMSK.
с адресами регистров и прочими объявлениями для конкретного камня -
в данном случае это m48def.inc
Во-вторых, у вас ошибка в коде, при записи в регистр EIMSK.
- Вложения
-
- int0.zip
- (87.27 КБ) 196 скачиваний
"Никогда не опускайся чего б тебе ни стоило, как бы ни было плохо.
А если отступил и сдал немного, то, считай, душа продалась и сдохла!
Честь и кровь - сохрани свою совесть, свобода и любовь - вот она русская гордость"
А если отступил и сдал немного, то, считай, душа продалась и сдохла!
Честь и кровь - сохрани свою совесть, свобода и любовь - вот она русская гордость"
Re: Помогите новичку с внешними прирываниями ATMEGA48
simpleX писал(а):Во-первых, надо в начале своей программы подключать заголовочный файл
с адресами регистров и прочими объявлениями для конкретного камня -
в данном случае это m48def.inc
Во-вторых, у вас ошибка в коде, при записи в регистр EIMSK.
simpleX большое спасибо.Ошибка была всего лишь вместо sts надо было написать out для EMISK(это написанно в даташите?). У меня есть вопросы возможно глупые но тем неменее должен задать):- зачем сопротивление?,что там за стрелка(около сопротивления)? И ГЛАВНЫЙ вопрос: кнопки присоединяются между земля-ножка,или можно питание-ножка?
поидее мы изменяем напряжение(уровень) на ножке - питанием?
- simpleX
- Первый раз сказал Мяу!
- Сообщения: 39
- Зарегистрирован: Сб май 30, 2009 00:51:42
- Откуда: Россия, г. Курск
- Контактная информация:
Re: Помогите новичку с внешними прирываниями ATMEGA48
спящий писал(а):Ошибка была всего лишь вместо sts надо было написать out для EMISK(это написанно в даташите?). У меня есть вопросы возможно глупые но тем неменее должен задать):- зачем сопротивление?,что там за стрелка(около сопротивления)? И ГЛАВНЫЙ вопрос: кнопки присоединяются между земля-ножка,или можно питание-ножка?
поидее мы изменяем напряжение(уровень) на ножке - питанием?
Написано, но не так прямо, как вы только что вывели =)
Даташит, пункт 5 "About code examples", второй абзац.
Резистор подтягивает ногу МК к питанию, устанавливает высокий уровень на выводе МК. Стрелка - ето символ для обозначения + питания.
Можно питание-ножка, главное надо так исхитриться в схеме, чтобы при нажатии кнопки КЗ не было и уровень на выводе МК поменялся. Поетому я нарисовал самый простой (на мой взгляд) вариант.
"Никогда не опускайся чего б тебе ни стоило, как бы ни было плохо.
А если отступил и сдал немного, то, считай, душа продалась и сдохла!
Честь и кровь - сохрани свою совесть, свобода и любовь - вот она русская гордость"
А если отступил и сдал немного, то, считай, душа продалась и сдохла!
Честь и кровь - сохрани свою совесть, свобода и любовь - вот она русская гордость"
Re: Помогите новичку с внешними прирываниями ATMEGA48
и снова здравствуйте. Совсем запутался с настройками watchdog - вроде и просто - но неполучаестья. . . Программа простая, специально сократил,урбал из нее ненужное)
Суть программы : прерывание по "Собаке" ,увеличиваем содержимое в регистре и на "выход"(порт)
Чуть незабыл вопрос:
Зачем сбрасывать WDT
sbr temp,(1<<wdce) + (1<<wde); сбрасываем таймер
sts wdtcsr,temp;
cbr temp,(1<<wde);
sts wdtcsr,temp;
если можно
WDR????
Программа:
;
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m48def.inc"
.list
.nolist
.list
;
.def temp =r16;
.def delay =r17;
.def delay1 =r18;
.def delay2 =r19;
.def delay3=r20;
RJMP RESERT;
.org 0x006
rjmp WDT; прерывание по собаке
RESERT :
ser temp;
out DDRB,temp;
out DDRD,temp;
ldi temp,low(ramend);
out spl,temp;
ldi temp,high(ramend);
out sph,temp;
ldi temp,0b11000001;
;1- wdif флаг прерывания
;0- wdie разрешаем прерывание
;1-wde,0- wdce включаем тайм-аут(короче не сброс ,а прерывание)
sts wdtcsr,temp;
sei;
wdr;
start:
out portB,r17;
out portd,r18;
rjmp start;
WDT:
inc r17;
dec r18;
sbr temp,(1<<wdce) + (1<<wde); сбрасываем таймер
sts wdtcsr,temp;
cbr temp,(1<<wde);
sts wdtcsr,temp;
reti
выдает ошибку: watchdog setup sequence is timed out. Do nothing
Суть программы : прерывание по "Собаке" ,увеличиваем содержимое в регистре и на "выход"(порт)
Чуть незабыл вопрос:
Зачем сбрасывать WDT
sbr temp,(1<<wdce) + (1<<wde); сбрасываем таймер
sts wdtcsr,temp;
cbr temp,(1<<wde);
sts wdtcsr,temp;
если можно
WDR????
Программа:
;
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m48def.inc"
.list
.nolist
.list
;
.def temp =r16;
.def delay =r17;
.def delay1 =r18;
.def delay2 =r19;
.def delay3=r20;
RJMP RESERT;
.org 0x006
rjmp WDT; прерывание по собаке
RESERT :
ser temp;
out DDRB,temp;
out DDRD,temp;
ldi temp,low(ramend);
out spl,temp;
ldi temp,high(ramend);
out sph,temp;
ldi temp,0b11000001;
;1- wdif флаг прерывания
;0- wdie разрешаем прерывание
;1-wde,0- wdce включаем тайм-аут(короче не сброс ,а прерывание)
sts wdtcsr,temp;
sei;
wdr;
start:
out portB,r17;
out portd,r18;
rjmp start;
WDT:
inc r17;
dec r18;
sbr temp,(1<<wdce) + (1<<wde); сбрасываем таймер
sts wdtcsr,temp;
cbr temp,(1<<wde);
sts wdtcsr,temp;
reti
выдает ошибку: watchdog setup sequence is timed out. Do nothing
- simpleX
- Первый раз сказал Мяу!
- Сообщения: 39
- Зарегистрирован: Сб май 30, 2009 00:51:42
- Откуда: Россия, г. Курск
- Контактная информация:
Re: Помогите новичку с внешними прирываниями ATMEGA48
Сбрасывать WDT нужно для того, чтобы (если вы уж решили использовать WDT) МК работал непрерывно. В этом и суть WDT: не сбросите в своей программе таймер, сбросится МК.
Похоже, вы совсем не читали даташит...
Не нужно здесь устанавливать флаг WDIF. Он сам установится, когда произойдёт прерывание.
Таймер сбрасывается специальной инструкцией WDR и не в прерывании, когда переполнение таймера УЖЕ произошло, а заранее! Это у вас режим interrupt, а если бы был interrupt+reset, то ето был бы первое и последнее прерывание от WDT...
Похоже, вы совсем не читали даташит...
ldi temp,0b11000001;
Не нужно здесь устанавливать флаг WDIF. Он сам установится, когда произойдёт прерывание.
sbr temp,(1<<wdce) + (1<<wde); сбрасываем таймер
Таймер сбрасывается специальной инструкцией WDR и не в прерывании, когда переполнение таймера УЖЕ произошло, а заранее! Это у вас режим interrupt, а если бы был interrupt+reset, то ето был бы первое и последнее прерывание от WDT...
; Включение WDT в режиме interrupt
ldi temp,0x58
sts wdtcsr,temp
ldi temp, 0x41
sts wdtcsr,temp
"Никогда не опускайся чего б тебе ни стоило, как бы ни было плохо.
А если отступил и сдал немного, то, считай, душа продалась и сдохла!
Честь и кровь - сохрани свою совесть, свобода и любовь - вот она русская гордость"
А если отступил и сдал немного, то, считай, душа продалась и сдохла!
Честь и кровь - сохрани свою совесть, свобода и любовь - вот она русская гордость"
Re: Помогите новичку с внешними прирываниями ATMEGA48
несовсем понял -а точнее совсем непонял) Я пытаюсь настраивать по книжки Евстифеева MEGA
Там написано (страница 393):
если WDE установлен в 1 - включен стороживой таймер,в 0- выключен выключен стороживой таймер
тут же снизу таблица:
wde - 0,wdie - 1 режим работы по прерыванию,
Думаю вы иммели ввиду так?
ldi temp,0b01011001;насройка перевода в interrupt
sts wdtcsr,temp;
ldi temp,0b01000001; перевод в interrupt
sts wdtcsr,temp;
sei;
start:
out portB,r17;
out portd,r18;
rjmp start;
WDT:
inc r17;
subi r18,10;
reti
программа делает 1 прерывание и все (
может думаю WDT надо сбросить или он автоматически сбрасывается?
Там написано (страница 393):
если WDE установлен в 1 - включен стороживой таймер,в 0- выключен выключен стороживой таймер
тут же снизу таблица:
wde - 0,wdie - 1 режим работы по прерыванию,
Думаю вы иммели ввиду так?
ldi temp,0b01011001;насройка перевода в interrupt
sts wdtcsr,temp;
ldi temp,0b01000001; перевод в interrupt
sts wdtcsr,temp;
sei;
start:
out portB,r17;
out portd,r18;
rjmp start;
WDT:
inc r17;
subi r18,10;
reti
программа делает 1 прерывание и все (
может думаю WDT надо сбросить или он автоматически сбрасывается?
Re: Помогите новичку с внешними прирываниями ATMEGA48
и еще раз здравствуйте, коряво - очень ,но вроде получилось
:
ldi temp,0b01011000;насройка перевода в interrupt
sts wdtcsr,temp;
ldi temp,0b01100111; перевод в interrupt
sts wdtcsr,temp;
sei;
start:
out portd,r17;
out portb,r18;
rjmp start;
WDT:
inc r17;
subi r18,10;
wdr; может какнибудь подругому его сбросить?
reti
В цикле(основной программе) сбрасывать нельзя! -он у меня колеблица от 0.02с до 3с - неровно получится.
едиственное непонял: по даташиту прерывания должны быть через 8 сек, у меня 256033 циклов,это 2 сек,если частота 125кГЦ?
ldi temp,0b01011000;насройка перевода в interrupt
sts wdtcsr,temp;
ldi temp,0b01100111; перевод в interrupt
sts wdtcsr,temp;
sei;
start:
out portd,r17;
out portb,r18;
rjmp start;
WDT:
inc r17;
subi r18,10;
wdr; может какнибудь подругому его сбросить?
reti
В цикле(основной программе) сбрасывать нельзя! -он у меня колеблица от 0.02с до 3с - неровно получится.
едиственное непонял: по даташиту прерывания должны быть через 8 сек, у меня 256033 циклов,это 2 сек,если частота 125кГЦ?
- simpleX
- Первый раз сказал Мяу!
- Сообщения: 39
- Зарегистрирован: Сб май 30, 2009 00:51:42
- Откуда: Россия, г. Курск
- Контактная информация:
Re: Помогите новичку с внешними прирываниями ATMEGA48
может проще его совсем не использовать? %)
"Никогда не опускайся чего б тебе ни стоило, как бы ни было плохо.
А если отступил и сдал немного, то, считай, душа продалась и сдохла!
Честь и кровь - сохрани свою совесть, свобода и любовь - вот она русская гордость"
А если отступил и сдал немного, то, считай, душа продалась и сдохла!
Честь и кровь - сохрани свою совесть, свобода и любовь - вот она русская гордость"
Re: Помогите новичку с внешними прирываниями ATMEGA48
С удовольствием бы неиспользовал - но незнаю альтернативу,если бы я сделал прерывание из цикла rcall то будет вилять по времени сильно(
- simpleX
- Первый раз сказал Мяу!
- Сообщения: 39
- Зарегистрирован: Сб май 30, 2009 00:51:42
- Откуда: Россия, г. Курск
- Контактная информация:
Re: Помогите новичку с внешними прирываниями ATMEGA48
А вообще для чего вы хотите использовать WDT?
"Никогда не опускайся чего б тебе ни стоило, как бы ни было плохо.
А если отступил и сдал немного, то, считай, душа продалась и сдохла!
Честь и кровь - сохрани свою совесть, свобода и любовь - вот она русская гордость"
А если отступил и сдал немного, то, считай, душа продалась и сдохла!
Честь и кровь - сохрани свою совесть, свобода и любовь - вот она русская гордость"
Re: Помогите новичку с внешними прирываниями ATMEGA48
для дипломного проекта: Регулирование скорость двигателя частотным преобразованием от регулятора 10 -0 В,программа примерно выглядит так:
старт:
таблица синусов ; тут изменяется время -процесс непрерывный и время меняется от 0.02 до 1 с
rjmp старт
WDT: -прерывание собаки ,равномерно независящее от время...
изменяем время в зависимости от входа с регулятора
reti
чтото типо этого,перед входом в AVR будет стоять деоитель напряжения до 5 В. А нельза сделать прерывание от счетчмка T0? - хотя неполучиться, при T1(16 разрядный) будет спрашивать при частоте кварца 10Мг будет опрашивать каждые 0.0065с - тоесть почти все время( - а там и шумы и все прочее...
старт:
таблица синусов ; тут изменяется время -процесс непрерывный и время меняется от 0.02 до 1 с
rjmp старт
WDT: -прерывание собаки ,равномерно независящее от время...
изменяем время в зависимости от входа с регулятора
reti
чтото типо этого,перед входом в AVR будет стоять деоитель напряжения до 5 В. А нельза сделать прерывание от счетчмка T0? - хотя неполучиться, при T1(16 разрядный) будет спрашивать при частоте кварца 10Мг будет опрашивать каждые 0.0065с - тоесть почти все время( - а там и шумы и все прочее...
Последний раз редактировалось спящий Вс янв 30, 2011 15:14:25, всего редактировалось 1 раз.
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Помогите новичку с внешними прирываниями ATMEGA48
ник у вас говорящий)))) почему вы выбрали именно собаку для отсчета временных интервалов? полно других счетчиков с возможностью вызова прерываний.
Ставим плюсы: )
Re: Помогите новичку с внешними прирываниями ATMEGA48
сильно часто прерывания будут или нет? T1 - 16 разрядный 2*16 =65536 при частоте 10МГц будет прерывания каждые 0.006 сек,так же ведь?
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Помогите новичку с внешними прирываниями ATMEGA48
у каждого таймера есть предделитель - это раз, т.е. входную частоту можете получить практически много меньше чем тактовая контроллера.
во вторых вам никто не запрещает в хоть 16битный счетчик при первом пуске (и при каждом прерывании) записать 65530 - тогда прерывания будут вызываться каждые 6 тактов таймера при достижении значения 65536 (ноль по-другому
)
во вторых вам никто не запрещает в хоть 16битный счетчик при первом пуске (и при каждом прерывании) записать 65530 - тогда прерывания будут вызываться каждые 6 тактов таймера при достижении значения 65536 (ноль по-другому
Ставим плюсы: )
Re: Помогите новичку с внешними прирываниями ATMEGA48
Спасибо.что-то я про преддилитель совсем забыл(
сделал тоже самое по T0,вроде просто, вообще неработает
;
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m48def.inc"
.list
.nolist
.list
;
.def temp =r16;
.def delay =r17;
.def delay1 =r18;
.def delay2 =r19;
.def delay3=r20;
RJMP RESERT;
.org 0x010
rjmp TIMO_OFF; прерывание по переполнению TCN T0
RESERT :
ser temp;
out DDRB,temp;
out DDRD,temp;
ldi temp,low(ramend);
out spl,temp;
ldi temp,high(ramend);
out sph,temp;
ldi temp,0b00000001; настройка прерывание по переполнению T0
sts timsk0,temp;
ldi temp,0b00000000; настраиваем WGM0-2 по 0 - режим NORMAL
sts tccr0a,temp;
ldi temp,0b00000101; частота/1024
sts tccr0b,temp;
sei;
start:
out portd,r17;
out portb,r18;
rjmp start;
TIMO_OFF:
inc r17;
subi r18,10;
reti
сделал тоже самое по T0,вроде просто, вообще неработает
;
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m48def.inc"
.list
.nolist
.list
;
.def temp =r16;
.def delay =r17;
.def delay1 =r18;
.def delay2 =r19;
.def delay3=r20;
RJMP RESERT;
.org 0x010
rjmp TIMO_OFF; прерывание по переполнению TCN T0
RESERT :
ser temp;
out DDRB,temp;
out DDRD,temp;
ldi temp,low(ramend);
out spl,temp;
ldi temp,high(ramend);
out sph,temp;
ldi temp,0b00000001; настройка прерывание по переполнению T0
sts timsk0,temp;
ldi temp,0b00000000; настраиваем WGM0-2 по 0 - режим NORMAL
sts tccr0a,temp;
ldi temp,0b00000101; частота/1024
sts tccr0b,temp;
sei;
start:
out portd,r17;
out portb,r18;
rjmp start;
TIMO_OFF:
inc r17;
subi r18,10;
reti
- simpleX
- Первый раз сказал Мяу!
- Сообщения: 39
- Зарегистрирован: Сб май 30, 2009 00:51:42
- Откуда: Россия, г. Курск
- Контактная информация:
Re: Помогите новичку с внешними прирываниями ATMEGA48
И опять неправильно используете инструкцию sts...
Неужели так трудно проверить код самому?
sts tccr0b,temp;
Неужели так трудно проверить код самому?
"Никогда не опускайся чего б тебе ни стоило, как бы ни было плохо.
А если отступил и сдал немного, то, считай, душа продалась и сдохла!
Честь и кровь - сохрани свою совесть, свобода и любовь - вот она русская гордость"
А если отступил и сдал немного, то, считай, душа продалась и сдохла!
Честь и кровь - сохрани свою совесть, свобода и любовь - вот она русская гордость"