|
|
81.gif (514.85 KB, 下載次數(shù): 0)
下載附件
2025-10-17 12:12 上傳
BASCOM-AVR代碼:
' ==========================================================
' MAX5481數(shù)字電位器測(cè)試
'2025年10月17日
' ==========================================================
$regfile = "m16def.dat" ' 指定ATmega16單片機(jī)型號(hào)定義文件
$crystal = 8000000 ' 設(shè)置晶振頻率為8MHz
$hwstack = 64 ' 設(shè)置硬件堆棧大小為64字節(jié)
$swstack = 64 ' 設(shè)置軟件堆棧大小為64字節(jié)
$framesize = 64 ' 設(shè)置幀大小為64字節(jié)
' ==========================================================
' 引腳定義
' ==========================================================
Cs Alias Portb.4 ' 定義片選引腳CS連接到PORTB.4
' ==========================================================
' SPI 配置
' ==========================================================
' 配置硬件SPI:無(wú)中斷、MSB先傳、主機(jī)模式、時(shí)鐘極性低、相位0、無(wú)從機(jī)選擇
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Noss = 1
Spiinit ' 初始化SPI接口
' ==========================================================
' 變量定義
' ==========================================================
Dim Command_byte As Byte ' SPI命令字節(jié)
Dim Data_high As Byte ' 數(shù)據(jù)高字節(jié)
Dim Data_low As Byte ' 數(shù)據(jù)低字節(jié)
Dim Test As Word ' 測(cè)試值變量
Dim Temp_word As Word ' 臨時(shí)數(shù)據(jù)變量
' ==========================================================
' 串口配置
' ==========================================================
'Config Serialin = Buffered , Size = 20 ' 注釋掉的串口輸入緩沖配置
'Enable Interrupts ' 注釋掉的中斷使能
$baud = 9600 ' 設(shè)置串口波特率為9600
Test = 1023 ' 初始化測(cè)試值為1023(10位最大值)
' ==========================================================
' 子程序聲明
' ==========================================================
Declare Sub Write_wiper(byval Value As Word) ' 聲明寫(xiě)入Wiper位置的子程序
' ==========================================================
' 主程序開(kāi)始
' ==========================================================
Waitms 10 ' 延時(shí)10ms,確保系統(tǒng)穩(wěn)定
' ==========================================================
' 主循環(huán) - 循環(huán)測(cè)試不同的Wiper位置
' ==========================================================
Do
' 測(cè)試不同的阻值位置
Call Write_wiper(Test) ' 寫(xiě)入最大阻值位置(1023)
Waitms 200 ' 延時(shí)200ms
Call Write_wiper(768) ' 寫(xiě)入75%位置(768)
Waitms 200
Call Write_wiper(512) ' 寫(xiě)入50%位置(512)
Waitms 200
Call Write_wiper(256) ' 寫(xiě)入25%位置(256)
Waitms 200
Call Write_wiper(0) ' 寫(xiě)入最小阻值位置(0)
Waitms 200
Loop
End ' 程序結(jié)束
' ==========================================================
' 寫(xiě)入Wiper位置子程序 (10位數(shù)字電位器)
' SPI傳輸格式:8位命令 + 16位數(shù)據(jù)(高10位有效,低6位無(wú)效)
' ==========================================================
Sub Write_wiper(byval Value As Word)
' 命令字節(jié): 0x00 = 寫(xiě)入Wiper寄存器并立即更新
Command_byte = &H00
' 數(shù)據(jù)格式轉(zhuǎn)換:將10位數(shù)據(jù)左移6位,放到16位數(shù)據(jù)的D15-D6位置
' 因?yàn)閿?shù)字電位器只使用高10位,低6位被忽略
Temp_word = Value * 64 ' 相當(dāng)于左移6位(乘以2^6=64)
Data_high = High(temp_word) ' 獲取16位數(shù)據(jù)的高字節(jié)
Data_low = Low(temp_word) ' 獲取16位數(shù)據(jù)的低字節(jié)
' SPI數(shù)據(jù)傳輸過(guò)程
Reset Cs ' 片選置低,開(kāi)始SPI傳輸
Spiout Command_byte , 1 ' 發(fā)送命令字節(jié)
Spiout Data_high , 1 ' 發(fā)送數(shù)據(jù)高字節(jié)
Spiout Data_low , 1 ' 發(fā)送數(shù)據(jù)低字節(jié)
Set Cs ' 片選置高,結(jié)束SPI傳輸
' 調(diào)試輸出 - 通過(guò)串口顯示傳輸?shù)臄?shù)據(jù)
Print "輸出原始值: " ; Value ' 輸出原始值
Print "輸出命令字節(jié): " ; bin(command_byte) ' 以二進(jìn)制格式輸出命令字節(jié)
Print "輸出數(shù)據(jù)高字節(jié): " ; bin(data_high) ' 以二進(jìn)制格式輸出數(shù)據(jù)高字節(jié)
Print "輸出數(shù)據(jù)低字節(jié): " ; bin(data_low) ' 以二進(jìn)制格式輸出數(shù)據(jù)低字節(jié)
Print "---" ' 輸出分隔線
End Sub
|
評(píng)分
-
查看全部評(píng)分
|