找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3193|回復(fù): 1
收起左側(cè)

bascom avr直接訪問寄存器的例子(adc設(shè)置)

[復(fù)制鏈接]
ID:342822 發(fā)表于 2021-2-15 13:33 | 顯示全部樓層 |閱讀模式
本帖最后由 taotie 于 2021-2-15 13:39 編輯

$crystal = 16000000
$regfile = "m32def.dat"

'$baud = 9600                      '串行接口

Dim S As String * 15 , Z As String * 15   '字符串轉(zhuǎn)換變量


'...............................................................................
'ssd1306液晶屏設(shè)置
Config Scl = Portc.0                                 ' 用I2C引腳Scl = Portc.0 ,Sda = Portc.4
Config Sda = Portc.1
Config Twi = 400000                                  ' i2c 的速度

I2cinit
$lib "i2c_twi.lbx"                                   ' 不使用模擬I2c的軟件,而是使用twi
$lib "glcdSSD1306-I2C.lib"                           ' 用glcdSSD1306-I2C庫替換默認(rèn)庫要添加在bascom avr庫中

'#if _build < 20784
'Dim ___lcdrow As Byte , ___lcdcol As Byte            ' 老版本變量格式進(jìn)行編譯
'#endif

Config Graphlcd = Custom , Cols = 128 , Rows = 64 , Lcdname = "SSD1306"   '配置圖形顯示器

'-------------------------------------------------------------------


'*****************************************************************
'ADC控制器設(shè)置       呵呵~~~直接針對(duì)控制寄存器操作
Admux = &B11000000                '內(nèi)部,2.56V,在AREF處有一個(gè)電容器,結(jié)果為10位,通道0.
Adcsra = &B11101111                ''ADC使能,開始轉(zhuǎn)換,自動(dòng)觸發(fā)使能
                                   ',ADIF = 0
                                   'AD int使能,111 =預(yù)分頻128

'ADC自動(dòng)觸發(fā)源設(shè)置
Set Sfior.7                        '101 =Timer1 匹配B
Reset Sfior.6
Set Sfior.5
'******************************************************************
On Adcc Adcinterrupt              

Dim Wadc As Word
'訪問低字節(jié)和高字節(jié):
Dim Wadcl As Byte At Wadc Overlay   
Dim Wadch As Byte At Wadc + 1 Overlay
'您可以使用Overlay覆蓋來輕松訪問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 / 2500    '沒有補(bǔ)償。應(yīng)根據(jù)實(shí)物調(diào)試情況修改
Adkorr2 = 0              '這個(gè)是不是有點(diǎn)多余?

'......................................................
'Timer1比較->每秒中斷”比較器B被使用,因?yàn)樗仨氂糜贏DC自動(dòng)觸發(fā)“但是:比較B,比較值必須在Compare1A中!
Dim Seconds As Long
Compare1a = 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ǔ)償值  

Return
'-------------------------------------------------------------------------------
Printvalues:
cls
Setfont csdy
Lcdat 1, 6 , chr(33);chr(34);chr(35);chr(36);chr(37)
's=Str(Value)
'z=Left(s , 8)       '截取采集值前8位數(shù)值
Setfont font12x16
Lcdat 4, 1 ,Value  
'Lcdat 4, 8 ,z;"V";"  "
'"間隔1秒記錄":
Lcdat 7, 6 ,"S :";" ";Seconds
Return
'--------------------------------------------------------------------------------

Timer1_isr:
'寄存器ADCSRA和SFIOR中的“增量秒” ADC由硬件自動(dòng)觸發(fā),由初始化設(shè)置
Incr Seconds
Return
'-------------------------------------------------------------------------------
Adcinterrupt:
'在ADC準(zhǔn)備就緒時(shí)執(zhí)行 更新Wadc并設(shè)置標(biāo)志Adc_complete
Wadcl = Adcl
Wadch = Adch
Adc_complete = 1
Return

$include "../font12x16.font"

$include "../369.font"

屏幕截圖(52).png




評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:830831 發(fā)表于 2021-3-7 19:39 | 顯示全部樓層
非常棒的事例

bascom-avr一直在用,如果bascom 出 ARM版就完美了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表