Статус:
Offline
Реєстрація: 02.06.2009
Повідом.: 316
Реєстрація: 02.06.2009
Повідом.: 316
программа микроконтроллера AtTiny2313
Подскажите что изменить в программе микроконтроллера AtTiny2313,
чтоб если кнопку нажать и отпустить отключались все ключи, а то получается что если нажать и отпустить кнопку, то один из ключей остается включенным:
взято отсюда
Код в Bascom-AVR:
Подскажите что изменить в программе микроконтроллера AtTiny2313,
чтоб если кнопку нажать и отпустить отключались все ключи, а то получается что если нажать и отпустить кнопку, то один из ключей остается включенным:
взято отсюда
Тільки зареєстровані користувачі бачать весь контент у цьому розділі
Код в Bascom-AVR:
Код:
$regfile = "2313def.dat"
$crystal = 4000000
Dim S As Byte 'эта переменная следит за номером шага двигателя
S = 1
On Int0 Knopka1 'даем имена обработчикам внешних прерываний
On Int1 Knopka2
Config Portb = Output 'конфигурируем порт на выход
Config Portd.5 = Output 'конфигурируем ногу для подключения светодиода
Led Alias Portd.5 'присваиваем имя LED выводу 5 порта D
'прерывания будут генерироваться пока на ноге низкий уровень, то есть пока кнопка будет нажата
Config Int0 = Low Level
Config Int1 = Low Level
'разрешаем прерывания
Enable Interrupts
Enable Int0
Enable Int1
'основной цикл программы, просто ждем прерывания
Do
Loop
Knopka1: 'обработчик прерывания первой кнопки
Led = 1 'зажигаем светодиод
Incr S 'увеличим номер шага
If S = 9 Then 'максимально возможный номер шага = 8
S = 1
End If
Select Case S 'выбираем какие обмотки включать в зависимости от номера шага
Case 1 : Portb = &B00000001
Case 2 : Portb = &B00000011
Case 3 : Portb = &B00000010
Case 4 : Portb = &B00000110
Case 5 : Portb = &B00000100
Case 6 : Portb = &B00001100
Case 7 : Portb = &B00001000
Case 8 : Portb = &B00001001
End Select
Waitus 1000 'задержка между шагами
Led = 0 'гасим светодиод
Return
Knopka2: 'обработчик прерывания второй кнопки
Led = 1 'зажигаем светодиод
Decr S 'тут все тоже самое, только в обратном направлении
If S = 0 Then 'минимально возможный номер шага = 1
S = 8
End If
Select Case S
Case 1 : Portb = &B00000001
Case 2 : Portb = &B00000011
Case 3 : Portb = &B00000010
Case 4 : Portb = &B00000110
Case 5 : Portb = &B00000100
Case 6 : Portb = &B00001100
Case 7 : Portb = &B00001000
Case 8 : Portb = &B00001001
End Select
Waitus 1000
Led = 0 'гасим светодиод
Return
End