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.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы