'ADC自动触发源设置
Set Sfior.7 '101 =Timer1 匹配B
Reset Sfior.6
Set Sfior.5
'******************************************************************
On Adcc Adcinterrupt
Dim Wadc As Word
'访问低字节和高字节:
Dim Wadcl As Byte At Wadc Overlay
Dim Wadch As Byte At Wadc + 1 Overlay
'您可以使用Overlay覆盖来轻松访问WORD的低字节和高字节
'(同样的方法也适用于LONG)
'这就是将其存储在SRAM中的方式
'+ ----------- + ---------- +
'| 低字节|高字节|
'+ ----------- + ---------- +
Dim Value As Single
Dim Adkorr1 As Single
Dim Adkorr2 As Single
Dim Adc_complete As Bit
Adkorr1 = 2500 / 2500 '没有补偿。应根据实物调试情况修改
Adkorr2 = 0 '这个是不是有点多余?
'......................................................
'Timer1比较->每秒中断”比较器B被使用,因为它必须用于ADC自动触发“但是:比较B,比较值必须在Compare1A中!
Dim Seconds As Long
Compare1a = 15625
'尽管发生了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准备就绪时,标志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补偿系数
Value = Value + Adkorr2 'Adkorr2 0v显示补偿值