51单片机汇编语言关于nop指令的循环?

这个nop指令我明白了,但是我有一个新问题,就是如果我要100个机器周期,我如何循环用nop呢

img

在51单片机里,你可以通过使用循环语句来循环NOP指令,以实现100个机器周期的操作:

Loop:
MOV R0,#100 ;设置R0的值为100,这样会在下面的循环里生成100个机器周期
MOV R1,#0
Loop1:
NOP ;NOP指令
INC R1 ;使R1的值自增1
CJNE R1,R0,Loop1 ;如果R1的值不等于R0的值,就循环回Loop1
SJMP Loop ;跳转到Loop标签处,重新开始循环

这会在51单片机上运行100个机器周期。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7510814
  • 你也可以参考下这篇文章:利用汇编编写51单片机串口通信程序,实现对于按键次数的显示
  • 除此之外, 这篇博客: 课设系列:51单片机制作智能时钟闹钟中的 串口通信程序 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    得先说一下串口相关寄存器的基本知识(参考普中开发攻略):
    (1)串口控制寄存器 SCO
    在这里插入图片描述
    SM0 和 SM1 为工作方式选择:
    在这里插入图片描述
    SM2(暂时咱们用不到):多机通信控制位,主要用于方式 2 和方式 3。当 SM2=1 时可以利用收到
    的 RB8 来控制是否激活 RI(RB8=0 时不激活 RI,收到的信息丢弃;RB8=1 时收
    到的数据进入 SBUF,并激活 RI,进而在中断服务中将数据从 SBUF 读走)。当
    SM2=0 时,不论收到的 RB8 为 0 和 1,均可以使收到的数据进入 SBUF,并激活 RI
    (即此时 RB8 不具有控制 RI 激活的功能)。通过控制 SM2,可以实现多机通信)
    REN:允许串行接收位。由软件置 REN=1,则启动串行口接收数据;若软件置
    REN=0,则禁止接收。
    TB8:在方式 2 或方式 3 中,是发送数据的第 9 位,可以用软件规定其作用。
    可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位。
    在方式 0 和方式 1 中,该位未用到。
    RB8:在方式 2 或方式 3 中,是接收到数据的第 9 位,作为奇偶校验位或地
    址帧/数据帧的标志位。在方式 1 时,若 SM2=0,则 RB8 是接收到的停止位。
    TI:发送中断标志位。在方式 0 时,当串行发送第 8 位数据结束时,或在其
    它方式,串行发送停止位的开始时,由内部硬件使 TI 置 1,向 CPU 发中断申请。
    在中断服务程序中,必须用软件将其清 0,取消此中断申请。
    RI:接收中断标志位。在方式 0 时,当串行接收第 8 位数据结束时,或在其
    它方式,串行接收停止位的中间时,由内部硬件使 RI 置 1,向 CPU 发中断申请。
    也必须在中断服务程序中,用软件将其清 0,取消此中断申请。
    如何单片机单方面向PC端发送字符串:
    参考以下代码:

    u8 Buf[]="TIME IS UP!\n";//串口发送的字符串。
    
    /*开启定时器1*/
    void UART_init(void)
    {
        SCON = 0x50; //串口方式1
     
        TMOD|= 0x20; // 定时器使用方式2自动重载
        TH1 = 0xFD; //9600波特率对应的预设数,定时器方式2下,TH1=TL1
        TL1 = 0xFD;
     
        TR1 = 1;//开启定时器,开始产生波特率
    }
    
    void UART_send_byte(u8 dat) //仅是发送一个字符
    {
    	SBUF = dat;       //把数据放到SBUF中
    	while (TI == 0);//未发送完毕就等待
    	TI=0;    //发送完毕后,要把TI重新置0
    }
    
    void UART_send_string(u8 *buf)//发送一个字符串
    {
    	while (*buf != '\0')
    	{
    		UART_send_byte(*buf++);
    	}
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^