ilyaplot
@ilyaplot
PHP программист

Не работает программа для attiny13a

Всем привет. Написал вот такое в basicom avr.
Должно выполняться следующее:
1. При запуске светодиод должен моргать Wtime/100 раз
2. Выполняться рабочий цикл
2.1 Включаем реле
2.2 Ждем 80 мс
2.3 Выключаем реле

3 При нажатии кнопки (int0)
3.1 Проверяем значение wtime, устанавливаем в 100, если больше 600
3.2 Прибавляем 100 к wtime
3.3 Моргаем Wtime/100 раз светодиодом
3.4 Возвращаемся к рабочему циклу

Wtime должен записываться в EEPROM

Укажите на мои ошибки, пожалуйста. Первый раз использую прерывания. Второй раз пишу прошивку
$regfile = "attiny13a.dat"
$crystal = 4000000
$hwstack = 32
$swstack = 8
$framesize = 16

Config Pinb.3 = Output                                                                    'RELAY
Config Pinb.2 = Output                                                                    'LED
Pinb.2 = 0
Pinb.3 = 0
' Кнопка, подключенная к GND на вывод INT0
On Int0 Button
Enable Interrupts
Enable Int0

Dim Wtime As Integer                                                                            ' Время задержки в миллисекундах. Может быть от 100 до 700
Dim A As Integer

$eeprom
$data
Readeeprom Wtime

' Тут я хочу показать режим с помощью вспышек светодиода
For A = 0 To Wtime Step 100
          Pinb.2 = 0
          Waitms 100
          Pinb.2 = 1
          Waitms 50
   Next A

' Проверяем значение wtime
If Wtime < 100 Or Wtime > 600 Then
   Wtime = 100
   Writeeeprom Wtime
End If

' Рабочий цикл. Щелкаем релешкой
Cycle:
   Pinb.3 = 1                                                                                      ' Реле включено 80 мс
   Waitms 80
   Pinb.3 = 0                                                                                      ' Реле выключено %wtime% мс
   Waitms Wtime
Goto Cycle
' Кнопкой увеличиваем wtime и отображаем режим
Button:
   Wtime = Wtime + 100
   If Wtime > 600 Then
          Wtime = 100
   End If
   Writeeeprom Wtime
   For A = 0 To Wtime Step 100
          Pinb.2 = 1
          Waitms 50
          Pinb.2 = 0
          Waitms 50
   Next A
Return


Как оно работает:
1. При запуске сразу начинается рабочий цикл. Wtime не вижу с помощью светодиода
2. При нажатии кнопки wtime меняется, но светодиод гаснет далеко не всегда, количество вспышек не всегда соответствует wtime
3. При перезапуске Wtime = 100
Думаю, с eeprom неправильно работаю
  • Вопрос задан
  • 2858 просмотров
Пригласить эксперта
Ответы на вопрос 1
svd71
@svd71
Советую установить AVRStudio и запустить код в отладчике. Трудновато будет только ассемблерный код парсить, но если в BasCom есть возможность создавать отладочный файл, то это намного упростит задачу. Также неплохим отладчиком обладает Proteus.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы