📄 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 + -