?? ad.asm
字號:
;**************************************************
; 平凡單片機(jī)工作室
; http://www.mcustudio.com
; Copyright 2003 pingfan's McuStudio
; All rights Reserved
;作者:周堅(jiān)
;文件名:ad.asm
;DSB?1A型實(shí)驗(yàn)板與TLC1543的接口
;功能簡介:每隔1s輪流將一個通道的值顯示在數(shù)碼管后4位,首位顯示通道號
;**************************************************
gCoun DATA 22H ;通道計(jì)數(shù)器
;以下定義各引腳
ADCLK EQU P1.1 ;時鐘
ADaddr EQU P1.2 ;地址引腳
ADDout EQU P1.3 ;數(shù)據(jù)端
ADCS EQU P1.4 ;片選端
Hidden DATA 10H ;消隱碼
Counter DATA 57H ;顯示程序用計(jì)數(shù)器
DISPBUF DATA 58H ;顯示緩沖區(qū)首地址
ORG 0000H
JMP START
ORG 000BH ;定時中斷使用T0
JMP DISP ;定時中斷程序
ORG 30H
START:
MOV SP,#5FH ;初始化
MOV P1,#0FFH
MOV P0,#0FFH
MOV P2,#0FFH ;關(guān)所有LED及數(shù)碼管
MOV TMOD,#00000001B
MOV TH0,#HIGH(65536-3000)
MOV TL0,#LOW(65536-3000)
SETB TR0
SETB EA
SETB ET0
MOV Counter,#0 ;計(jì)數(shù)器清零
MOV DISPBUF+1,#Hidden ;第2位顯示器消隱
MOV gCoun,#0 ;通道計(jì)數(shù)器清零,指向通道0
LOOP:
CALL Delay ;延時1s
MOV R2,gCoun ;送通道號
CALL ADConver
MOV A,R0
MOV R6,A
MOV A,R1
MOV R7,A
CALL HB2
;調(diào)用二-十進(jìn)制轉(zhuǎn)換程序
;入口:待轉(zhuǎn)換的雙字節(jié)十六進(jìn)制數(shù)在R6和R7中
;出口:轉(zhuǎn)換結(jié)束的結(jié)果在R3、R4和R5中,壓縮BCD碼方式存儲
MOV A,R4
ANL A,#0F0H
SWAP A ;高低4位互換
MOV DispBuf+2,A ;最高位
MOV A,R4
ANL A,#0FH
MOV DispBuf+3,A
MOV A,R5
ANL A,#0F0H
SWAP A
MOV DispBuf+4,A
MOV A,R5
ANL A,#0FH
MOV DispBuf+5,A
;以上程序段將壓縮BCD碼轉(zhuǎn)換成非壓縮BCD碼并送顯示緩沖區(qū)
MOV DispBuf,gCoun ;將通道號送第1個顯示器的顯示緩沖區(qū)
INC gCoun ;通道號加1
MOV A,gCoun
CJNE A,#11,LOOP ;判斷是否到11了
MOV gCoun,#0 ;到則回零
JMP LOOP
;命令:ADConver
;參數(shù):r2 通道號,轉(zhuǎn)換前存入 轉(zhuǎn)換結(jié)后數(shù)據(jù)在r0r1中,高位在前
;資源占用:r0,r1,r7,A
ADConver:
CLR ADClk
CLR ADCS
MOV A,R2
RLC A
;送出地址信號
MOV R7,#4
C_L1:
RLC A
MOV ADAddr,C
SETB ADClk
NOP
NOP
NOP
NOP
CLR ADClk
DJNZ R7,C_L1
;補(bǔ)6個脈沖
MOV R7,#6
C_L2:
SETB ADClk
NOP
NOP
NOP
NOP
CLR ADClk
DJNZ R7,C_L2
;等待轉(zhuǎn)換結(jié)束
SETB ADCS
NOP
NOP
NOP
NOP
CLR ADCS
;取高2位
NOP
NOP
NOP
NOP
SETB ADDout
SETB ADClk
MOV C,ADDout
MOV ACC.1,C
CLR ADClk
NOP
NOP
NOP
NOP
SETB ADDout
SETB ADClk
MOV C,ADDout
MOV ACC.0,C
CLR ADClk
ANL A,#00000011B ;清A的高6位
MOV R0,A ;保存數(shù)據(jù)
MOV R7,#8
C_L3:
NOP
NOP
NOP
NOP
SETB ADDout
SETB ADClk
MOV C,ADDout
MOV ACC.0,C
RLC A
CLR ADClk
DJNZ R7,C_L3
SETB ADCS
MOV R1,A
RET
;**********************************************************
;以下是顯示程序,使用定時器T1作定時中斷
;**********************************************************
DISP: ;定時器T0的中斷響應(yīng)程序
PUSH ACC ;ACC入棧
PUSH PSW ;PSW入棧
MOV TH0,#HIGH(65536-3000);定時時間為3000個周期
MOV TL0,#LOW(65536-3000)
MOV A,#DISPBUF ;顯示緩沖區(qū)首地址
ADD A,Counter
MOV R0,A
MOV A,@R0 ;根據(jù)計(jì)數(shù)器的值取相應(yīng)的顯示緩沖區(qū)的值
MOV DPTR,#DISPTAB ;字形表首地址
MOVC A,@A+DPTR ;取字形碼
MOV P0,A ;將字形碼送P0位(段口)
MOV A,Counter ;取計(jì)數(shù)器的值
MOV R0,A
MOV DPTR,#BitTab
MOVC A,@A+DPTR ;取位
ORL P2,#11111100B
ANL P2,A
INC Counter ;計(jì)數(shù)器加1
MOV A,Counter
CJNE A,#6,DISPEXIT
MOV Counter,#0 ;如果計(jì)數(shù)器計(jì)到6,則讓它回0
DISPEXIT:
POP PSW
POP ACC
RETI
BitTab: DB 7Fh,0BFH,0DFH,0EFH,0F7H,0FBH
DISPTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH
HB2: CLR A
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H
HB3: MOV A,R7
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
MOV R3,A
DJNZ R2,HB3
RET
Delay:
MOV R7,#10
D1: MOV R6,#250
D2: MOV R5,#200
DJNZ R5,$
DJNZ R6,D2
DJNZ R7,D1
RET
end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -