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

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

汇编指令分析

在这里插入图片描述
经查阅可知,单条指令“mov R6 #250”和“DJNZ R6,D2”的指令分别为一个周期和两个周期,我们可以得出DJNZ为双周期指令。则它们对应的时钟周期us值分别为1us与2us。

DELAY:MOV R7,#250:执行一次,1us。无语句跳转给它。
D1:MOV R6,#250:执行250次。250us。
D2: DJNZ R6,D2:执行了250250=62500次,625002=125000。
DJNZ R7,D1:250*2=500次。
即共1+250+125000+500=125751次。换算约为0.13秒。说明0.13秒左右才变化一次亮灭状态。

LED灯流水灯间隔周期为1s

经过学习之后可得知,若将闪烁间隔周期改为1秒,汇编程序如下:在这里插入图片描述
c语言的程序代码如下:
原理就是设计一个函数,a就是参数,指想延时的毫秒数。函数本身就是迭代延时1毫秒时的代码,延时多少秒就将a设置为多少。此处应将a设置为1000,即1秒。
` #include <reg51.h>
#include <intrins.h>

void delay_ms(unsigned int a)
{
	unsigned char i,j;
	while(a)
	{
		
	i=2;
	j=239;
	do{
		while(--j);
	}while(--i);
	a=a-1;}
}
void main(void)
{
	while(1)
	{
		P0=0xfe;
		delay_ms(1000);
		P0=0xfd;
		delay_ms(1000);
		P0=0xfb;
		delay_ms(1000);
		P0=0xf7;
		delay_ms(1000);
		P0=0xef;
		delay_ms(1000);
		P0=0xdf;
		delay_ms(1000);
		P0=0xbf;
		delay_ms(1000);
		P0=0x7f;
		delay_ms(1000);
	}
}

`

protues仿真结果在这里插入图片描述
edsim51仿真结果

在这里插入图片描述

普中开发板实验结果

在这里插入图片描述

查找平方数


      ORG 0000H       			;程序的起始地址
      SQUARE_TABLE: DB 0, 1, 4, 9, 16, 25, 36  ;建立存储0—6平方数的数表
0007|     MOV DPTR, #SQUARE_TABLE 	; 设置数据指针来指向数表
000A|     MOV R1, #4             ;   将数字4放入R1
000C|     CALL SQUARE_FUNCTION   ; 调用所设置的函数
      SQUARE_FUNCTION:  
000E|     MOV A, R1        	; 将所求平方的数放入R1
000F|     MOVC A, @A+DPTR 	; 查表
0010|     MOV R2, A        	;  将查找结果移至R2
0011|     RET              	;  返回结果
        
      END     ;    

edsim51仿真结果

在这里插入图片描述
可见仿真结果R2处为0x10,即为16进制的16.

心得体会与总结

硬件方面,对普中开发板的使用还不够得心应手,导致烧录的时候出了很多岔子,还需更多时间多家熟悉。
代码学习方面,汇编语言的使用我个人感觉比c语言简单,但是指令很多,需要多使用,多记忆才能记住,而c语言我认为相对好懂,但是使用没有汇编语言方便,二者各有所长。还需学习的地方有很多。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值