?? test938ad.asm
字號:
//*******************************************************************************************
//文件:TEST938AD.ASM
//功能:對通道AD0 進行AD 轉換,結果通過UART 發送到PC,通信波特率為9600BPS
;每路AD轉換的結果寄存器需要2個,故8路ADC有16個結果寄存器。以第0路ADC,它的結果寄存器是AD0DAT0R
;(存結果的低8位,即 D7~D0),AD0DAT0L(存結果的高8位,即D9~D2。和有些其它單片機的ADC不同,952沒有
;結果寄存器是左對齊或右對齊的設置。因此在進行ADC時,如果是右對齊,則低8位寄存器不動,高8位寄存器
;循環左移2位,使得轉換結果的D9、D8位于高字節的低2位,高六位清0;如果是左對齊,則高8位寄存器不動,
;低8位寄存器循環右移,使得轉換結果的低2位移到低8位寄存器的D7、D6位,低6位清0。這樣操作才能得到正確結果。
//*******************************************************************************************
$NOMOD51
$INCLUDE (REG932.H)
ADCON0 DATA 97H ;定義ADC 用到的寄存器
ADMODA DATA 0C0H
ADMODB DATA 0A1H
ADINS DATA 0A3H
AD0DAT0R EQU 0FFFEH ;定義AD0DAT0R 地址
AD0DAT0L EQU 0FFFFH ;定義AD0DAT0L 地址
ADH EQU 40H
ADL EQU 41H
LEDCON BIT P1.6
T_BUFF EQU 60H
ORG 0000H
LJMP 0100H
ORG 0100H
;------------------------主程序------------------------------------------
MAIN: MOV P0M1,#0FFH ;初始化端口
MOV P0M2,#00H
MOV P1M1,#0CH ;P1.2,P1.3開漏,P1.6推挽
MOV P1M2,#4CH
SETB LEDCON
MOV ADINS,#01H ;選擇通道AD0
MOV ADMODA,#10H ;單次轉換
MOV SCON,#50H ;初始化UART
MOV BRGCON,#00H
;MOV SSTAT,#60H
MOV BRGR0,#0F0H
MOV BRGR1,#02H
MOV BRGCON,#03H
MOV A,#00H
MOV T_BUFF,A
LOOP: MOV T_BUFF+1,#02H
MOV T_BUFF+2,#03H
MOV T_BUFF+3,#04H
MOV T_BUFF+4,#05H
MOV T_BUFF+5,#06H
MOV T_BUFF+6,#07H
MOV T_BUFF+7,#08H
LCALL TRANS
CPL LEDCON
LCALL D2S
ADC: MOV ADCON0,#05H ;循環AD 轉換
WAIT: MOV A,ADCON0 ;開始轉換
JNB ACC.3,WAIT ;等待轉換完畢
LCALL D2S ;延時
CALL SEND2PC ;通過UART 發送數據到PC
MOV A,ADH
ANL A,#0C0H
RL A
RL A
MOV ADH,A
LCALL TRANSA
CPL LEDCON
SJMP ADC
;----------------------DELAY:延時子程序-------------------------------
DELAY: MOV R7,#10H
DL1: MOV R6,#0FFH
DL2: MOV R5,#0FFH
DJNZ R5,$
DJNZ R6,DL2
DJNZ R7,DL1
RET
;----------------------UART 發送子程序---------------------------------
SEND2PC:CLR TI
MOV DPTR,#AD0DAT0L ;發送轉換結果高8 位,即9:2 位
MOVX A,@DPTR
MOV ADH,A
MOV SBUF,A
JNB TI,$
CLR TI
MOV DPTR,#AD0DAT0R ;發送轉換結果低8 位,即7:0 位
MOVX A,@DPTR
MOV ADL,A
MOV SBUF,A
JNB TI,$
CLR TI
RET
TRANSA: CLR TI
MOV A,ADH
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,ADL
MOV SBUF,A
JNB TI,$
CLR TI
RET
TRANS: MOV R3,#08H
MOV R0,#60H
TRANS1: MOV A,@R0
MOV SBUF,A
WAITH: JNB TI,WAITH
CLR TI
INC R0
DJNZ R3,TRANS1
SETB ES ;開放串口中斷
SETB EA ;開放總中斷,等待接收測量數據
RET
;***************938軟件延時子程序****************
D20MS: MOV R6,#14H ;20MS
D20: ACALL D1MS
DJNZ R6,D20
RET
D1MS: MOV R7,#0F5H ;1MS,1T
DD1: NOP ;1T
NOP ;1T
NOP ;1T
NOP ;1T
NOP ;1T
NOP ;1T
NOP ;1T
NOP ;1T
NOP ;1T
NOP ;1T
NOP ;1T
NOP ;1T
NOP
DJNZ R7,DD1 ;2T
RET ;2T
D250MS: MOV R5,#0CH ;250MS
DD2: ACALL D20MS
DJNZ R5,DD2
RET
D500MS: MOV R5,#19H ;500MS
DD3: ACALL D20MS
DJNZ R5,DD3
RET
D400MS: MOV R5,#16H ;400MS
DD4A: ACALL D20MS
DJNZ R5,DD3
RET
D1S: MOV R5,#32H ;1S
DD4: ACALL D20MS
DJNZ R5,DD4
RET
D1M: MOV R6,#20H ;32S
D1MA: LCALL D1S
DJNZ R6,D1MA
RET
D2S: MOV R5,#64H ;2S
DD5: ACALL D20MS
DJNZ R5,DD5
RET
D80MS: MOV R3,#50H ;20MS軟件延時程序
DD1B: ACALL D1MS
DJNZ R3,DD1B
RET
D6S: MOV R5,#0A0H
DD2A: ACALL D20MS
DJNZ R5,DD2A
RET
;**************延時子程序結束*************
;---------------------------------------------------------------------------------
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -