📄 完好的pwm0.asm
字号:
MOV DPTR,#TABLE_3
MOVC A,@A+DPTR
MOV B,#10
MUL AB
MOV R2,A
RET
LOOP_11:CLR C ;<30
MOV B,A
MOV A,#30
SUBB A,B
MOV B,#20
MUL AB
MOV DIVDL,A
MOV DIVDH,B
MOV DIV_1,#3
ACALL DIVD
MOV R4,DIVDH
MOV R3,DIVDL
MOV A,TEMP
MOV DPTR,#TABLE_3
MOVC A,@A+DPTR
MOV B,#10
MUL AB
MOV R2,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;**********************************************************
;****************2个字节16进制的除法***********************
;**********************************************************
;被除数单元20H--21H(高位在前低位在后)
;除数单元22H高位在前低位在后)
;余数单元23(高位在前低位在后)
;结果存放在被除数单元20H--21H(高位在前低位在后)
;影响 B OV R7 F0
;参数定义:
DIVDL DATA 21H;定义被除数单元
DIVDH DATA 20H
DIV_1 DATA 22H;定义除数单元
TEMP DATA 23H;定义余数单元
;---------------------------------------------------------------
DIVD:
CLR C
MOV A,DIV_1 ;判断除数是否为零置溢出标志
JNZ DIVD0 ;除数为零置溢出标志
SETB OV ;置溢出标志
SJMP DIVD_RET ;退出
DIVD0: MOV TEMP,#00H ;不为零,运算
MOV B,#16 ; 置循环次数
DIVD1: CLR C ;
MOV A,DIVDL ;进位位、余数、被除数单元
RLC A ;逐个左循环移位
MOV DIVDL,A ;
MOV A,DIVDH
RLC A
MOV DIVDH,A
MOV A,TEMP
RLC A
MOV TEMP,A
MOV F0,C ;保留进位位
CLR C
MOV A,TEMP
SUBB A,DIV_1 ;余数减除数
MOV R7,A
ANL C,/F0 ;是否够减
JC DIVD2 ;不够减,移下一位
MOV TEMP,R7 ;够减刷新余数单元
INC DIVDL ;商上一
DIVD2: DJNZ B,DIVD1
CLR OV
DIVD_RET:
RET
;***********************************************************
;==================================中断0响应,做时钟和产生PWM
TIME_0:PUSH ACC
PUSH B
PUSH PSW
MOV TL0,#0F3H
MOV TH0,#0D8H
INC DATEX_1
JNB SIGN_ZHAN,TIME_X1
INC JISHU
MOV A,JISHU
CJNE A,DATEX_2,TIME_X1
MOV JISHU,#00H
CPL OUT_PUT
TIME_X1:MOV A,DATEX_1
CJNE A,#64H,TIME_X
MOV DATEX_1,#00H
LCALL CLOCK
TIME_X: POP PSW
POP B
POP ACC
RETI
;=====================================时钟
CLOCK:
INC DATEX_3
INC DATEX_10
JNB SINGN_END,CLOCKE_6
INC ZHAN_TIME
MOV A,ZHAN_TIME
CJNE A,ZHAN_KONG,CLOCKE_6
MOV ZHAN_TIME,#00H
JNB SINGN_END,CLOCKE_6
SETB SIGN_ZHAN
CPL OUT_PUT
CLOCKE_6:MOV A,DATEX_10
CJNE A,#03H,CLOCK_2 ;;;???
MOV DATEX_10,#00H
LCALL IN_PUT ;;;;启动A/D转换
CLOCK_2:MOV A,DATEX_3
CJNE A,#3CH,CLOCK_1
MOV DATEX_3,#00H
INC DATEX_9
MOV A,DATEX_9
CJNE A,#64H,CLOCK_1
MOV DATEX_9,#0FFH
CLOCK_1:;LCALL LCM
CLR C
MOV A,COMPY_1
ADD A,#01H
MOV COMPY_1,A
JNC CLOCKP_3
INC COMPY_2
CLOCKP_3:JB SINGN_END,CLOCKP_4
MOV A,COMPY_1
CJNE A,EMPTY_1,CLOCKP_4
MOV A,COMPY_2
CJNE A,EMPTY_2,CLOCKP_4
SETB OUT_PUT ;;?????
SETB SINGN_END ;;????
CLOCKP_4: RET
;===============================A/D采集数据输入单片机子程序
IN_PUT:
MOV P0,#0FFH
SETB IN0_PUT
NOP
CLR IN0_PUT
JB IN1_PUT,$
SETB IN2_PUT
MOV A,P0 ;;;;/////?????????
CLR IN2_PUT
MOV B,#5
DIV AB
ADD A,#20
MOV DATEX_8,B
MOV B,#10
DIV AB
MOV DATEX_5,A
MOV DATEX_6,B
MOV A,DATEX_8
MOV B,#2
MUL AB
MOV DATEX_7,A
RET
;=========================================
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;键盘扫描子程序
SCAN:
MOV P0,#7FH
MOV A,P0
CJNE A,#7FH, KEY1
MOV P0,#0BFH
MOV A,P0
CJNE A,#0BFH, KEY5
MOV P0,#0DFH
MOV A,P0
CJNE A,#0DFH,KEY9
MOV P0,#0EFH
MOV A,P0
CJNE A,#0EFH,T_O
RET
T_O:LJMP KEY13
KEY1:CJNE A,#77H,KEY2
NOP
RET
KEY2:CJNE A,#7BH,KEY3
NOP
RET
KEY3:CJNE A,#7DH,KEY4
NOP
RET
KEY4:CJNE A,#7EH,MM
NOP
MM:RET
KEY5:CJNE A,#0B7H,KEY6 ;数字键
MOV R7,#00H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
LCALL DELAY1
RET
KEY6:CJNE A,#0BBH,KEY7
MOV R7,#01H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
LCALL DELAY1
RET
KEY7:CJNE A,#0BDH,KEY8
MOV R7,#02H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
LCALL DELAY1
RET
KEY8:CJNE A,#0BEH,KEY9
MOV R7,#03H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
LCALL DELAY1
RET
KEY9:CJNE A,#0D7H,KEY10
MOV R7,#04H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
LCALL DELAY1
RET
KEY10:CJNE A,#0DBH,KEY11
MOV R7,#05H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
LCALL DELAY1
RET
KEY11:CJNE A,#0DDH,KEY12
MOV R7,#06H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
LCALL DELAY1
RET
KEY12:CJNE A,#0DEH,KEY13
MOV R7,#07H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
LCALL DELAY1
RET
KEY13:CJNE A,#0E7H,KEY14
MOV R7,#08H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
LCALL DELAY1
RET
KEY14:CJNE A,#0EBH,KEY15
MOV R7,#09H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
LCALL DELAY1
RET
KEY15:CJNE A,#0EDH,KEY16 ;停止键
LCALL DELAY1
SETB SIGN_WEATHER
LCALL DELAY1
LCALL DELAY1
RET ;电机正转
KEY16:CJNE A,#0EEH,LL ;确认键
LCALL DELAY1
SETB SINGN_R
LCALL DELAY1
LCALL DELAY1
LL:RET
;;;;;;;;;;;;;
delay1:
MOV R5,#250
XX: MOV R6,#250
DJNZ R6,$
DJNZ R5, XX
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;;
;;重新分配地址 ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DATEY_2 EQU 38H ;分钟十位
DATEY_1 EQU 39H ;分钟个位
DATEY_4 EQU 3AH ;秒钟十位
DATEY_3 EQU 3BH ;秒钟个位
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;
;单字节十六进制整数转换成单字节BCD码整数
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HBCD: MOV B,#100
DIV AB
MOV A,#10
XCH A,B
DIV AB
SWAP A
ORL A,B
RET
;;:::::::::::
;;;;;;;;;;;;;;;;;;;;;;;;;;液晶子程序
LCM:
MOV A,DATEX_3
LCALL HBCD
MOV B,A
ANL A,#00001111B
MOV DATEY_3,A
MOV A,B
SWAP A
ANL A,#00001111B
MOV DATEY_4,A
;;;;;;;;;;;
MOV A,DATEX_9
LCALL HBCD
MOV B,A
ANL A,#00001111B
MOV DATEY_1,A
MOV A,B
SWAP A
ANL A,#00001111B
MOV DATEY_2,A
;;;;;;;;;;;;;;
MOV P1,#08DH
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,DATEY_3
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
MOV P1,#08CH
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,DATEY_4
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
MOV P1,#08AH
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,DATEY_1
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
MOV P1,#089H
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,DATEY_2
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
MOV P1,#0CDH
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,DATEX_7
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
MOV P1,#0CBH
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,DATEX_6
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
MOV P1,#0CAH
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,DATEX_5
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
MOV P1,#0C3H
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,ST_2
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
MOV P1,#0C4H
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,ST_1
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
RET
DADE:SETB P2.2
CLR P2.3
SETB P2.4 ;给下降沿
CPL P2.4
ACALL DALAY1
RET
Ming_Lin: CLR P2.2 ;RS=0
CLR P2.3 ;R/W=0
SETB P2.4
;给下降沿
CPL P2.4
ACALL DALAY
RET
DALAY: MOV R5,#10H
ALJSDH:MOV R6,#123
DJNZ R6,$
DJNZ R5,ALJSDH
RET
DALAY1:MOV R7,#25
DJNZ R7,$
RET
Ming_Lin_1: CLR P2.2 ;RS=0
CLR P2.3 ;R/W=0
SETB P2.4
ACALL DALAY
;给下降沿
CPL P2.4
ACALL DALAY
RET
TABLE:DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
TABLE_23:DB 00H,00H,01H,01H,02H,02H,03H,03H,03H,04H,04H,05H,05H, 06H ,06H,07H,07H,07H,08H,08H,09H,09H,0AH
TABLE_3: DB 00H,03H,07H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -