'you need to disable the timer int before using the 1wire functions, and enable it afterwards. 'i2c can be used with interrupts. But 1wire uses timed loops for the delays and the interrupt will slown them down. 'Mark ' Primer branja 3-h termometrov na istem busu. ''$regfile = "m16def.dat" '$regfile = "attiny2313.dat" $regfile = "m8515.dat" $crystal = 11059200 Config 1wire = Portb.7 Config Lcd = 16 * 2 'Config Lcdpin = Pin , Db7 = Portc.7 , Db6 = Portc.6 , Db5 = Portc.5 , Db4 = Portc.4 , E = Portc.2 , Rs = Portc.1 'Config Lcdpin = Pin , Db7 = PortB.7 , Db6 = PortB.6 , Db5 = PortB.5 , Db4 = PortB.4 , E = PortB.3 , Rs = PortB.2 'Config Lcdpin = Pin , Db7 = Portb.7 , Db6 = Portb.6 , Db5 = Portb.5 , Db4 = Portb.4 , E = Portb.2 , Rs = Portb.1 Config Lcdpin = Pin , Db7 = Portd.7 , Db6 = Portd.6 , Db5 = Portd.5 , Db4 = Portd.4 , E = Portd.2 , Rs = Portd.1 Const Timer1reload = 10800 Config Timer1 = Timer , Prescale = 1024 Load Timer1 , Timer1reload On Ovf1 Timer1_isr Enable Timer1 Start Timer1 Enable Interrupts 'Add your code here Cls Lcd "DS1820-6.bas" Dim X(9) As Byte Dim T As Integer At X Overlay Dim T1 As Integer T = 0 Cursor Off Noblink Dim Sekundabit As Bit Dim I As Byte Do If Sekundabit = 1 Then Cls Reset Sekundabit ' Pripravimo Ident. 1. Termometra: For I = 1 To 8 X(i) = Lookup(i , Term1) Next Disable Interrupts 1wreset 'reset 1wwrite &H55 'match ROM - izberi senzor DS1820 1wwrite X(1) , 8 '1Wire ukaz 1wwrite &HBE 'READ Scratchpad T = 1wread(9) 1wreset Enable Interrupts T1 = T / 2 Cls : Lcd "T1= " ; T1 ; "C " ' Pripravimo Ident. 2. Termometra: For I = 1 To 8 X(i) = Lookup(i , Term2) Next Disable Interrupts 1wreset 'reset 1wwrite &H55 'match ROM - izberi senzor DS1820 1wwrite X(1) , 8 '1Wire ukaz 1wwrite &HBE 'READ Scratchpad T = 1wread(9) 1wreset Enable Interrupts T1 = T / 2 Lowerline Lcd "T2= " ; T1 ; "C " ' Pripravimo Ident. 3. Termometra: For I = 1 To 8 X(i) = Lookup(i , Term3) Next Disable Interrupts 1wreset 'reset 1wwrite &H55 'match ROM - izberi senzor DS1820 1wwrite X(1) , 8 '1Wire ukaz 1wwrite &HBE 'READ Scratchpad T = 1wread(9) 1wreset Enable Interrupts T1 = T / 2 Locate 2 , 10 Lcd "T3= " ; T1 ; "C " Disable Interrupts 1wreset 1wwrite &HCC 'skip ROM 1wwrite &H44 'convert temperature Enable Interrupts End If ' Tukaj lahko vgradimo vso ostalo logiko programa, ne da bi bila ovirana ' z wait ukazi... Loop End Timer1_isr: Load Timer1 , Timer1reload Set Sekundabit Return ' Pripravimo Ident. Termometra malo drugače: For I = 1 To 8 X(i) = Lookup(i , Term1) Next ' Sledeče definicije naj stojijo izza end ukaza Term1: Data &H10 , &H4B , &H33 , &HB4 , &H01 , &H08 , &H08 , &H00 , &HFE ' 0 1 2 3 4 5 6 7 8 Term2: Data &H34 , &H10 , &H85 , &H28 , &H8C , &H00 , &H08 , &H00 , &H81 Term3: Data &H54 , &H10 , &H53 , &H96 , &H4B , &H01 , &H08 , &H00 , &H0E