Форум РадиоКот https://radiokot.ru/forum/ |
|
ATmega8L-8PU, программа-счетчик почему-то не работает. https://radiokot.ru/forum/viewtopic.php?f=20&t=73768 |
Страница 1 из 1 |
Автор: | Vova777 [ Пн июн 11, 2012 14:20:43 ] |
Заголовок сообщения: | ATmega8L-8PU, программа-счетчик почему-то не работает. |
При нажатии на кнопку PB0, программа должна изменять число, отображаемое на ЖК-индикаторе. Но обрабатывается только первое нажатие, число меняется с 0 на 1 и все, на дальнейшие нажатия она не реагирует. Почему? Код: ; ******************************
; Автор: ххх * ; Дата: 11.06.2012 * ; Версия: 0.1 * ; Имя файла: Indicator * ; Для AVR: ATmega8L-8PU * ; Тактовая частота: 4 МГц * ; ****************************** ; Выполняемые функции: Управление семисегментным ЖК-индикатором, функция подавления дребезга контактов ; ============ .device ATmega8 .nolist .include "C:\Program Files\Atmel\AVR Studio 5.0\avrassembler\include\m8def.inc" .list ; ============ ; Блок объявлений .def temp = r16 .def counter = r17 .def delay1 = r16 ; так надо .def delay2 = r18 .def delay3 = r19 ; ============ ; Начало программы rjmp Init ; ============ ; Подпрограммы Debounce: ; инициализируем регистры счетчика числом 0x13880 (для четности добавляем 0: 0х013880) ldi delay1, 0x80 ; ldi delay2, 0x38 ; ldi delay3, 0x01 ; Loop: ; формируем задержку subi delay1, 1 ; subi delay2, 0 ; subi delay3, 0 ; brcc Loop ; ret ; ============ Init: ; Тело программы ; ========== ; Подблок инициализации стека ldi temp, low(ramend) ; out spl, temp ; ldi temp, high(ramend) ; out sph, temp ; ; ========== ser temp ; out DDRD, temp ; выходы ldi temp, 0b11111110 ; out DDRB, temp ; PB0 - вход, остальные не используются ldi r20, 0b01111110 ; код для цифры "0" out PortD, temp ; показать цифру "0" ldi temp, 0b00000001 ; out PortB, temp ; PB0 - подтяжка, остальные не используются ldi r21, 0b00110000 ; коды цифр индикатора ldi r22, 0b01101101 ; ldi r23, 0b01111001 ; ldi r24, 0b00110011 ; ldi r25, 0b01011011 ; ldi r26, 0b01011111 ; ldi r27, 0b01110000 ; ldi r28, 0b01111111 ; ldi r29, 0b01111011 ; clr counter ; ; ============ Start: sbic PinB, 0 ; rjmp Start ; если нет inc counter ; cpi counter, 10 ; brne PC + 2 ; если нет clr counter ; ldi ZL, 20 ; add ZL, counter ; ld temp, Z ; out PortD, temp ; rcall Debounce ; задержка ReleaseWait: sbis PinB, 0 ; rjmp ReleaseWait ; если нет rcall Debounce ; задержка rjmp Start ; ; ============ |
Автор: | Vova777 [ Пн июн 11, 2012 15:05:22 ] |
Заголовок сообщения: | Re: ATmega8L-8PU, программа-счетчик почему-то не работает. |
Мне кажется, она слишком долго зацикливается на этом участке: Код: Loop: ; формируем задержку subi delay1, 1 ; subi delay2, 0 ; subi delay3, 0 ; brcc Loop ; ret Программа из книжки, под кварц 4 МГц, что тут не так? |
Автор: | eufs [ Вт июн 12, 2012 01:24:18 ] |
Заголовок сообщения: | Re: ATmega8L-8PU, программа-счетчик почему-то не работает. |
У вас книжка неправильная. Код: Loop: ; формируем задержку subi delay1, 1 ; SBCI delay2, 0 ;вычитаем ноль и бит переноса! SBCI delay3, 0 ; brcc Loop ; ret Иначе из цикла не выйдет,потому как Код: subi delay3,0 бит переноса всегда сбрасывается
|
Автор: | Jack_A [ Вт июн 12, 2012 10:55:42 ] |
Заголовок сообщения: | Re: ATmega8L-8PU, программа-счетчик почему-то не работает. |
eufs писал(а): У вас книжка неправильная. Книжку, видимо, писал чукча-писатель, а не читатель ( даташитов ) . Вывод : книжка книжкой, но мозгу надо держать включенной. |
Автор: | ChipKiller [ Вт июн 12, 2012 11:44:43 ] |
Заголовок сообщения: | Re: ATmega8L-8PU, программа-счетчик почему-то не работает. |
Jack_A писал(а): Книжку, видимо, писал чукча-писатель... ... к сожалению таких очень много и "плюс помощь типографии" при наборе текста ![]() |
Автор: | Vova777 [ Вт июн 12, 2012 14:14:17 ] |
Заголовок сообщения: | Re: ATmega8L-8PU, программа-счетчик почему-то не работает. |
eufs писал(а): У вас книжка неправильная. Код: Loop: ; формируем задержку subi delay1, 1 ; SBCI delay2, 0 ;вычитаем ноль и бит переноса! SBCI delay3, 0 ; brcc Loop ; ret Иначе из цикла не выйдет,потому как Код: subi delay3,0 бит переноса всегда сбрасываетсяСпасибо большое, без вас я бы не смог разобраться. Я еще не умею правильно писать программы. На самом деле, в книжке ошибки не было. ![]() ![]() А книжка называется: Джон Мортон. Микроконтроллеры AVR. Вводный курс, можете убедиться сами, ошибки там не было. Извините... ![]() ChipKiller посмотрите, пожалуйста, там мой последний пост. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |