📄 mcs-51单片机实用子程序库2.txt
字号:
DBUF0 EQU 30H
TEMP EQU 40H
RDATA EQU 60H
POINT EQU 38H
ADQS EQU 39H
RDAT EQU 7EH
SUM EQU 7FH
DAT BIT 90H
CLKE BIT 91H
TXBZ BIT 30H
BELL BIT 0A2H
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INTT0
ORG 0023H
LJMP PCCOM
ORG 0100H
MAIN: MOV RDAT,#0
MOV ADQS,#0
MOV POINT,#0
SETB BELL ;报警处理
MOV IE,#80H ;CPU开中断
MOV TMOD,#21H ;定时器T0方式1计时,定时器T1方式2计时
MOV TH0,#0FFH ;产生20KHZ的时钟频率,供给AD0809
MOV TL0,#0E7H
SETB TR0
SETB EA
SETB ET0
MOV TH1,#0FDH
MOV TL1,#0FDH
MOV PCON,#00H
MOV SCON,#50H
SETB TR1
SETB PS
SETB ES
CLR RI
CLR TI
SETB P3.2
CLR P2.7 ;ST
CLR P2.6 ;OE
START: LCALL AD0809
LCALL TURNBCD ;调用数据处理程序
LCALL BAOJING
LCALL PCSER ;调用通信子程序
LCALL DISP1 ;调用显示子程序
LCALL DELAY
LJMP START
/********************AD采样子程序********************/
AD0809: ;SETB ET0
CLR A
CLR P3.2
SETB P2.7
NOP
NOP
CLR P2.7
NOP
NOP
NOP
NOP
;WAIT: JB P3.2,MOVD
; AJMP WAIT
;MOVD:
SETB P2.6
MOV A,P0
MOV ADQS,A
;MOV @R0,A
CLR P2.6
;CLR ET0
/******************** 数据处理?*********************/
TURNBCD:
; MOV A,@R0
MOV A,ADQS
MOV B,#51
DIV AB
NOP
NOP
NOP
MOV 35H,A ;个位数放入32H中
MOV A,B ;余数大于19H,F0为1,乘法溢出,结果加5
CLR F0
SUBB A,#1AH
MOV F0,C
MOV A,#10
MUL AB
MOV B,#51
DIV AB
NOP
NOP
NOP
JB F0,LOOP2 ;F0=1,转至LOOP2执行
ADD A,#5
LOOP2: MOV 36H,A ;小数点后第一位放至36H中
MOV A,B
CLR F0
SUBB A,#1AH
MOV F0,C
MOV A,#10
MUL AB
MOV B,#51
DIV AB
NOP
NOP
NOP
JB F0,LOOP3
ADD A,#5
LOOP3: MOV 37H,A ;小数点后第二位放至37H中
LCALL DELAY
MOV 30H,#0
MOV 31H,#0
MOV 32H,35H
MOV 33H,36H
MOV 34H,37H
RET
/*********************报警子程序*******************/
BAOJING:
CLR F0
MOV A,35H
CLR 35H
SUBB A,#05H
MOV F0,C
JNB F0,NEXTB1 ;超量程报警,数码管显示88888
LJMP NEXTB2
NEXTB1: CLR BELL
MOV 30H,#08H
MOV 31H,#08H
MOV 32H,#08H
MOV 33H,#08H
MOV 34H,#08H
LCALL DISP1
LCALL DELAY
LCALL DELAY
NEXTB2: SETB BELL
RET
/******************定时器0中断子程序****************/
INTT0: CLR EA
PUSH PSW
PUSH ACC
PUSH DPL
PUSH DPH
MOV TH0,#0FFH ;产生20KHZ的时钟频率,供给AD0809
MOV TL0,#0E7H
CPL P2.3
POP DPH
POP DPL
POP ACC
POP PSW
SETB EA
RETI
/********************显示子程序*********************/
DISP1:
CLR A ;清R0,R1中内容
MOV @R0,A
MOV @R1,A
MOV R0,#DBUF0 ;静态显示子程序
MOV R1,#TEMP
MOV R2,#5
MOV POINT,#03H ;第三个数码管点小数点
DP10: DJNZ POINT,NPOINT
MOV DPTR, #SEGTAB2 ;表头地址
SJMP CONTIUE
NPOINT: MOV DPTR,#SEGTAB1
CONTIUE:MOV A ,@R0
MOVC A,@A+DPTR ;取段码
MOV @R1,A ;到TEMP中
INC R0
INC R1
DJNZ R2,DP10
MOV R0,#TEMP ;段码地址指针
MOV R1,#5 ;段码字节数
DP12: MOV R2,#8 ;移位次数
MOV A,@R0 ;取段码
DP13: RLC A ;段码左移
MOV DAT,C ;输出一位段码
CLR CLKE ;发送一个位移脉冲
SETB CLKE
DJNZ R2,DP13
INC R0
DJNZ R1,DP12
RET
SEGTAB1:DB 3FH,06H,5BH,4FH,66H,6DH ;0,1,2,3,4,5
DB 7DH,07H,7FH,6FH,77H,7CH ;6,7,8,9,A,B
DB 58H,5EH,7BH,71H,00H,40H ;C,D,E,F, ,-
SEGTAB2:DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH ;0.,1.,2.,3.,4.,5.
DB 0FDH,87H,0FFH,0EFH,0F7H,0FCH ;6.,7.,8.,9.,A.,B.
DB 0D8H,0DEH,0FBH,0F1H,00H,0D0H ;C.,D.,E.,F., .,-.
DELAY: MOV R4,#08H ;延时
AA1: MOV R5,#0FFH
AA: NOP
NOP
NOP
DJNZ R5,AA
DJNZ R4,AA1
RET
/*******************串行口中断子程序*******************/
PCCOM:
PUSH PSW
PUSH ACC
PUSH DPL
PUSH DPH
CLR ES
JNB TI,L1 ;等待发送完成
CLR TI ;清发送标志
L1: CLR RI
MOV A,SBUF ;发送数据缓存
CJNE A,#01H,L2
;SETB TXBZ
MOV 60H,A
MOV A,RDAT
ADD A,#1
MOV RDAT,A
LJMP EXITR
L2: CJNE A,#52H,L3
; SETB TXBZ
MOV 61H,A
MOV A,RDAT
ADD A,#1
MOV RDAT,A
LJMP EXITR
L3: CJNE A,#00H,L4
;SETB TXBZ
MOV 62H,A
MOV A,RDAT
ADD A,#1
MOV RDAT,A
LJMP EXITR
L4: CJNE A,#02H,L5
;SETB TXBZ
MOV 63H,A
MOV A,RDAT
ADD A,#1
MOV RDAT,A
LJMP EXITR
L5: CJNE A,#55H,EXITR
SETB TXBZ
MOV 64H,A
MOV A,RDAT
ADD A,#1
MOV RDAT,A
EXITR: POP PSW
POP ACC
POP DPL
POP DPH
SETB TR0
SETB ES
RETI
/***********************通信子程序*****************/
PCSER:
CLR ES
MOV A ,RDAT
CJNE A,#05H,L7
;JNB TXBZ,L7
MOV A,60H
ADD A,61H
ADD A,62H
ADD A,63H
MOV SUM,A
CJNE A,64H,L7
MOV A,SUM
MOV SBUF,#01H
ACALL DELAY
MOV SBUF,61H
ACALL DELAY
MOV SBUF,62H
ACALL DELAY
MOV SBUF,63H
ACALL DELAY
MOV SBUF,35H
ACALL DELAY
MOV SBUF,36H
ACALL DELAY
MOV SBUF,37H
ACALL DELAY
ADD A ,34H
ADD A ,35H
ADD A ,36H
MOV SBUF,A
ACALL DELAY
CLR A
CLR P1.2
L7: CLR TXBZ
MOV RDAT,#0
SETB ES
RET
/*******************通讯结束**********************/
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -