|
楼主 |
发表于 2020-12-17 19:25:59
|
显示全部楼层
附件加不上,还是贴出来代码吧
- ; DWIN OS
- ;单位时间标志寄存器R250
- CALL BOUT_Mark ;开始和停止按键是否按下的标志位 R253=1开始, =0暂停
- CALL One_S_Mark ;单位S时间随RTC是否变化的标志位 R250=1
- CALL MAIN
- END
- ;======================================================
- ;-------------------------------------------
- BOUT_Mark: ;R253=1开始 或0暂停
- LDWR R0,0004H
- MOVXR R10,1,1
- IJNE R11,1,B1=0
- LDBR R253,1,1
-
- B1=0: IJNE R11,0,B_M_R
- LDBR R253,0,1
- B_M_R:
- RET
- ;-------------------------------------------
- One_S_Mark:
- MOVDR 0x20,R10,7 ;秒
- CJNE R16,R245,R><R245
- GOTO COM_S
- R><R245: MOV R16,R245,1
- LDBR R250,1,1 ;R250=1
- COM_S: RET
- ;------------------------------------------
- MAIN: IJNE R253,1,GEND ;如果按键按了,会开始倒计时
- ;
- LDWR R0,0X6FFF ;指定DGUS变量地址
- LDWR R10,0x0000;将值写为0保存到R10中
- MOVXR R10, 0, 1;把R10:R11 数据传送到地址为0X6FFF的DGUS变量中。
- ;
- LDBR R254,0,1
- IJNE R250,1,GEND ;单位s时间是否变化
- LDBR R250,0,1 ;R250=0
-
- LDWR R0,0003H
- MOVXR R10,1,1
- IJNE R11,0,STAR-S ;秒如果为0,跳到分检测是否为0如果不为0,开始秒的倒计时
- GOTO STAR-M
-
- STAR-S:
- LDWR R0,0003H
- MOVXR R10,1,1
- DEC R11,0,1
- MOVXR R10,0,1
- IJNE R11,0,GEND ;当秒不为0,这一秒倒计时程序结束,如果为0,检测分是否为0
-
- STAR-M: LDWR R0,0002H
- MOVXR R12,1,1
- IJNE R13,0,M-1 ;分如果为0,会检测时是否为0,分如果不为0,跳到分减少1
- GOTO STAR-H
- STAR-H: LDWR R0,0001H
- MOVXR R14,1,1
- IJNE R15,0,H-1 ;时如果为0,结束,如果不为0,跳到时减少1
- GOTO STAR0
- H-1: LDWR R0,0001H ;时减少1,分变成60
- MOVXR R14,1,1
- DEC R14,1,1
- MOVXR R14,0,1
- LDWR R0,0002H
- LDWR R12,60
- MOVXR R12,0,1
- GOTO GEND
-
- M-1: LDWR R0,0002H ;分减少1,秒变成59
- MOVXR R12,1,1
- DEC R12,1,1
- MOVXR R12,0,1
- LDWR R0,0003H
- LDWR R10,59
- MOVXR R10,0,1
- GOTO GEND
- STAR0: CALL SendDataToCOM
- GEND: RET
- ;-----------------------------------------
- Alarm:
- IJNE R254,0,Alarm_R;判断R254的值,为0则顺序执行,否则跳转至Alarm_R
- LDBR R254,1,1
- LDBR R10,20,1
- MOVRD R10,2,1 ;将长度为1的第二个参数(就是2)放进R10中(R10控制蜂鸣器鸣叫),随后蜂鸣器鸣叫
- Alarm_R: RET
- ;-----------------------------------------
- SendDataToCOM: ;SendDataToCOM:将设定好的数据发送到串口中,循环发送,这时需要单片机发送一个命令将这个循环切断。
- LDWR R0,0X6FFF ; R0:R1 指定DGUS变量地址0X6FFF
- MOVXR R10 ,1, 1;把DGUS 变量地址0X6FFF 中的数据读到R10:R11
-
- IJNE R11,2,SendDataToCOM1;如果R11的值为2,表示已经有数据传送到串口,则立即结束,否则跳转
- END
- SendDataToCOM1:
- LDBR R100,0,9
- LDWR R100,5AA5H ;5A A5 06 83 00 0E 01 00 00
- LDWR R102,0683H
- LDWR R104,000EH
- LDWR R106,0100H
- LDBR R108,00H,1
- COMTXI 0,R100,9
- ;将变量地址中的值改为2,指定的存储变量的地址是:0X6FFF
- LDWR R0,0X6FFF ;指定DGUS变量地址
- LDWR R10,0x0002;将值写为2保存到R10中
- MOVXR R10, 0, 1;把R10:R11 数据传送到地址为0X6FFF的DGUS变量中。
- ;将地址为0x0004的按钮的值修改为未触发状态
- LDWR R0,0X0004 ;指定DGUS变量地址
- LDWR R10,0x0000;将值写为2保存到R10中
- MOVXR R10, 0, 1;把R10:R11 数据传送到地址为0X6FFF的DGUS变量中。
- RET
-
复制代码 |
|