迪文科技论坛

 找回密码
 立即注册
搜索
查看: 619|回复: 4

【提问】请教下这个OS程序是如何实现倒计时1分钟,计时...

[复制链接]

3

主题

22

回帖

948

积分

高级会员

Rank: 4

积分
948
发表于 2024-5-8 15:18:14 | 显示全部楼层 |阅读模式
每段代码注释下,汇编完全不懂。

; DWIN OS

  LDWR R0,0010H
  MOVXR R190,1,1
  IJNE R190,0,MMM
  IJNE R191,0,MMM
  GOTO GOEND
  MMM:
  LDWR R0,5010H
  MOVXR R210,1,1
  IJNE R210,0,cmp2
  IJNE R211,0,cmp2
  GOTO GOEND
  cmp2:
  INC R200,1,1
  IJNE R200,01H,GOEND
  IJNE R201,2DH,GOEND
  LDWR R200,0
  DEC R210,1,1
  LDWR R0,5010H
  MOVXR R210,0,1
  LDADR SEND_DAT2
  MOVC R12,7
  MOV R0,R16,2
  MOV R210,R19,2
  COMTXI 0,R12,9
  
  GOEND:
  ;CALL   Lamp_control
  END
  
Lamp_control:
       LDWR   R0,0010H
       MOVXR  R10,1,1
       IJNE   R11,0,Contronl1
       LDBR   R20,0,10
       LDWR   R0,1000H
       MOVXR  R20,0,5      
       RET
      
Contronl1:      
       IJNE   R11,1,Contronl2
       LDBR   R20,0,10
       LDBR   R21,1,1
       LDWR   R0,0100H
       MOVXR  R20,0,5
       RET
      
Contronl2:
         
  RET
  
  
  
  
  
  
  SEND_DAT:
   DB 5AH,A5H,06H,83H,50H,05H,01H
  SEND_DAT2:
   DB 5AH,A5H,06H,83H,50H,00H,01H
回复

使用道具 举报

2

主题

680

回帖

1万

积分

论坛元老

Rank: 8Rank: 8

积分
15429
发表于 2024-5-8 16:31:48 | 显示全部楼层
您好,以下注释来源于AI【chatPDF】


; DWIN OS

  LDWR R0, 0x0010   ; 将R0:R1 指定 DGUS变量地址 0X0010
  MOVXR R190, 1, 1   ; 将DGUS变量地址0x0010中的数据传送到寄存器R190:R191中
  IJNE R190, 0, MMM   ; 如果R190不等于0,则跳转到MMM
  IJNE R191, 0, MMM   ; 如果R191不等于0,则跳转到MMM
  GOTO GOEND   ; 无条件跳转到GOEND
  MMM:
  LDWR R0, 0x5010   ; 将R0:R1 指定 DGUS变量地址 0X5010
  MOVXR R210, 1, 1   ; 将DGUS变量地址0x5010中的数据传送到寄存器R210:R211中
  IJNE R210, 0, cmp2   ; 如果R210不等于0,则跳转到cmp2
  IJNE R211, 0, cmp2   ; 如果R211不等于0,则跳转到cmp2
  GOTO GOEND   ; 无条件跳转到GOEND
  cmp2:
  INC R200, 1, 1   ; R200加1
  IJNE R200, 01H, GOEND   ; 如果R200不等于01H,则跳转到GOEND
  IJNE R201, 2DH, GOEND   ; 如果R201不等于2DH,则跳转到GOEND
  LDWR R200, 0   ; 将R200的值加载到寄存器R0中
  DEC R210, 1, 1   ; R210减1
  LDWR R0, 0x5010   ; 将R0:R1 指定 DGUS变量地址 0X5010
  MOVXR R210, 0, 1   ; 将寄存器R0中的数据传送到DGUS变量地址0x5010中
  LDADR SEND_DAT2   ; 将SEND_DAT2的地址加载到寄存器R0中
  MOVC R12, 7   ; 将7传送到寄存器R12中
  MOV R0, R16, 2   ; 将寄存器R0中的数据传送到寄存器R16中
  MOV R210, R19, 2   ; 将寄存器R210中的数据传送到寄存器R19中
  COMTXI 0, R12, 9   ; 通过串口发送数据

  GOEND:
  ;CALL Lamp_control   ; 调用Lamp_control子程序
  END   ; 程序结束

