ADC BIT P3.6 ;ADC输入
;================= RAM定义 ======================
TL0Back DATA 1DH
TH0Back DATA 1EH ;定时/计数器基数备份
WF0 DATA 20H ;工作标志
F_Xms BIT WF0.0 ;软件定时器溢出标志
SendEN BIT WF0.1 ;发射允许
;================= 常数定义 ======================
STACK EQU 30H ;30H-3FH:共16字节堆栈
PAULSL EQU 9AH
PAULSH EQU 0F9H ;1.638毫秒定时器
DELAY50L EQU 0B0H
DELAY50H EQU 3CH ;50毫秒定时器
TXFREQ EQU 0E6H ;发射频率38.4KHz(12.00MHz晶体)
TXMODE EQU 22H ;发射时工作于自动重装载模式(模式2)
TMMODE EQU 21H ;定时时工作于16位计数器模式(模式1)
INITWF0 EQU 00H
Baud EQU 0E6H ;Baud Rate =1200BPS(osc=12.00MHz)
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;
; 主程序开始
;
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ORG 0000H
AJMP MainProg
ORG 000BH
AJMP TM0INTServe
ORG 001BH
MainProg:
MOV IE, #00H
MOV SP, #STACK
CLR TR0
CALL INITSystem
SETB TR1
SETB EA
SETB ET0
SETB Key
StartWork:
SETB Key
JB Key, StartWork
MOV A, #1 ;****
CALL Delay_50ms
JB Key,StartWork ;****
CALL ADCProg
MOV SBUF, A ;****
JNB TI, $
CLR TI
JNB Key, $
AJMP StartWork
;=========================================================
;系统初始化
INITSystem:
MOV WF0, #INITWF0
MOV TMOD, #TXMODE
MOV TH1, #Baud
MOV TL1, #Baud
MOV SCON, #40H
RET
;=========================================================
;AD转换程序
ADCProg:
SETB ADC
MOV R6, #2
MOV R7, #0
AD_Start:
MOV R5, #0
AD_Loop:
JB ADC, HighLevel
CLR AD_CON
DEC R5
AJMP AD_Count
HighLevel:
SETB AD_CON
NOP
NOP
NOP
NOP
AD_Count:
CALL Delay_10us
DJNZ R7, AD_Loop
DJNZ R6, AD_Start
MOV A, R5
SETB AD_CON
RET
;=========================================================
;10us延迟
Delay_10us:
MOV R4, #5
DJNZ R4, $
RET
;=========================================================
;秒级延迟程序(分辨率=0.05s)
Delay_50ms:
MOV TMOD, #TMMODE
CLR SendEN
CLR F_Xms
Delay50P0:
MOV TL0, #DELAY50L
MOV TH0, #DELAY50H
SETB TR0
Delay50P1:
ORL PCON, #01H ;IDL(PCON.0)=1,进入睡眠模式
JNB F_Xms, Delay50P1
CLR TR0
CLR F_Xms
DEC A
JNZ Delay50P0
RET
;=========================================================
;定时器0中断服务程序
TM0INTServe:
SETB F_Xms
RETI