📄 完好的pwm1.asm
字号:
;PWM
;;;;;;;;;;;;;;;;;;;;;;;
DATEX_1 EQU 30H ;用来计数
DATEX_2 EQU 31H ;用来存放占空比
DATEX_3 EQU 32H ;用来存放时钟
DATEX_4 EQU 33H ;用来存放温度 (没用到)
OUT_PUT EQU P3.7 ;用来控制温度PWM
IN0_PUT EQU P2.6 ;A/D
IN1_PUT EQU P2.7 ;A/D
IN2_PUT EQU P2.5 ;A/D
DATEX_5 EQU 35H ;NT十位温度
DATEX_6 EQU 36H ;NT个位温度
DATEX_7 EQU 37H ;NT小数温度
DATEX_8 EQU 40H ;占存
DATEX_9 EQU 41H ;用来存放时钟分钟
DATEX_10 EQU 42H ;A/D采集时间控制
ST_1 EQU 43H ;设定温度个位
ST_2 EQU 44H ;设定温度十位
DATEX_11 EQU 45H ;用来存放ST温度
DATEX_12 EQU 46H ;用来存放NT温度
DATEX_13 EQU 47H ;(16)低位
DATEX_14 EQU 48H ;(16)高位
DATEX_15 EQU 49H ;(16)
COMPY_2 EQU 4AH ;比较(高位)
COMPY_1 EQU 4BH ;比较(低位)
EMPTY_2 EQU 50H ;用来存放占空时间(高位)
EMPTY_1 EQU 51H ;用来存放占空时间(低位)
ZHAN_KONG EQU 52H ;用来判断保温
ZHAN_TIME EQU 53H ;用来保温计数
JISHU EQU 54H ;用来计数占空比
SINGN_END EQU 24H.0 ;用来标志加热结束
SINGN_R EQU 24H.1 ;确认键
SINGN_T EQU 24H.2 ;停止键 (没用到)
SIGN_WEATHER EQU 24H.3 ;气温判断
SIGN_ZHAN EQU 24H.4 ;保温标志
SIGN_CASE EQU 24H.5 ;缓冲加热
SIGN_PT EQU 24H.6
;;;;;;;;;;;;;;;;;;
ORG 00H
LJMP MAIN
ORG 00BH
LJMP TIME_0
ORG 50H
MAIN:MOV TL0,#0F3H
MOV TH0,#0D8H
MOV TMOD,#01H
SETB ET0
MOV DATEX_1,#00H
MOV DATEX_3,#00H
MOV DATEX_9,#00H
MOV DATEX_5,#00H
MOV DATEX_6,#00H
MOV DATEX_7,#00H
MOV DATEX_10,#00H
MOV COMPY_1,#00H
MOV COMPY_2,#00H
MOV EMPTY_2,#00H
MOV EMPTY_1,#00H
MOV ZHAN_KONG,#00H
CLR SINGN_END
CLR SINGN_T
CLR SINGN_R
CLR SIGN_WEATHER
CLR SIGN_ZHAN
CLR SIGN_CASE
CLR SIGN_PT
MOV ZHAN_KONG,#1EH
SETB OUT_PUT
MOV SP,#60H
START: MOV P1,#00001100B ;显示开关控制-开显示-光标开-字符闪烁
LCALL Ming_Lin_1 ;调用命令输出子程序
MOV P1,#00111000B ;功能设置-8位数据接口-双行显示-5*7点阵
LCALL Ming_Lin_1 ;调用命令输出子程序
MOV P1,#00000001B ;清屏
LCALL Ming_Lin_1 ;调用命令输出子程序
MOV P1,#00000110B ;输入方式设置,增量方式不移位
LCALL Ming_Lin_1
MOV P1,#84H
LCALL Ming_Lin_1
MOV P1,#54H
LCALL DADE
;==============
MOV P1,#85H
ACALL Ming_Lin
MOV P1,#69H
ACALL DADE
;=============
MOV P1,#86H
ACALL Ming_Lin
MOV P1,#6DH
ACALL DADE
;===========
MOV P1,#87H
ACALL Ming_Lin
MOV P1,#65H
ACALL DADE
;=========
MOV P1,#88H
ACALL Ming_Lin
MOV P1,#3AH
ACALL DADE
;==========
MOV P1,#8BH
ACALL Ming_Lin
MOV P1,#3AH
ACALL DADE
;========
MOV P1,#0C0H
ACALL Ming_Lin
MOV P1,#53H
ACALL DADE
;===========
MOV P1,#0C1H
ACALL Ming_Lin
MOV P1,#54H
ACALL DADE
;=============
MOV P1,#0C2H
ACALL Ming_Lin
MOV P1,#3AH
ACALL DADE
;==========
MOV P1,#0C5H
ACALL Ming_Lin
MOV P1,#63H
ACALL DADE
;==========
MOV P1,#0C7H
ACALL Ming_Lin
MOV P1,#4EH
ACALL DADE
;==========
MOV P1,#0C8H
ACALL Ming_Lin
MOV P1,#54H
ACALL DADE
;=========
MOV P1,#0C9H
ACALL Ming_Lin
MOV P1,#3AH
ACALL DADE
;=========
MOV P1,#0CCH
ACALL Ming_Lin
MOV P1,#2EH
ACALL DADE
;================
MOV P1,#0CEH
ACALL Ming_Lin
MOV P1,#63H
ACALL DADE
;*******************键盘扫描和数据处理
BEGIN: LCALL SCAN
LCALL DELAY1
LCALL DELAY1
;LCALL IN_PUT
SETB SINGN_R ;/
;SETB SIGN_WEATHER
MOV ST_2,#3 ;/
MOV ST_1,#0 ;/
MOV DATEX_5,#2;/
MOV DATEX_6,#7 ;/
MOV A,DATEX_5 ;BCD码转换成十六进制
MOV B,#10
MUL AB
MOV DATEX_12,A
MOV A,DATEX_6
ADD A,DATEX_12
MOV DATEX_12,A
JNB SIGN_WEATHER,BEGIN_1
;***************
MOV P1,#81H
ACALL Ming_Lin
MOV P1,#73H
ACALL DADE
;**************
BEGIN_1:LCALL LCM
JB SINGN_R,WORK_1
AJMP BEGIN
WORK_1: MOV A,ST_2 ;BCD码转换成十六进制
MOV B,#10
MUL AB
MOV DATEX_11,A
MOV A,ST_1
ADD A,DATEX_11
MOV DATEX_11,A
LCALL CPU ;计算温差及加热方式
JNB SIGN_WEATHER,WORK_2
LCALL WEATHER_1
WORK_2: LCALL COOK_1
SETB TR0
SETB EA
CLR OUT_PUT ;开始加热
WORK: MOV DATEX_5,#2;/
MOV DATEX_6,# 9;/
LCALL LCM ;开始工作并加热
JB SIGN_PT,WORK_3
JNB SINGN_END,WORK_3
SETB SIGN_PT
;***********
MOV A,DATEX_5 ;BCD码转换成十六进制
MOV B,#10
MUL AB
MOV DATEX_12,A
MOV A,DATEX_6
ADD A,DATEX_12
MOV DATEX_12,A
;*********
CLR C
MOV A,DATEX_12
CJNE A,DATEX_11,WORK_10
WORK_10: JNC WORK_6 ;>ST
MOV A,DATEX_11
CLR C
SUBB A,DATEX_12
MOV B,#7
MUL AB
MOV EMPTY_1,A
MOV EMPTY_2,#00H
MOV COMPY_1,#00H
MOV COMPY_2,#00H
CLR SINGN_END
CLR OUT_PUT
AJMP WORK_3
WORK_6: SETB OUT_PUT
NOP
WORK_3: JNB SIGN_PT,WORK_4
JNB SINGN_END,WORK_4
SETB SIGN_CASE
WORK_4:
AJMP WORK
;;;;=====================================
WEATHER_1:MOV A,DATEX_11
CLR C
CJNE A,#80,WEATHER_2
WEATHER_2:JC WEATHER_3 ;<80
NOP
RET
WEATHER_3:CLR C
CJNE A,#70,WEATHER_4
WEATHER_4:JC WEATHER_5
CLR C ;>70
MOV A,EMPTY_1
SUBB A,#60
MOV EMPTY_1,A
MOV A,EMPTY_2
SUBB A,#00H
MOV EMPTY_2,A ;>70
RET
WEATHER_5:CLR C
CJNE A,#60,WEATHER_6
WEATHER_6: JC WEATHER_7
CLR C ;>60
MOV A,EMPTY_1
SUBB A,#50
MOV EMPTY_1,A
MOV A,EMPTY_2
SUBB A,#00H
MOV EMPTY_2,A
RET
WEATHER_7:CLR C
CJNE A,#50,WEATHER_8
WEATHER_8: JC WEATHER_9
CLR C ;>50
MOV A,EMPTY_1
SUBB A,#44
MOV EMPTY_1,A
MOV A,EMPTY_2
SUBB A,#00H
MOV EMPTY_2,A
RET
WEATHER_9:CLR C
CJNE A,#40,WEATHER_10
WEATHER_10:JC WEATHER_11
CLR C ;>40
MOV A,EMPTY_1
SUBB A,#20
MOV EMPTY_1,A
MOV A,EMPTY_2
SUBB A,#00H
MOV EMPTY_2,A
RET
WEATHER_11:CLR C
CJNE A,#30,WEATHER_12
WEATHER_12:JC WEATHER_13
CLR C ;>30
MOV A,EMPTY_1
SUBB A,#15
MOV EMPTY_1,A
MOV A,EMPTY_2
SUBB A,#00H
MOV EMPTY_2,A
WEATHER_13:RET
;=========================================计算差值
CPU: MOV A,DATEX_11 ;ST
LCALL ASSESS
MOV DATEX_14,R4
MOV DATEX_13,R3
MOV A,DATEX_12 ;NT
LCALL ASSESS
MOV A,DATEX_12
CLR C
CJNE A,#30,CPU_2
CPU_2:JNC CPU_3
MOV A,DATEX_13
CLR C
ADD A,R3
MOV EMPTY_1,A
MOV A,DATEX_14
ADDC A,R4
MOV EMPTY_2,A
RET
CPU_3:MOV A,DATEX_13
CLR C
SUBB A,R3
MOV EMPTY_1,A
MOV A,DATEX_14
SUBB A,R4
MOV EMPTY_2,A
RET
;***********************************************查表经验值的占空比
;***********************************************
COOK_1:MOV A,DATEX_11
CLR C
CJNE A,#80,COOK_2
COOK_2:JC COOK_3 ;<80
NOP
RET
COOK_3:CLR C
CJNE A,#70,COOK_4
COOK_4:JC COOK_5
MOV DATEX_2,#28
RET
COOK_5:CLR C
CJNE A,#60,COOK_6
COOK_6:JC COOK_7
MOV DATEX_2,#26
RET
COOK_7:CLR C
CJNE A,#50,COOK_8
COOK_8:JC COOK_9
MOV DATEX_2,#20
RET
COOK_9:CLR C
CJNE A,#40,COOK_10
COOK_10:JC COOK_11
MOV DATEX_2,#16
RET
COOK_11:CLR C
CJNE A,#30,COOK_12
COOK_12:JC COOK_13
MOV DATEX_2,#10
COOK_13:RET
;**************************************************
;****************************************************
;=============================== ;数据处理填装 R4 R3.R2
ASSESS:
CLR C
CJNE A,#50H,LOOP_1
LOOP_1:JC LOOP_2 ;<80C
NOP ;>80C
RET
LOOP_2:CLR C
CJNE A,#46H,LOOP_3
LOOP_3:JC LOOP_4 ;<70C
;>70C
CLR C
SUBB A,#70
MOV B,#10
MUL AB
CLR C
ADD A,#320
MOV R3,A
MOV R4,#00H
MOV R2,#40
INC R4
RET
LOOP_4:CLR C
CJNE A,#3CH,LOOP_5
LOOP_5:JC LOOP_6 ;<60
; >60
CLR C
SUBB A,#60
MOV B,#10
MUL AB
CLR C
ADD A,#220
MOV R3,A
MOV R4,#00H
MOV R2,#40
JNC LOOPK_1
INC R4
LOOPK_1: RET
LOOP_6:CLR C
CJNE A,#32H,LOOP_7
LOOP_7:JC LOOP_8 ;<50
CLR C ; >50
SUBB A,#50
MOV B,#200
MUL AB
MOV DIVDL,A
MOV DIVDH,B
MOV DIV_1,#23
ACALL DIVD
CLR C
MOV A,DIVDL
ADD A,#133
MOV DIVDL,A
JNC LOOPY_2
INC DIVDH
LOOPY_2:MOV R4,DIVDH
MOV R3,DIVDL
MOV A,TEMP
MOV DPTR,#TABLE_23
MOVC A,@A+DPTR
ADD A,#4
CLR C
CJNE A,#10,LOOPT_3
LOOPT_3:JC LOOPT_4 ;<10
INC R3
CLR C
SUBB A,#10
LOOPT_4:MOV B,#10
MUL AB
MOV R2,A
RET
LOOP_8:CLR C
CJNE A,#28H,LOOPF_9
LOOPF_9:JC LOOP_9 ;<40
CLR C ;>40
SUBB A,#40
MOV B,#20
MUL AB
MOV DIVDL,A
MOV DIVDH,B
MOV DIV_1,#3
ACALL DIVD
CLR C
MOV A,DIVDL
ADD A,#66
MOV DIVDL,A
JNC LOOPY_3
INC DIVDH
LOOPY_3:MOV R4,DIVDH
MOV R3,DIVDL
MOV A,TEMP
MOV DPTR,#TABLE_3
MOVC A,@A+DPTR
ADD A,#7
CLR C
CJNE A,#10,LOOPT_5
LOOPT_5:JC LOOPT_6 ;<10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -