?? adc.asm
字號:
;------------------------------------------------
;ADC測試程序。在四位共陽動態LED上顯示ADC 轉換數據
;20H~23H是顯示緩沖區
;------------------------------------------------
ORG 0000H
LJMP INIT
ORG 000BH
LJMP ADC ;T0中斷服務程序
INIT: MOV 28H,#0 ;儲存轉換數據
MOV SP,#60H ;初始化SP
MOV 20H,#0ffh ;給顯示區賦值
MOV 21H,#0ffh
MOV 22H,#0ffh
MOV 23H,#0ffh
MOV 30H,#0 ;0.3秒計時用
MOV R0,#20H ;顯示緩沖區起點
MOV R5,#0FEH ;掃描位選起始值
MOV TMOD,#01H ;T0 方式1
MOV TH0,#3CH ;(65536-50000)/256 ;賦初值
MOV TL0,#0B0H ;65536-((65536-50000)/256*256)
SETB EA ;開中斷
SETB ET0
SETB TR0 ;開定時器
MAIN: LCALL DISPLAY ;主程序只要完成掃描顯示功能
LJMP MAIN
;-------------------------------------
;T0中斷服務程序,讀取ADC數據并且拆字
;占用資源:30H
;-------------------------------------
ADC: INC 30H
MOV A,30H
CJNE A,#7,ADC_QUIT ;計時50MS*6=300MS
MOV 30H,#0
LCALL READ_ADC
LCALL CONVERSE
ADC_QUIT:
RETI
;-----------------------------------------------
;程序功能:讀出ADC TLC548 的數據
;占用資源:R1,28H
;硬件連接:P35---CLK, P36---DO, P37---CS
;轉換結果儲存在28H單元
;-----------------------------------------------
READ_ADC:NOP ;初始化
SETB P3.7 ;CS置高電平
CLR P3.5 ;CLK產生下降沿
MOV R1,#00H ;移位計數標志清零
ADP: CLR P3.7 ;CS為0,開始讀前一個轉換完畢的數值
NOP ;延時1.4uS,具體視單片機時鐘而定
NOP
NEXT: SETB P3.5 ;置I/O CLOCK為1
MOV C,P3.6
RLC A
CLR P3.5 ;置I/O CLOCK為零
INC R1 ;移位計數
CJNE R1,#8,NEXT ;判斷是否滿8次
MOV R1,#0 ;計數寄存器重置
SETB P3.7 ;CS為1,停止讀數
MOV 28H,A ;28H:儲存轉換數據.
RET
;------------------------------------------
;三位數的拆字程序
;入口地址:28H(要拆分的數字)
;出口地址:22~20H(拆分后的百位,十位和個位數)
;------------------------------------------
CONVERSE: ;拆字程序,拆分成BCD碼并儲存在顯示緩沖區
MOV R1,#22H ;顯示緩沖區首地址(三位數)
MOV A,28H ;讀入要拆分的數據
MOV B,#100 ;除于100得到百位數
DIV AB
MOV @R1,A ;保存百位數
DEC R1 ;修改緩沖區地址
MOV A,B ;讀入要拆分的數據(余數)
MOV B,#10 ;除于10得到十位數
DIV AB
MOV @R1,A ;保存十位數
DEC R1 ;修改緩沖區地址
MOV @R1,B ;保存個位數
RET
;-----------------------------------------------
;使用資源:R0,R5,20H~24H 占用P0,P2口
;-------------------------------------------------------
DISPLAY: ;每次只顯示一位
MOV P0,#0FFH
CJNE R0,#24H,DISPLAY1 ;如果四位都已經掃描完畢
MOV R0,#20H ;則從第一位重新掃描顯示
MOV R5,#0FEH
DISPLAY1:
MOV DPTR,#TABLE
MOV A,@R0 ;根據要顯示的數字查找字符表
MOVC A,@A+DPTR
;********************************
; CJNE R0,#22H,X10 ;給第三位LED加上小數點
; ANL A,#01111111B
;X10: NOP
;CJNE R0,#24H,X11 ;給第五位LED加上小數點
;ANL A,#01111111B
X11: MOV P0,A ;送顯示信號
MOV P2,R5 ;送位選信號
LCALL DELAY5MS ;每次掃描延時5ms
X3: MOV A,R5 ;位選碼移位
RL A
MOV R5,A
INC R0 ;指向下一個要顯示的字符
RET
DELAY5MS:
MOV R6,#25 ;5毫秒延時
D1: MOV R7,#100
DJNZ R7,$
DJNZ R6,D1
RET
TABLE: ;顯示字型碼(共陽)
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -