汇编程序与周期性任务设计

一、请查阅汇编指令 “MOV R6,#250”和“DJNZ R6,D2”的指令周期数,计算其对应的时钟周期 us值;然后计算 Delay函数的总的循环次数和对应的时钟周期总数us,说明这个LED灯大约每隔多少毫秒(ms)或秒(s)才变化一次亮灭状态;

MOV指令的时钟周期为:1 * 1=1 us,DJNZ指令的时钟周期为:2 * 1=2us

DELAY函数中总的循环次数为:250x250=62500

MOV=251次,DJNZ=62750次,进行一次DELAY所需的机器周期个数为251 + 62750x2=125751,时钟周期个数为125751x12=1509012

经过约125751x1=125751us≈125ms发生一次亮灭转换

二、如果要求实现准确的LED 每隔1s亮灭的周期性变化,上面程序如何修改?请给出完整代码。请在edsim51中进行实践练习。

修改如下:

LOOP:SETB 90H

      LCALL DELAY

      CLR 90H    

      LCALL DELAY

      AJMP LOOP  

DELAY: MOV R5,#25

D1:    MOV R6,#100

D2:   MOV R7,#200

D3:    DJNZ R7,D3

      DJNZ R6,D2

       DJNZ R5,D1

       RET  

       END

结果:
![[Pasted image 20240402230419.png]]

三、请参考网上资料(如B站哈工大单片机课程)完成一个查找平方数的汇编程序。对程序进行学习和理解。在Edsim51、proteus中进行验证。

查找平方数的汇编程序:

ORG 000H
LJMP START
ORG  80H
START:
NOP
NOP
MOV SP,#60H
MOV DPTR,#0300H
MOV A,#4
MOVC A,@A+DPTR
MOV 40H,A
LOOP:
SJMP LOOP
ORG 300H
DB 00H,01H,04H,09,10H,19H,24H,31H,40H,51H,64H,79H,90H,0C4H
END

验证结果:
![[Pasted image 20240402231029.png]]

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值