Доброе время суток, Господа!
В Bascom'e я новичОк
А потому прошу советы профессионалов
Набросал вот такую схемку
Она представлет собой моддинг стоп-сигналов на 5 каналов
идея в следующем:
[эффект_1] поворот налево - бегущий огонь налево (пока на PIND.4 = 0)
[эффект_2] поворот направо - бегущий огонь направо (пока на PIND.5 = 0)
[эффект_3] авайрийник - мигают все 5 каналов (пока на PIND.4 = 0 and PIND.5 = 0)
[STOP] (тут прерывание PIND.2 (INT0)) - горят все лампы статично и (!)не важно, какая операция была до прерывания.
В случае, если аварийник и поворотники не горят - стоп-сигналы все-равно работают по прерыванию.
Внимание:
Реализован, [эффект_1] и [эффект_2]. Трабла в том, что подав 0 к соответ. портам, огонек без остановки бежит
Как сделать так, чтобы огонь бегал, пока на PIND.X = 0 ? (я вроде указал это в коде)
И еще, касательно PIND.2 (INT0) - прерывание сразу пролетает.
т.е. при активном [эффект_1], [эффект_2], [эффект_3] все 5 каналов вспыхнут и программа идет дальше
Как сделать так, чтобы прерывание было активно. пока PIND.2 = 0
Подскажите, укажите ошибку. Может че-то напортачил
Буду весьма благодарен
Выкладываю код
'------------------------------------------------------------------ 'моддинг стоп-сигналов '------------------------------------------------------------------ $regfile = "2313def.dat" 'specify the used micro $crystal = 4000000'used crystal frequency $baud = 19200'use baud rate $hwstack = 32'default use 32 for the hardware stack $swstack = 10'default use 10 for the SW stack $framesize = 40'default use 40 for the frame space Config Portb.0 = Output 'настройка пина b0 выход (LED1) Config Portb.1 = Output 'настройка пина b1 выход (LED2) Config Portb.2 = Output 'настройка пина b2 выход (LED3) Config Portb.3 = Output 'настройка пина b3 выход (LED4) Config Portb.4 = Output 'настройка пина b4 выход (LED5) Config Portd.4 = Input 'настройка пина D4 на вход (S1) Config Portd.5 = Input 'настройка пина D5 на вход (S2) Config Portd.2 = Input Config Int0 = Rising Config Debounce = 50 Enable Interrupts Enable Int0 On Int0 Stopbutton Dim Effect As Byte Dim Temp As Byte Temp = 250 Инициализация Portb = 0 '00000' '------------------------------------------------------------------------------- Do 'начало всех начал 'Опрос кнопок If Pind.4 = 0 Then Effect = 1 Else Portb = 0 If Pind.5 = 0 Then Effect = 2 Else Portb = 0 If Pind.4 = 0 And Pind.5 = 0 Then Effect = 3 Else Portb = 0 'RIGHT, если Effect = 1 If Effect = 1 Then Portb = 1 '10000' Waitms Temp Portb = 2 '01000' Waitms Temp Portb = 4 '00100' Waitms Temp Portb = 8 '00010' Waitms Temp Portb = 16 '00001' Waitms Temp End If 'LEFT, если Effect = 2 If Effect = 2 Then Portb = 16 '00001' Waitms Temp Portb = 8 '00010' Waitms Temp Portb = 4 '00100' Waitms Temp Portb = 2 '01000' Waitms Temp Portb = 1 '10000' Waitms Temp End If 'EMERGENCY, если Effect = 3 If Effect = 3 Then Portb = 31 '00000' Waitms Temp Portb = 0 '11111' Waitms Temp End If Loop Stopbutton: Portb = 31 '11111' Gifr = 64 Return End 'конец '-------------------------------------------------------------------------------
Отредактировано ma35tr0 (2011-05-26 13:08:46)