;內容:旋轉變阻器改變ad轉換的數通過4為led顯示出來
;數碼管段碼接法a-pd0,b-pd1....g-pd6,h-pd7
;數碼管位碼接法om0-pc0...com4-pc3
;;ad輸入腳-pa0
include ht66f50.inc
org 0000h
jmp a1
org 0014h ;多功能中斷入口位址
jmp zd1
org 1ch ;adc中斷入口位址
jmp isr_adc
org 0030h
q1:dc 03fh ; 0
dc 006h ; 1
dc 05bh ; 2
dc 04fh ; 3
dc 066h ; 4
dc 06dh ; 5
dc 07dh ; 6
dc 007h ; 7
dc 07fh ; 8
dc 06fh ; 9
dc 077h ; a
dc 07ch ; b
dc 039h ; c
dc 05eh ; d
dc 079h ; e
dc 071h ; f
a1:clr [98h] ;ad資料高8位儲存器
clr [99h] ;ad資料低8位儲存器
mov a,0 ;顯示內容
mov [8ah],a ;第一位數碼管段碼顯示內容暫存器
mov a,0 ;顯示內容
mov [8bh],a ;第二位數碼管段碼顯示內容暫存器
mov a,0 ;顯示內容
mov [8ch],a ;第三位數碼管段碼顯示內容暫存器
mov a,0 ;顯示內容
mov [8dh],a ;第四位數碼管顯示內容暫存器
mov a,08h ;跟cp1c暫存器設定要求選擇資料
mov cp1c,a ;設定pc口為i/0口而不是中斷口
clr pbc ;設定pc 口為輸出口
clr pdc ;設定pd 口為輸出口
mov a,1 ;設定初始顯示位碼顯示第一位
mov [80h],a ;位碼暫存器
mov a,8ah ;設定對應第一位段碼暫存器
mov mp0,a ;間接暫存器指標
mov a,00000000b ;設定tm2 計數時鐘位為fsys/4
mov tm2c0,a
mov a,11000001b ;設定tm2中斷為定時/計數模式選擇比較器a匹配
mov tm2c1,a
mov a,low 5000 ;設定中斷時間為5000個時鐘週期
mov tm2al,a ;低8位
mov a,high 5000 ;設定中斷時間為5000個時鐘週期
mov tm2ah,a ;高8位
mov a,00010000b ;開啟ad電源 並adrfs=1
mov adcr0,a ;adrh為bit 3~bit 0,adrl為bit 7~bit 0
mov a,00000110b ;ad轉換時鐘為fsys/64,
mov adcr1,a ;vrefs=0選擇內部參考電壓
mov a,00000001b ;選擇ad通道為an0
mov acerl,a
clr start ; 啟動ad轉換 0→1→0 啟動
set start ;
clr start ;
clr adf ;清標誌
set ade ;開ad中斷
clr mf0f ;清多功能中斷0標誌
clr t2af ;清定時器2較器a中斷標誌
set mf0e ;使能多功能0中斷
set t2ae ;使能定時器2較器a中斷
set emi ;使能總中斷
set t2on ;開始計數
a2:call cl1 ;呼叫2位16進製制數轉換為5位10進製數子程式
mov a,[9dh] ;顯示內容
mov [8ah],a ;第一位數碼管段碼顯示內容暫存器
mov a,[9ch] ;顯示內容
mov [8bh],a ;第二位數碼管段碼顯示內容暫存器
mov a,[9bh] ;顯示內容
mov [8ch],a ;第三位數碼管段碼顯示內容暫存器
mov a,[9ah] ;顯示內容
mov [8dh],a ;第四位數碼管顯示內容暫存器
jmp a2
;2位16進製制數轉換為5為10進製數子程式(0ffh=65535)
cl1:
mov a,[98h]
mov [9ah],a
mov a,[99h]
mov [9bh],a
call cl2
mov a,00001111b
and a,[9eh]
mov [9ah],a
swap [9eh]
mov a,00001111b
and a,[9eh]
mov [9bh],a
mov a,[9ch]
mov [9eh],a
mov a,00001111b
and a,[9dh]
mov [9ch],a
swap [9dh]
mov a,00001111b
andm a,[9dh]
retcl2:
clr [9ch]
clr [9dh]
clr [9eh]
mov a,16
mov [9fh],a
cl3:
clr c
rlc [9bh]
rlc [9ah]
mov a,[9eh]
adc a,[9eh]
daa [9eh]
mov a,[9dh]
adc a,[9dh]
daa [9dh]
mov a,[9ch]
adc a,[9ch]
daa [9ch]
sdz [9fh]
jmp cl3
ret; 中斷服務子程式
zd1:
mov [0f0h],a ;壓棧acc到0f0h
mov a,status ;
mov [0f1h],a ;壓棧status標誌暫存器到0f1h
clr pb ;清pc(清螢幕)
mov a,q1 ;資料表位址
clr tbhp ;清資料表位址高位否則出錯
add a,iar0 ;利用間接暫存器找到要顯示段碼所在資料表的位址
mov tblp,a ;**指標暫存器tblp
tabrd pd ;查表並將資料存到pd口暫存器
mov a,[80h] ;位碼暫存器
mov pb,a ;將位碼暫存器的數存到pc口暫存器
;段碼和位碼的數都有了所以數碼管被點亮
inc mp0 ;間接暫存器指標加1指向下乙個段碼暫存器
rl [80h] ;左移位碼暫存器控制下乙個數碼管
snz [80h].5 ;判斷是否控制完4個數碼管
jmp zd2 ;退出中斷繼續
mov a,1 ;是則從新初始化暫存器資料
mov [80h],a ;
mov a,8ah ;千位數碼管對應暫存器
mov mp0,a ;存到間接暫存器0
zd2:
mov a,[0f1h] ;彈棧後進先出先進後出
mov status,a ;彈棧0f1h的數到標誌暫存器
mov a,[0f0h] ;彈棧0f0h的數到acc
clr mf0f ;清多功能標誌
clr t2af ;清定時器2比較器a標誌
reti ;中斷返回
isr_adc:
mov [0f0h],a ;壓棧acc到0f0h
mov a,status ;
mov [0f1h],a ;壓棧status標誌暫存器到0f1h
mov a,adrh
mov [98h],a
mov a,adrl
mov [99h],a
mov a,[0f1h] ;彈棧後進先出先進後出
mov status,a ;彈棧0f1h的數到標誌暫存器
mov a,[0f0h] ;彈棧0f0h的數到acc
clr start ;high pulse on start bit to initiate conversion
set start ;reset a/d
clr start ;start a/d
reti ;中斷返回
; 延時子程式
m001:
mov a,1
mov [85h],a
m002:
mov a,200
mov [86h],a
m003:
mov a,250
mov [87h],a
m004:
sdz [87h]
jmp m004
sdz [86h]
jmp m003
sdz [85h]
jmp m002
retend
合泰微控制器做電壓表 合泰微控制器總結
1 合泰微控制器總結 測試環境c編譯器v21.debug2.3.陣列,支援一維 二維陣列 大小小於1 bank 4.使用const關鍵字,變數將儲存於程式儲存區,如,const uint8 t tab 1,2,3 5.中斷服務函式 pragma vector isr tmr0 0x0c 定義中斷入口...
合泰微控制器AD轉換Adc Init c
a d 轉換步驟 下面概述實現a d 轉換過程的各個步驟。步驟1 通過adcr1 暫存器中的adck2 adck0 位,選擇所需的a d 轉換時鐘。步驟2 清零adcr0 暫存器中的adoff 位使能a d。步驟3 通過adcr0 暫存器中的acs2 acs0 位和adcr1 暫存器中的acs4,選...
51微控制器(2) 微控制器是什麼
1.什麼是ic?ic integrated circuit 積體電路,就是用微器件為積木,去搭建乙個具備一定功能的電路板。以前沒有微器件的時候,需要用很大的電路板才能實現乙個功能,微器件可以小到mm甚至nm級別,把這些電路做在一起,用塑料外殼封裝起來就形成了ic晶元,用的是半導體工藝。2.什麼是cp...