📄 dx61030j.asm
字号:
AJMP fjia_21
fjia_20: MOV A, 40h
CJNE A, #0bH, fjia_20_1
MOV A, 3aH ;时间
NOP
ADD A, #01H
DA A
MOV 3aH, A
AJMP fjia_21
fjia_20_1: MOV A, 40h
CJNE A, #0cH, fjia_21
MOV A, 3cH ;时间
NOP
ADD A, #01H
DA A
MOV 3cH, A
;AJMP fjia_21
fjia_21:
nop
ret
;**************************************************
;分减键处理
fenjian: nop
MOV A, 40H
CJNE A, #00H, JIANF0
;手动下处理
;******
JIANF0:
;jnb 01h, JIANF12
MOV A, 40H
CJNE A, #01H, JIANF1
MOV R7, 24H
LCALL JIANY
MOV 24H, R7
;JIANF12:
LJMP JIANF11
JIANF1: MOV A, 40H
CJNE A, #02H, JIANF2
MOV R7, 26H
LCALL JIANY
MOV 26H, R7
LJMP JIANF11
JIANF2: MOV A, 40H
CJNE A, #03H, JIANF3
MOV R7, 2AH
LCALL JIANY
MOV 2AH, R7
LJMP JIANF11
JIANF3: MOV A, 40H
CJNE A, #04H, JIANF4
MOV R7, 2CH
LCALL JIANY
MOV 2CH, R7
LJMP JIANF11
JIANF4: MOV A, 40H
CJNE A, #05H, JIANF5
MOV R7, 2EH
LCALL JIANY
MOV 2EH, R7
LJMP JIANF11
JIANF5: MOV A, 40H
CJNE A, #06H, JIANF6
MOV R7, 30H
LCALL JIANY
MOV 30H, R7
LJMP JIANF11
JIANF6: MOV A, 40H
CJNE A, #07H, JIANF7
MOV R7, 32H
LCALL JIANY
MOV 32H, R7
LJMP JIANF11
JIANF7: MOV A, 40H
CJNE A, #08H, JIANF8
MOV R7, 34H
LCALL JIANY
MOV 34H, R7
LJMP JIANF11
JIANF8: MOV A, 40H
CJNE A, #09H, JIANF9
MOV R7, 36H
LCALL JIANY
MOV 36H, R7
LJMP JIANF11
JIANF9: MOV A, 40H
CJNE A, #0aH, JIANF10
MOV R7, 38H
LCALL JIANY
MOV 38H, R7
LJMP JIANF11
JIANF10: MOV A, 40H
CJNE A, #0bH, JIANF10_1
MOV R7, 3AH
LCALL JIANY
MOV 3AH, R7
AJMP JIANF11
JIANF10_1: MOV A, 40H
CJNE A, #0cH, JIANF11
MOV R7, 3cH
LCALL JIANY
MOV 3cH, R7
;AJMP JIANF11
JIANF11: nop
ret
;******************************************************************
;数据监控
shujujk:nop
mov a,24h
cjne a,#60h,sjjk1
mov 24h,#00h
sjjk1: mov a,25h
cjne a,#24h,sjjk2
mov 25h,#00h
;***
sjjk2: mov a,2ah
cjne a,#60h,sjjk3
mov 25h,#00h
sjjk3: mov a,2bh
cjne a,#24h,sjjk4
mov 2bh,#00h
;***
sjjk4: mov a,2ch
cjne a,#60h,sjjk5
mov 2ch,#00h
sjjk5: mov a,2dh
cjne a,#24h,sjjk6
mov 2dh,#00h
;***
sjjk6: mov a,2eh
cjne a,#60h,sjjk7
mov 2eh,#00h
sjjk7: mov a,2fh
cjne a,#24h,sjjk8
mov 2fh,#00h
;***
sjjk8: mov a,30h
cjne a,#60h,sjjk9
mov 30h,#00h
sjjk9: mov a,31h
cjne a,#24h,sjjka
mov 31h,#00h
;***
sjjka: mov a,32h
cjne a,#60h,sjjkb
mov 32h,#00h
sjjkb: mov a,33h
cjne a,#24h,sjjkc
mov 33h,#00h
;***
sjjkc: mov a,34h
cjne a,#60h,sjjkd
mov 34h,#00h
sjjkd: mov a,35h
cjne a,#24h,sjjke
mov 35h,#00h
;***
sjjke: mov a,36h
cjne a,#60h,sjjkf
mov 36h,#00h
sjjkf: mov a,37h
cjne a,#24h,sjjk10
mov 37h,#00h
;***
sjjk10: mov a,38h
cjne a,#60h,sjjk11
mov 38h,#00h
sjjk11: mov a,39h
cjne a,#24h,sjjk12
mov 39h,#00h
;***
sjjk12: mov a,3ah
cjne a,#60h,sjjk13
mov 3ah,#00h
sjjk13: mov a,3bh
cjne a,#60h,sjjk14
mov 3bh,#00h
;***
sjjk14: nop
ret
;*********************************************
;画面移动判断
hmydpd:nop
jnb 11h,exthm ;电机运行后才执行此程序
hmloop:lcall DELALL ;调用长延迟程序
jb shan,chongq ;检测到光标信号-重起
jb xia, chongq ;检测到光标信号-重起
jb tin, chongq ;检测到光标信号-重起
clr 11h ;电机成功启动清标志
sjmp exthm
chongq:setb zang ;暂停电机
lcall DELALL ;调用长延迟程序
lcall DELALL ;调用长延迟程序
clr zang ;启动电机
lcall DELALL ;调用长延迟程序
sjmp hmloop
exthm: nop
ret
;*********************************
;根据大时间程序处理后的标志来开总开和灯开
zonden: nop
jnb 0dh, zk1 ;总开1标志(大时间比较)
clr zong ;打开总开指示灯
sjmp gbzx ;转入光标执行,控制电机
zk1: jnb 0fh, zk2 ;总开2标志(大时间比较)
clr zong ;打开总开指示灯
sjmp gbzx ;转入光标执行,控制电机
zk2: setb zong ;关闭总开指示
;*********
gbzx: nop
;*********
jnb 0ch, zd1 ;总开1标志(大时间比较)
clr deng ;打开总开指示灯
sjmp gbzd ;转入光标执行,控制电机
zd1: jnb 0eh, zd2 ;总开2标志(大时间比较)
clr deng ;打开总开指示灯
sjmp gbzd ;转入光标执行,控制电机
zd2: setb deng ;关闭总开指示
;*********
gbzd: nop
ret
;*************************************
;检测光标,并执行程序
gbzhix: jb zang, x3 ;电机运行时检测光标
NOP ;上光标
jnb shan, x1
setb zang ;停止电机
lcall DELALL ;调用长延迟程序
lcall DELALL ;调用长延迟程序
lcall DELALL ;调用长延迟程序
clr diao ;确定方向
mov 3ah, #00h ;展示时间清零
mov 3bh, #00h ;展示时间清零
mov 60h, #00h ;清除单画超时积存器
mov 61h, #00h ;清除严重超时积存器
clr 01h ;清除单画超时标志
clr 02h ;清除严重超时标志(强制停机标志)
mov 48h, #0f0h ;电机向上运行
acall baocunsx ;保存上下信息
x1: nop ;下光标
jnb xia, x2
setb zang ;停止电机
lcall DELALL ;调用长延迟程序
lcall DELALL ;调用长延迟程序
lcall DELALL ;调用长延迟程序
setb diao ;确定方向
mov 3ah, #00h ;展示时间清零
mov 3bh, #00h ;展示时间清零
mov 60h, #00h ;清除单画超时积存器
mov 61h, #00h ;清除严重超时积存器
clr 01h ;清除单画超时标志
clr 02h ;清除严重超时标志(强制停机标志)
mov 48h, #0fh ;电机向下运行
acall baocunsx ;保存上下信息
x2: nop ;暂停光标
jnb tin, x3
setb zang ;停止电机
mov 3ah, #00h ;展示时间清零
mov 3bh, #00h ;展示时间清零
mov 60h, #00h ;清除单画超时积存器
mov 61h, #00h ;清除严重超时积存器
clr 01h ;清除单画超时标志
clr 02h ;清除严重超时标志(强制停机标志)
x3: nop
RET
;**********************************************
;小时间比较程序;38h__3ah///39h__3bh
bijiaox: jnb zang, exbjx ;为0,电机在运行不比较
;(电机启动识别光标时应停止此程序)!!!!!!!!!
nop
mov a, 38h
xrl a, 3ah
jnz bjx1 ;两数字不等->acc不为0 转
nop ;两数字等->acc为0
mov a, 39h
xrl a, 3bh
jnz bjx1 ;两数字不等->acc不为0 转
;
acall qddj ;启动电机
bjx1: nop
clr cy ;为了程序的稳定,可在此加比较大小程序!
mov a, 39h
cjne a, 3bh, bjx2
sjmp bjx3 ;时相等,继续比较
bjx2: jnc exbjx ;时没到,退出
;
acall qddj ;启动电机
sjmp exbjx ;exit
bjx3: clr cy
mov a, 38h
cjne a, 3ah, bjx4
;
acall qddj ;启动电机
sjmp exbjx ;exit
bjx4: jnc exbjx ;exit
;
acall qddj ;启动电机
exbjx: nop
;电机启动后根据需要延迟051105
ret
;*********启动电机,延迟
qddj: nop
clr zang ;启动电机 :!!!!!
nop
cpl wdt ;为喂狗
lcall DELALL ;调用长延迟程序
;
cpl wdt ;为喂狗
lcall DELALL ;调用长延迟程序
cpl wdt ;为喂狗
lcall DELALL ;调用长延迟程序
cpl wdt ;为喂狗
;lcall DELALL ;调用长延迟程序
;cpl wdt ;为喂狗
;lcall DELALL ;调用长延迟程序
;nop
nop
ret
;*********************************************
;读秒跳程序,画面展示寄存器记数,
miaojs: nop
mov a, 24h ;秒地址
xrl a, 2fh ;与上次秒比较
jz done ;相等推出
;**
;lcall banding ;电机上下即时存储
jnb zang, bbj ;p1.6为0,电机在运行不比较
nop
;在大时间之外识别到软超,电机运行(p1.6为1)
;不比较大时间,导致大时间到后总开不开。
lcall bijiaod ;大时间比较 ;大时间比较
;
bbj: ;lcall djyxjk ;电机连续运行时间监控 ;电机启动计时,30秒停电机
nop ;并设置标志16h_不执行小时间比较 0702
;****************************************************************
;原来采用时间延迟释放光标改为遇到白释放光标!!
nop
jb zang, mjs1 ;电机不运行退出 ;电机停止转
inc 49h
mov a, 49h
cjne a, #03h, mjs1
setb 15h ;启动两秒再推程序
mov 49h, #00h
;*****************************************************************
mjs1: mov a, 3ah ;加展示计数
add a, #01h
da a
mov 3ah, a
cjne a, #60h, done
mov 3ah, #00h ;
mov a, 3bh ;
add a, #01h
da a
mov 3bh, a ;
cjne a, #60h, done
mov 3bh, #00h
done: nop
mov a, 24h
mov 2fh, a ;转存秒数据
ret
;**************************************
;电机上下与标志绑定,电机上下运行即使存储
;由秒跳调用
baocunsx: nop
banding: nop
MOV SLA, #0d0h
MOV SUBA, #20H ;指定存储地址26H电机正反标志
MOV NUMBYTE, #1 ;写入一字节数据
jnb diao, banding1
mov a, #0fh
sjmp banding2
banding1: nop
mov a, #0f0h
banding2: nop
MOV MTD, a ;写入的数据装入MTD缓冲区
LCALL IWRNBYTE ;保存调头状态-->DS1307
NOP
;;;;
lcall DELEY20MS
lcall DELEY20MS
ret
;**************************************************
;电机运行监控 61h(s) 16h(b) 0702
;电机连续运行计时,超过30秒强制停止
djyxjk: nop ;电机启动计时,30秒停电机
nop
ret
;***********************************************
;数据恢复
shujuhuifu: nop
MOV SLA, #0d0h
MOV SUBA, #08H
MOV NUMBYTE, #08
LCALL IRDNBYTE
;zhuanyi
mov a, 50h
mov 27h, a
mov a, 51h
mov 28h, a
mov a, 52h
mov 29h, a
mov a, 53h
mov 2ah, a
mov a, 54h
mov 2bh, a
mov a, 55h
mov 2ch, a
mov a, 56h
mov 2dh, a
mov a, 57h
mov 2eh, a
;
MOV SLA, #0d0h
MOV SUBA, #10H
MOV NUMBYTE, #08
LCALL IRDNBYTE
;zhuanyi
mov a, 50h
mov 30h, a
mov a, 51h
mov 31h, a
mov a, 52h
mov 32h, a
mov a, 53h
mov 33h, a
mov a, 54h
mov 34h, a
mov a, 55h
mov 35h, a
mov a, 56h
mov 36h, a
mov a, 57h
mov 37h, a
;
MOV SLA, #0d0h
MOV SUBA, #18H
MOV NUMBYTE, #08
LCALL IRDNBYTE
mov a, 50h
mov 38h, a
mov a, 51h
mov 39h, a
;
MOV SLA, #0d0h
MOV SUBA, #20H ;上下存储
MOV NUMBYTE, #08
LCALL IRDNBYTE
mov a, 50h
mov 48h, a ;48h上下标志寄存器
nop
ret
;提取时间
;***************************
sjtq: nop
mov a, 50h
mov 24h, a
clr cy
rlc a ;循环左移
jnc sjtqjx
;初始化控制寄存器
MOV SLA, #0d0h
MOV SUBA, #07H ;指定存储地址10H
MOV NUMBYTE, #1 ;写入一字节数据
MOV MTD, #90H ;写入的数据装入MTD缓冲区
LCALL IWRNBYTE
;初始化秒寄存器,启动ds1307
MOV SLA, #0d0h
MOV SUBA, #00H ;指定存储地址10H
MOV NUMBYTE, #1 ;写入一字节数据
MOV MTD, #00H ;写入的数据装入MTD缓冲区
LCALL IWRNBYTE
sjtqjx: mov a, 51h
mov 25h, a
mov a, 52h
mov 26h, a
ret
;**********************************************
;大时间比较程序 ;27h ;2bh ;30h ;34h(电机启动识别光标时应停止此程序)
;28h ;2ch ;31h ;35h
;29h ;2dh ;32h ;36h
;2ah ;2eh ;33h ;37h
;deng1/ji1/ deng2/ ji2
;0ch /0dh/ 0eh / 0fh
bijiaod: nop
bjdzc: nop
;deng1时间段判断
mov a, 27h
mov 4ah, a
mov a, 28h
mov 4bh, a ;转移数据
sjmp bjd0 ;启动提前一分/05/05/07
;
bjdloop1: nop
mov a, 4ah
add a, #01h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -