|
楼主 |
发表于 2011-7-21 23:29:51
|
显示全部楼层
源程序,我只会 BASIC...
'/////////////////////////////////////////////////////////
'/// FastAVR Basic Compiler for AVR by MICRODESIGN ///
'/// Name of Your project
'/////////////////////////////////////////////////////////
$Device= m8 ' used device
$Stack = 32 ' stack depth
$Clock = 8 ' adjust for used crystal
$Lcd=PORTB.0, RS=PORTB.5, EN=PORTB.4, 16, 2
$LeadChar="0", Format(2,6)
$ShiftIn Data=PORTC.4, Clock=PORTC.5, Msb
$Baud = 1200,n,8,1
$1Wire=PORTD.7
Dim i As Byte
Dim iBusystp As Byte
Dim iSMPL As Byte
Dim iSiG As Byte
Dim iExR As Byte
Dim iTrd As Byte
Dim iDa As Byte
Dim iDb As Byte
Dim iDc As Byte
Dim iDd As Byte
Dim iTa As Byte
Dim iTb As Byte
Dim iTc As Byte
Dim iTd As Byte
Dim iWRa As Byte
Dim iWRb As Byte
Dim iWRc As Byte
Dim iWRd As Byte
Dim bREGa(15) As Byte
Dim bREGb(15) As Byte
Dim bREGc(15) As Byte
Dim bREGd(15) As Byte
Dim iMax As Byte
Dim iMin As Byte
Dim lMax As Long
Dim lMin As Long
Dim lrec As Long
Dim fOut As Float
Dim fTrn As Float
DDRC.3 = 1
PORTC.3 = 0
InitLcd()
Cls
Lcd "Init Program...."
Wait 1
Cls
Locate 1,1 : Lcd "Result=10Smth8"
iSMPL = 0
Do ' place your code in next line
'等待 LTC2400 的 ADC 忙碌信号
'iBusystp = 0
Do
'iBusystp = iBusystp + 1
WaitMs 1
Loop While PINC.4 = 1
'Locate 1,1 : Lcd iBusystp
' 读出 LTC2400 的所有字节
iDa = ShiftIn
iDb = ShiftIn
iDc = ShiftIn
iDd = ShiftIn
'Locate 1,1 : Lcd Hex(iDa); Hex(iDb); Hex(iDc); Hex(iDd)
'获得低 8 位转换结果
iDd = iDd And &b11110000
iDd = Swap(iDd)
iTrd = iDc And &b00001111
iTrd = Swap(iTrd)
iTd = iDd + iTrd
'获得中 8 位转换结果
iTrd = iDc And &b11110000
iTc = Swap(iTrd)
iTrd = iDb And &b00001111
iTrd = Swap(iTrd)
iTc = iTrd + iTc
'获得高 8 位转换结果
iTrd = iDb And &b11110000
iTb = Swap(iTrd)
iTrd = iDa And &b00001111
iTrd = Swap(iTrd)
iTb = iTrd + iTb
'Locate 1,1 : Lcd Hex(iTb); Hex(iTc); Hex(iTd);
iTrd = iDa And &b00110000
iTa = Swap(iTrd)
'先入先出寄存器
For i = 1 To 9
bREGd(i) = bREGd(i + 1)
bREGc(i) = bREGc(i + 1)
bREGb(i) = bREGb(i + 1)
bREGa(i) = bREGa(i + 1)
Next i
bREGd(10) = iTd
bREGc(10) = iTc
bREGb(10) = iTb
bREGa(10) = iTa
iWRa = bREGa(9)
iWRb = bREGb(9)
iWRc = bREGc(9)
iWRd = bREGd(9)
'Locate 1,5 : Lcd Hex(iWRa); Hex(iWRb); Hex(iWRc); Hex(iWRd)
'识别正负符号
iSiG = iWRa And &b00000010
If iSiG = 2 Then
iTrd = iWRa And &b00000001
lrec = 16777216 * iTrd + 65536 * iWRb + 256 * iWRc + iWRd
Else
lrec = 65536 * iWRb + 256 * iWRc + iWRd - 16777216
End If
'Locate 1,1 : Lcd Str(lrec)
'寻找最大最小值
lMax = lrec
lMin = lrec
iMax = 1
iMin = 1
fOut = 0
For i = 1 To 10
iWRa = bREGa(i)
iWRb = bREGb(i)
iWRc = bREGc(i)
iWRd = bREGd(i)
'识别正负符号
iSiG = iWRa And &b00000010
If iSiG = 2 Then
iTrd = iWRa And &b00000001
lrec = 16777216 * iTrd + 65536 * iWRb + 256 * iWRc + iWRd
fTrn = 5 * (16777216 * iTrd + 65536 * iWRb + 256 * iWRc + iWRd) / 16777216
Else
lrec = 65536 * iWRb + 256 * iWRc + iWRd - 16777216
fTrn = 5 * (65536 * iWRb + 256 * iWRc + iWRd - 16777216) / 16777216
End If
'找出最大值
If lrec > lMax Then
lMax = lrec
iMax = i
End If
'找出最小值
If lrec < lMin Then
lMin = lrec
iMin = i
End If
fOut = fOut + fTrn
Next i
'Locate 1,1 : Lcd iMax
'Locate 2,1: Lcd Hex(bREGb(iMax)); Hex(bREGc(iMax)); Hex(bREGd(iMax))
'Locate 1,15 : Lcd iMin
'Locate 2,11: Lcd Hex(bREGb(iMin)); Hex(bREGc(iMin)); Hex(bREGd(iMin))
'剔除最大值
iWRa = bREGa(iMax)
iWRb = bREGb(iMax)
iWRc = bREGc(iMax)
iWRd = bREGd(iMax)
iSiG = iWRa And &b00000010
If iSiG = 2 Then
iTrd = iWRa And &b00000001
fTrn = 5 * (16777216 * iTrd + 65536 * iWRb + 256 * iWRc + iWRd) / 16777216
Else
fTrn = 5 * (65536 * iWRb + 256 * iWRc + iWRd - 16777216) / 16777216
End If
fOut = fOut - fTrn
'剔除最小值
iWRa = bREGa(iMin)
iWRb = bREGb(iMin)
iWRc = bREGc(iMin)
iWRd = bREGd(iMin)
iSiG = iWRa And &b00000010
If iSiG = 2 Then
iTrd = iWRa And &b00000001
fTrn = 5 * (16777216 * iTrd + 65536 * iWRb + 256 * iWRc + iWRd) / 16777216
Else
fTrn = 5 * (65536 * iWRb + 256 * iWRc + iWRd - 16777216) / 16777216
End If
fOut = fOut - fTrn
fOut = fOut / 8
Locate 2,1: Lcd fOut; " VDC"
Select Case iSMPL / 4
Case 0
Locate 2,16: Lcd "S"
Case 1
Locate 2,16: Lcd "M"
Case 2
Locate 2,16: Lcd "P"
Case 3
Locate 2,16: Lcd "L"
End Select
iSMPL = iSMPL + 1
If iSMPL > 15 Then iSMPL = 0
'WaitMs 200
Loop
End |
|