Всем привет. Написал вот такое в 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 неправильно работаю