0 / 0 / 0
Регистрация: 09.06.2024
Сообщений: 2
1

Секундомер с обратным отсчётом на ATmega32

09.06.2024, 13:45. Показов 373. Ответов 4

Author24 — интернет-сервис помощи студентам
Не могу понять как реализовать задачу: Исходное значение цифр на семисегментном индикаторе «9». Нажатием кнопки на входе РА0 запускается таймер с обратным счетом: через 1 секунду индицируется цифра «8» и т.д. до «0». При достижении «0» включается светодиод на выходе РВ0. Я наверстал что-то по интернет гайдам, но по итогу ни к чему не пришёл(
Работал в AVRке, если честно сложнее всего реализовать задержку в 1 секунду..

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
.include "m32def.inc"
 
; Определение констант для таймера
.def counter = r16
.def temp = r17
.equ F_CPU = 16000000 ; Частота процессора 16 МГц
.equ DELAY = F_CPU/1024 ; Делитель для 1 секунды
 
.org 0x00
    rjmp init
 
.org $000E
    rjmp timer_interrupt
 
init:
    ; Инициализация стека
    ldi temp, low(RAMEND)
    out SPL, temp
    ldi temp, high(RAMEND)
    out SPH, temp
 
    ; Инициализация портов
    ldi temp, 0x00
    out DDRA, temp ; Порты A на ввод
 
   SBI   PORTA,0      ;включить подтяжку кнопки
 
    ldi temp, 0xFF
    out DDRC, temp ; Порты C на выводPINA 0 25
    ldi temp, 0xFF
    out DDRB, temp ; Порты B на вывод
 
; Начальное значение счетчика
    ldi counter, 9
    out PORTC, counter
 
start_timer:
    ; Настройка таймера для задержки в 1 секунду
   LDI   R22,HIGH(DELAY)
   OUT   OCR1AH,R22
   LDI   R22,LOW(DELAY)
   OUT   OCR1AL,R22
 
   LDI   R22,1<<OCIE1A
   OUT   TIMSK,R22
 
   LDI   R22,1<<WGM13|1<<WGM12   ;CTC
   OUT   TCCR1B,R22
 
;   SBR   R22,1<<CS10    ;F_CPU/1
   SBR   R22,1<<CS12|1<<CS10    ;F_CPU/1024
    ; Разрешить прерывания
    sei
main_loop:
    ; Проверка нажатия кнопки
    sbic PINA, 0
    rjmp main_loop
 
   CBI   PORTB,0      ;выключить светик
 
   OUT   TCCR1B,R22
   SBIS   PORTB,0
   RJMP   PC-1
 
    sbis PINA, 0
    rjmp    PC-1
 
   RJMP   INIT
;*************************************************
timer_interrupt:
; Уменьшение счетчика и обновление индикатора
    dec counter
    out PORTC, counter
   BRNE   OUT_TIME
; Включение светодиода
   sbi PORTB, 0
OUT_TIME:
    reti
.exit
Миниатюры
Секундомер с обратным отсчётом на ATmega32  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.06.2024, 13:45
Ответы с готовыми решениями:

Таймер с обратным отсчетом
Здравствуйте. Подскажите, пожалуйста, как реализовать обратный счет в коде: #define F_CPU...

Индикатор с обратным отсчетом на ATmega88PA
Здравствуйте. Имеется программа на Си в Atmel Studio 6, программатор и платка с микроконтроллером...

Секундомер с обратным отсчётом
Здравствуйте. Надо создать секундомер с обратным отсчётом на 3 минуты, чтобы было видно оставшиеся...

Реализовать секундомер с обратным отсчётом
Подскажите код секундомера, который будет отчитывать время назад, размер 2 года:

4
Модератор
Эксперт по электронике
8924 / 6691 / 920
Регистрация: 14.02.2011
Сообщений: 23,577
09.06.2024, 18:13 2
Цитата Сообщение от veent Посмотреть сообщение
если честно сложнее всего реализовать задержку в 1 секунду
создаешь таймер порывание допустим 0.01сек. вводишь переменную которую увеличиваешь на 1, при достижении 100 и будет одна секунда
0
0 / 0 / 0
Регистрация: 09.06.2024
Сообщений: 2
09.06.2024, 18:58  [ТС] 3
А как мне правильно настроить таймер? Когда я пытался реализовать это таким способом у меня цифры менялись с невероятной скоростью. У меня есть теория что я просто неправильно настроил прерывания, но вот как настроить эти самые прерывания я не знаю. Может есть вариант без использования прерываний или даже таймера?
0
1178 / 654 / 112
Регистрация: 15.05.2012
Сообщений: 4,032
10.06.2024, 13:19 4
Можно программный таймер организовать.
0
3890 / 2490 / 419
Регистрация: 09.09.2017
Сообщений: 10,948
10.06.2024, 14:15 5
Цитата Сообщение от veent Посмотреть сообщение
SBR R22,1<<CS12|1<<CS10 ;F_CPU/1024
Вы out сделать забылиА, вы его в другом месте делаете. С таким подходом нужно быть поосторожнее...

Добавлено через 33 минуты
Цитата Сообщение от veent Посмотреть сообщение
LDI R22,1<<WGM13|1<<WGM12 ;CTC
Неправильный режим. У вас 1100 - сравнение идет с ICR1, а надо 0100 - с OCR1A
Assembler
1
LDI R22,1<<WGM12 ;CTC
0
10.06.2024, 14:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.06.2024, 14:15
Помогаю со студенческими работами здесь

Таймер с обратным отсчетом
Здравствуйте! Нужен таймер с обратным отсчетом, чтобы он обновлялся, при переходе на другую...

Таймер с обратным отсчетом
Нужно сделать таймер с интервалом 15 минут и, что бы обратный отсчет выводился в label

Счётчик с обратным отсчётом
Всем привет Нашёл скриптик счётчика который мне очень нужен))), а разобраться в нём немогу. Он...

Таймер с обратным отсчетом
Всем привет. Нужен таймер с обратным отсчетом. К примеру есть кнопка, при нажатии на нее...

Таймер с обратным отсчетом
Доброго времени суток. Пишу бота для discord'a и сейчас нужно реализовать голосование с помощью...

Таймер с обратным отсчетом
Здравствуйте, такой вопрос. Я хочу сделать таймер с обратным отсчетом, написал код. namespace...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru