avr單片機(jī)程序代碼:
rem Main.bas file generated by New Project wizard
rem
rem Created: 周日 7月 17 2022 taotie
rem Processor: ATmega32
rem Compiler: BASCOM-AVR
rem Write your code here
$crystal = 16000000
$regfile = "m32def.dat"
'$baud = 9600 '串行接口
Dim S As String * 15 , Z As String * 15 '字符串轉(zhuǎn)換變量
'ADC自動(dòng)觸發(fā)源設(shè)置
Set Sfior.7 '101 =Timer1 匹配B
Reset Sfior.6
Set Sfior.5
'******************************************************************
On Adcc Adcinterrupt
Dim Wadc As Word
'訪問(wèn)低字節(jié)和高字節(jié):
Dim Wadcl As Byte At Wadc Overlay
Dim Wadch As Byte At Wadc + 1 Overlay
'您可以使用Overlay覆蓋來(lái)輕松訪問(wèn)WORD的低字節(jié)和高字節(jié)
'(同樣的方法也適用于LONG)
'這就是將其存儲(chǔ)在SRAM中的方式
'+ ----------- + ---------- +
'| 低字節(jié)|高字節(jié)|
'+ ----------- + ---------- +
Dim Value As Single
Dim Adkorr1 As Single
Dim Adkorr2 As Single
Dim Adc_complete As Bit
Adkorr1 = 2500 / 2501 '沒(méi)有補(bǔ)償。應(yīng)根據(jù)實(shí)物調(diào)試情況修改
Adkorr2 = 0.0065 '這個(gè)是不是有點(diǎn)多余?
'......................................................
'Timer1比較->每秒中斷”比較器B被使用,因?yàn)樗仨氂糜贏DC自動(dòng)觸發(fā)“但是:比較B,比較值必須在Compare1A中!
Dim Seconds As Long
Compare1a = 10'15625
'盡管發(fā)生了COMPARE B事件,但仍使用COMPARE1A!
Config Timer1 = Timer , Prescale = 1024 , Clear Timer = 1 , Compare B = Disconnect
On Compare1b Timer1_isr
'Enable Compare1b
TIMSK.OCIE1B=1 '等同Enable Compare1b
'Enable Interrupts
Sreg.7 = 1 '等同Enable Interrupts
'..............................................................................
'ADC準(zhǔn)備就緒時(shí),標(biāo)志Adc_complete為1 ',然后獲取并打印值
Do
If Adc_complete = 1 Then
Adc_complete = 0
Gosub Getvalue
Gosub Printvalues
End If
Loop
'---------------------------------------------------------------
Getvalue: 'Wadc由ADC完整中斷更新,因此我們只需獲取該值
Value = Wadc * 2.56
Value = Value / 1023
Value = Value * Adkorr1 'Adkorr1 2.5v補(bǔ)償系數(shù)
Value = Value + Adkorr2 'Adkorr2 0v顯示補(bǔ)償值