📄 001.asm
字号:
;==============================
;定义
;==============================
LED_0 EQU 30H
LED_1 EQU 31H
LED_2 EQU 32H
ADC EQU 35H
H_TEMP EQU 38H
H_ALM BIT P3.4
SOUND BIT P3.7
CLOCK BIT P2.6
ST BIT P2.7
EOC BIT P2.5
OE BIT P2.4
ORG 00H ;复位地址 ORG origin缩写
SJMP START ;跳转 START 开始的意思
ORG 03H ;外部中断INT0
AJMP INT_0
ORG 0BH ;T0中断入口
LJMP INT_T0
;==============================
;初始化
;==============================
START: MOV SP,#70H ;堆栈初始化
CLR SOUND
MOV LED_0,#00H
MOV LED_1,#00H
MOV LED_2,#00H
MOV H_TEMP,#65 ;设置高温温度
MOV TMOD,#02H ;定时/计数器方式选择(高4位T1,低4位T0)(T0定时器,方式2)
MOV TH0,#245
MOV TL0,#0 ;定时10ms
MOV IE,#8AH ;开放T1,T0中断
CLR C
CLR 60H ;INT0复位
MOV TCON,#01H ;定时/计数控制
SETB EA ;允许中断总控制
SETB EX0 ;外部中断,INT0启动
SETB TR0 ;定时器T0启动,为ADC0808提供时钟
;==============================
;0809对电压进行AD转换
;==============================
AD: SETB H_ALM
CLR ST
SETB ST
CLR ST ;启动转换
JNB EOC,$
SETB OE ;允许输出数字量
MOV ADC,P1 ;读取AD转换结果
LCALL TWO ;调用数值转换摄氏度
CLR OE ;停止输出数字量
MOV A,H_TEMP
MOV R0,ADC
SUBB A,R0 ;比较判断是否高于上限
JC HALM
CLR 60H ;设置开关复位
LJMP ZH
;==============================
;高温警报
;==============================
HALM: JB 60H,ZH ;INT0中断报警
CLR H_ALM ;高温LED报警
SETB SOUND ;高温喇叭报警
CALL DELAYDISP
SETB H_ALM
CLR SOUND
CALL DISDISP
LJMP ZH
;==============================
;0809输出数值转换
;==============================
ZH: MOV A,ADC ;数值转换
MOV B,#100
DIV AB
MOV LED_2,A ;百位
MOV A,B
MOV B,#10
DIV AB
MOV LED_1,A ;十位
MOV LED_0,B ;个位
LCALL DISP
SJMP AD
;==============================
;方式2 定时器
;==============================
INT_T0: CPL CLOCK ;AT89C51提供ADC0808时钟
RETI
;==============================
; 输出显示程序
;==============================
DISP: MOV A,LED_0 ;个位赋值
MOV DPTR,#TABLE0
MOVC A,@A+DPTR
CLR P2.3 ;开启个位位型
MOV P0,A ;个位输出
LCALL DELAY250US
SETB P2.3
MOV A,LED_2 ;根据百位情况 十位需要灭零与否
JNZ NCT ;百位不为零 十位不灭零则跳转NCT
MOV A,LED_1 ;百位为零 判断十位是否为零
JZ CT ;十位也为零 灭零采用字形表TABLE
SJMP NCT ;十位不为零 正常赋值
CT: MOV DPTR,#TABLE
NCT: MOV A,LED_1 ;十位(不灭零)正常赋值
MOVC A,@A+DPTR
CLR P2.2
MOV P0,A
LCALL DELAY250US
SETB P2.2
MOV A,LED_2 ;百位直接采用灭零字形表
MOV DPTR,#TABLE
MOVC A,@A+DPTR
CLR P2.1
MOV P0,A
LCALL DELAY250US
SETB P2.1
RET
;==============================
;2字节除1字节程序(R4,R5除R7)
;==============================
TWO: MOV R7,#255
MOV A,ADC
MOV B,#100
MUL AB
MOV R5,A
MOV R4,B
MOV A,R4
SUBB A,R7
JC DV50
SETB OV ;商溢出
RET
DV50: MOV R6,#8 ;求平均值(R4R5/R7-→R3)
DV51: MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV F0,C
CLR C
SUBB A,R7
ANL C,/F0
JC DV52
MOV R4,A
DV52: CPL C
MOV A,R3
RLC A
MOV R3,A
DJNZ R6,DV51
MOV A,R4 ;四舍五入
ADD A,R4
JC DV53
SUBB A,R7
JC DV54
DV53: INC R3
DV54: CLR OV
MOV A,R3
MOV ADC,A
RET
;==============================
;延时250US程序
;==============================
DELAY250US:MOV R0,#5
DL1: MOV R1,#24
DL2: DJNZ R1,DL2
DJNZ R0,DL1
RET
;==============================
;延时1MS程序
;==============================
DELAY1MS : MOV R5,#10
DL9: MOV R6,#25
DL0: DJNZ R6,DL0
DJNZ R5,DL9
RET
;=============================
;延时10MS程序
;=============================
DELAY10MS :MOV R2,#50
DL3 :MOV R3,#50
DL4 :DJNZ R3,DL4
DJNZ R2,DL3
RET
;=============================
;延时200MS程序
;=============================
DELAY200MS: MOV R3,#250
DL5: MOV R4,#200
DL6: DJNZ R4,DL6
DJNZ R3,DL5
RET
;=============================
;显示--延迟
;=============================
DELAYDISP:
MOV R7,#200 ;显示延时
C1: CALL DISP
DJNZ R7,C1
RET
;=============================
;灭灯--延迟
;=============================
DISDISP:MOV LED_0,#0AH
MOV LED_1,#0H
MOV LED_2,#0H
MOV R7,#200 ;显示延时
C2: CALL DISP
DJNZ R7,C2
RET
;=============================
;灭灯--延时700MS程序
;=============================
DELAY700MS: MOV R2,#3
DL7: MOV R3,#100
DL8: MOV R4,#250
DL10: DJNZ R4,DL10
DJNZ R3,DL8
DJNZ R2,DL7
RET
;==============================
;外部中断(开关 改变电平)
;==============================
INT_0: CPL 60H ;开关给INT0下降沿--取反
CALL DELAY250US
RETI
;=============================
;字形表 0,1,2,3,4,5,6,7,8,9,灭
;=============================
TABLE0: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH,00H
;=============================
;灭零字形表灭 灭,1,2,3,4,5,6,7,8,9
;=============================
TABLE: DB 00H,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -