Набросал программку термометра на DS1820 с динамической индикацией на 7-ми сегментных LED-индикаторах. Температура отображается, однако есть небольшой баг. При отображении температуры периодически в хаотичном порядке подсвечиваются разные сегменты. Есть подозрение, что библиотека BASCOM'а 1-wire при своей работе запрещает прерывания, поэтому возникают хаотичные подсветки. Или я не прав или подскажите как это вылечить? Вот код программки:
$regfile = "m8adef.dat"
$crystal = 8000000
Config Portd = Input
Config Portb = Output
Config Portc.0 = Output ' LED
Config Portc.1 = Input ' 1-Wire
Config Portc.2 = Input ' Button1
Config Portc.3 = Input ' Button2
Config Portc.4 = Output ' LED Segment1
Config Portc.5 = Output ' LED Segment2
Portd = &HFF
Portb = &H00
Portc = &B11001111
Config Timer0 = Timer , Prescale = 256 , Clear Timer = 0
Config 1wire = Portc.1
Dim Sign As Bit
Dim Seg As Bit
Dim Seg1 As Byte
Dim Seg2 As Byte
Dim C As Word
Dim Lowbyte As Byte
Dim Highbyte As Byte
Dim S0 As Byte
Dim S1 As Byte
Dim S2 As Byte
Led Alias Portc.0
Digit Alias Portb
Segment1 Alias Portc.4
Segment2 Alias Portc.5
Declare Sub Int_timer()
On Timer0 Int_timer
Enable Timer0
Enable Interrupts
Do
1wreset 'reset the device
1wwrite &HCC 'Skip ROM
1wwrite &HBE 'Read Scratchpad
Lowbyte = 1wread()
Highbyte = 1wread()
1wreset 'reset the device
1wwrite &HCC 'Skip ROM
1wwrite &H44 'Convert T
C = Makeint(lowbyte , Highbyte)
Shift C , Right , 1
Set Led
If Highbyte > 0 Then
Toggle Led
C = Not C
Incr C
End If
S0 = Low(c)
S2 = S0 \ 10
S1 = S0 Mod 10
Seg1 = Lookup(s1 , Digits)
Seg2 = Lookup(s2 , Digits)
Waitms 750
Loop
Int_timer:
If Seg = 0 Then
Segment2 = 0
Digit = Seg1
Segment1 = 1
Seg = 1
Else
Segment1 = 0
Digit = Seg2
Segment2 = 1
Seg = 0
End If
Return
'******** Data **********************************
Digits:
Data &B01011111 ' Öèôåðêà 0
Data &B01000001 ' Öèôåðêà 1
Data &B01110110 ' Öèôåðêà 2
Data &B01110011 ' Öèôåðêà 3
Data &B01101001 ' Öèôåðêà 4
Data &B00111011 ' Öèôåðêà 5
Data &B00111111 ' Öèôåðêà 6
Data &B01010001 ' Öèôåðêà 7
Data &B01111111 ' Öèôåðêà 8
Data &B01111011 ' Öèôåðêà 9
Data &B01111101 ' Áóêîâêà A
Data &B00101111 ' Áóêîâêà b
Data &B00011110 ' Áóêîâêà C
Data &B01100111 ' Áóêîâêà d
Data &B00111110 ' Áóêîâêà E
Data &B00111100 ' Áóêîâêà F
'************************************************Отредактировано 3o3o (2014-08-04 15:54:58)

