да вот собственно:
sub procedure Data_temperature( dim i as byte )
Ow_Reset(PORTA, i) ' Onewire reset signal
Ow_Write(PORTA, i, 0xCC) ' Issue command SKIP_ROM
Ow_Write(PORTA, i, 0x44) ' Issue command CONVERT_T
' Delay_ms(100)
Ow_Reset(PORTA, i)
Ow_Write(PORTA, i, 0xCC) ' Issue command SKIP_ROM
Ow_Write(PORTA, i, 0xBE) ' Issue command READ_SCRATCHPAD
temp = Ow_Read(PORTA, i)
temp = (Ow_Read(PORTA, i) ‹‹
![Горд собой](images/smilies/icon_dovl.gif)
+ temp
end sub
sub procedure Data_analog( dim i as byte )
'влажность и получение кода нажатой клавиши
adc_rd = Adc_Read(i)
adc_rd = (adc_rd - 205)/6
end sub
sub procedure interrupt '
if INTCON.INT0IF = 1 then
'прерывание по "0"
PORTC.2 =1
TMR0L = 0xFA
TempTMR0 = 0 'обнуление ячейки кол-ва циклов счета
INTCON.INT0IF = 0
INTCON.TMR0IF = 0
T0CON.TMR0ON = 1 ' запуск таймера
PORTC.2 = 0
else
'прерывание по таймеру
if INTCON.TMR0IF = 1 then
TMR0L = 0xFA
INTCON.TMR0IF = 0
if (TempTMR0 › TMRLamp1) and (TempTMR0 › TMRLamp2) then
T0CON.TMR0ON = 0
PORTC.1 = 0 'выключение симисторов когда все каналы уже включены
PORTC.0 = 0 '
end if
if TempTMR0 = max then
T0CON.TMR0ON = 0 'выключение симисторов если кол-во циклов максимум (т.е. уже новое прерывание должно быть)
PORTC.1 = 0 '
PORTC.0 = 0 '
else
TempTMR0 = TempTMR0 + 1
end if
'вот здесь сравнение значения счетчика таймера и числа на котомо надо включить лампу
if TempTMR0 = TMRLamp1 then
PORTC.0 = 1 'включить лампу 1
end if
if TempTMR0 = TMRLamp2 then
PORTC.1 = 1 'включить лампу 2
end if
INTCON.TMR0IF = 0 '
end if
end if
end sub
в общем суть такая:
происходит прерывание по детектору "0" - включаем таймер и начинаем считать кол-во раз когда таймер обновляется у меня счетчик равен точно не помню наверно 60 т.е. 60 раз таймер обнулится прежде чем произойдет следующее прервание по детектору "0". (значение таймера каждый раз загружается при окончании счета таймера и возникновении прерывания по таймеру- поэтому периоды у нас одинаковые). Дальше в программе я указываю на каком значении счетчика по таймеру мне зажечь лампу (у меня их две и каждая регулируется отдельно) . как только значение счетчика счета прерывания таймера совпадает со значением заданным в программе, в прерывании PORTC.1= 1 т.е на симистор подается "1" и он открывается... в принципе нет необходимости уже дальше считать если все лампы горят... обнуляешь порты и ждешь следующего прерывания по детектору "0" , а в это время я считываю значения температуры с датчиков...