Написал код для диммера на Bascom $regfile = "2313DEF.dat" $crystal = 4000000 Config Portb = Output
Config Portd.0 = Output ' Out for triac Config Portd.1 = Output ' Out for triac
Config Portd.2 = Input ' Input INT0
Config Portd.6 = Input ' Input manage lamp Config Portb.0 = Input ' Input manage lamp
Config Lcd = 16 * 2 'control LCD Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , E = Portb.5 , Rs = Portb.6
Config Int0 = Falling
Config Timer0 = Timer , Prescale = 256 On Timer0 Timer0_isr
On Int0 Ind Enable Int0 Enable Timer0 Enable Interrupts
Dim Count As Byte Dim P7 As Bit , P0 As Bit Count = 75 Cls
Start Timer0 ' ' '156 - min , 2- max light
Do
Loop
Ind:
P7 = Pinb.0 P0 = Pind.6
If P7 = 0 And P0 = 0 Then Count = 156 End If
If P7 = 0 And P0 = 1 Then ' reduction of brightness
If Count < 156 Then Incr Count End If
End If
If P7 = 1 And P0 = 0 Then 'increase to brightness If Count > 2 Then Decr Count End If End If
Cls Lcd "In timer0" ; Count
Load Timer0,Count Start Timer0
Return
Timer0_isr: Stop Timer0
Set Portd.1 Set Portd.0 Waitms 20 Reset Portd.0 Reset Portd.1
Return
End
На общую шину и вывод пина 2 порта D через резистор заведены 6В. При переходе через ноль срабатывает прерывание по спаду - это видно на индикаторе (прилепил для контроля на макетке) Но не срабатывает таймер - на осциллографе не видны импульсы, хотя инкремент и декремент счетчика есть - это видно на том же индикаторе. Если в обработчике прерывания таймера поставить Load Timer0,Count Start Timer0 а в прерывании INT0 убрать запуск таймера, то возникает такая ситуация: Пока прерывание INT0 есть - нет прерывания по таймеру.Как только его убираешь - появляются импульсы, т.е начинает срабатывать прерывание по таймеру.Причем длительность импульсов пропорциональна Count. (Для справки Bascom инструкцией Load загружает требуемое значение в регистр таймера.Т.е. если написать Load Timer0,156 то в таймере окажется 100 (256-156) )
У меня вопрос.По таблице векторов INT0 имеет самый высокий приоритет.Означает ли это, что при входе в обработчик этого прерывания все остальные уже запрещаются?
|