Программа для ATMega8
- Dr. Alex
- Это не хвост, это антенна
- Сообщения: 1438
- Зарегистрирован: Вт окт 28, 2008 09:00:18
- Откуда: Украина, Харьков
- Контактная информация:
Re: Программа для ATMega8
Просто мне обидно, ну почему сразу не сказать, так, мол и так, помогите студенту и всё, а не колотить понты, посмотри туда, посмотри сюда......

Порой мне кажется, что я делаю какое-то дерьмо, но когда я вижу, что делают другие, то я чувствую себя гением...
- Реклама
Re: Программа для ATMega8
Что надо?Если разложить по полочкам наверное станет проще,попробуй такой принцип:
.def TMP; временный рон
.def CNT ; рон-счетчик
.def FLG ;рон флагов
.equ INT_OK =....;флаг INT
.equ OVF_OK=....:флаг OVF
tmp=0
cnt=0
flg=0
MAIN:
1.sbrs FLG,INT_OK ;пока "ИНТ"не пришел, нифига не делаем,просто зацикливаемся
2.rjmp "1"
3.rcall obrabotka_vhodnogo_znachenija ; из этого места вызываем подпрограмму обработки входа
4.cbr FLG,1<<INT_OK ;данные уже обработаны,поэтому скинем флаг
5.CNT++ ;очередное число принято,поэтому увеличим счетчик
6.CNT==5? ;приняли все 5 чисел?
7.brcc "1" ;пока не примем все 5чисел прыгаем в "1"
8.CNT=0
9.sbrs FLG,OVF_OK ;пока переполнения не произошло, просто зацикливаемся
10.rjmp "9"
11.rcall vivod_dannih_v_okruzhayshey_sredy ;здесь вызываем подпрограмму вывода данных
12.cbr FLG,1<<OVF_OK ;очередное число миру уже показали,поэтому сбросим флаг
13.CNT++
14.CNT==5?
15.brcc "9"
16.CNT=0
rjmp MAIN
;------------------
obrabotka_vhodnogo_znachenija:
;здесь как-то обрабатываем входное значение(читаем состояние порта и например прячем в ОЗУ)
ret
;--------------
vivod_dannih_v_okruzhayshey_sredy
;здесь каким-то образом выводим данные в окружающую среду
ret
;--------Обработчики Прерываний---------
INT:
sbr FLG,1<<INT_OK ;обработчик нифига не делает,кроме как сообщает о себе
reti
;------------
OVF:
sbr FLG,1<<OVF_OK ;обработчик нифига не делает,кроме как сообщает о себе
reti
;-------------------------------------------------
Вышеописанное безобразие сканирует порт по внешнему прерыванию,и заодно подсчитывает сколько
этих прерываний пришло.По окончании приема полного пакета(5 чисел),начинаем выводить данные
последовательно во внешний мир с частотой переполнения таймера. Работает как эхо,т.е.ввели пакет 1 раз,получили ответ 1 раз. Все конечно весьма условно...
.def TMP; временный рон
.def CNT ; рон-счетчик
.def FLG ;рон флагов
.equ INT_OK =....;флаг INT
.equ OVF_OK=....:флаг OVF
tmp=0
cnt=0
flg=0
MAIN:
1.sbrs FLG,INT_OK ;пока "ИНТ"не пришел, нифига не делаем,просто зацикливаемся
2.rjmp "1"
3.rcall obrabotka_vhodnogo_znachenija ; из этого места вызываем подпрограмму обработки входа
4.cbr FLG,1<<INT_OK ;данные уже обработаны,поэтому скинем флаг
5.CNT++ ;очередное число принято,поэтому увеличим счетчик
6.CNT==5? ;приняли все 5 чисел?
7.brcc "1" ;пока не примем все 5чисел прыгаем в "1"
8.CNT=0
9.sbrs FLG,OVF_OK ;пока переполнения не произошло, просто зацикливаемся
10.rjmp "9"
11.rcall vivod_dannih_v_okruzhayshey_sredy ;здесь вызываем подпрограмму вывода данных
12.cbr FLG,1<<OVF_OK ;очередное число миру уже показали,поэтому сбросим флаг
13.CNT++
14.CNT==5?
15.brcc "9"
16.CNT=0
rjmp MAIN
;------------------
obrabotka_vhodnogo_znachenija:
;здесь как-то обрабатываем входное значение(читаем состояние порта и например прячем в ОЗУ)
ret
;--------------
vivod_dannih_v_okruzhayshey_sredy
;здесь каким-то образом выводим данные в окружающую среду
ret
;--------Обработчики Прерываний---------
INT:
sbr FLG,1<<INT_OK ;обработчик нифига не делает,кроме как сообщает о себе
reti
;------------
OVF:
sbr FLG,1<<OVF_OK ;обработчик нифига не делает,кроме как сообщает о себе
reti
;-------------------------------------------------
Вышеописанное безобразие сканирует порт по внешнему прерыванию,и заодно подсчитывает сколько
этих прерываний пришло.По окончании приема полного пакета(5 чисел),начинаем выводить данные
последовательно во внешний мир с частотой переполнения таймера. Работает как эхо,т.е.ввели пакет 1 раз,получили ответ 1 раз. Все конечно весьма условно...
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