Lamp_control:
       LDWR R0, 0x0010   ; 将R0:R1 指定 DGUS变量地址 0X0010
       MOVXR R10, 1, 1   ; 将DGUS变量地址0x0010中的数据传送到寄存器R10:R11中
       IJNE R11, 0, Contronl1   ; 如果R11不等于0,则跳转到Contronl1
       LDBR R20, 0, 10   ; 将立即数10加载到寄存器R20中
       LDWR R0, 0x1000   ; 将R0:R1 指定 DGUS变量地址 0X1000
       MOVXR R20, 0, 5   ; 将寄存器R20中的数据传送到DGUS变量地址0x1000中
       RET   ; 返回

Contronl1:      
       IJNE R11, 1, Contronl2   ; 如果R11不等于1,则跳转到Contronl2
       LDBR R20, 0, 10   ; 将立即数10加载到寄存器R20中
       LDBR R21, 1, 1   ; 将立即数1加载到寄存器R21中
       LDWR R0, 0x0100   ; 将R0:R1 指定 DGUS变量地址 0X0100
       MOVXR R20, 0, 5   ; 将寄存器R20中的数据传送到DGUS变量地址0x0100中
       RET   ; 返回

Contronl2:
         
  RET   ; 返回

SEND_DAT:
   DB 5AH, A5H, 06H, 83H, 50H, 05H, 01H   ; 数据
SEND_DAT2:
   DB 5AH, A5H, 06H, 83H, 50H, 00H, 01H   ; 数据

回复

使用道具 举报

3

主题

22

回帖

948

积分

高级会员

Rank: 4

积分
948
 楼主| 发表于 2024-5-9 10:03:46 | 显示全部楼层
Bensenl 发表于 2024-5-8 16:31
您好,以下注释来源于AI【chatPDF】

谢谢你的回复    但还是不理解这个倒计时是如何实现的,又是怎么控制暂停的
回复

使用道具 举报

2

主题

680

回帖

1万

积分

论坛元老

Rank: 8Rank: 8

积分
15429
发表于 2024-5-14 10:14:03 | 显示全部楼层
本帖最后由 Bensenl 于 2024-5-14 10:15 编辑
cqqdwin 发表于 2024-5-9 10:03
谢谢你的回复    但还是不理解这个倒计时是如何实现的,又是怎么控制暂停的 ...
来源于AI【ChatGPT】

1、加载初始值:
        将R0:R1 指定 DGUS变量地址 0X0010。
        将DGUS变量地址0x0010中的数据传送到寄存器R190:R191中。

2、条件跳转和控制流程:
        检查寄存器R190和R191的值,如果不为0,跳转到MMM。
        在MMM标签处,加载新的值,并检查寄存器R210和R211。
        如果R210和R211不为0,则跳转到cmp2。
        在cmp2标签处,增加寄存器R200的值,并进行比较,决定是否跳转到GOEND。

3、倒计时操作:
        将寄存器R200的值清零。
        将寄存器R210的值减1。
        并将R210的数据写回DGUS变量地址。
        设置发送的数据地址和长度,通过COM口发送数据。

4、暂停控制:
        暂停控制逻辑在Lamp_control子程序中实现,通过DGUS变量的值控制:
        (1)读取控制变量:
                将R0:R1 指定 DGUS变量地址 0X0100。
                将DGUS变量地址0x0010的数据传送寄存器R10、R11。
        (2)条件判断和控制:
                判断寄存器R11的值,根据不同的值(例如0或1),分别执行Contronl1或Contronl2。
                在Contronl1和Contronl2中,根据读取的值和具体逻辑进行操作,并最终返回。
回复

使用道具 举报

3

主题

22

回帖

948

积分

高级会员

Rank: 4

积分
948
 楼主| 发表于 2024-5-23 08:48:54 | 显示全部楼层
Bensenl 发表于 2024-5-14 10:14
来源于AI【ChatGPT】

1、加载初始值:

谢谢你的回复!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2026-4-15 06:10 , Processed in 0.036909 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表