Написал код для диммера на 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 имеет самый высокий приоритет.Означает ли это, что при входе в обработчик этого прерывания все остальные уже запрещаются?