硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1584|回复: 2
收起左侧

请教一个51单片机指令或者延时的问题

[复制链接]

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2020-11-3 14:46:38 | 显示全部楼层 |阅读模式
本帖最后由 给你一把枪 于 2020-11-3 14:52 编辑

MCS-51 的 1T 指令系统的单片机,系统主频设置 8M

主循环语句及汇编如下:
   220:         while(1)
   221:         {
   222:                 P30 = 1;//
C:0x0012    D2B0     SETB     P30(0xB0.0)
   223:                 _nop_();//高电平时间500ns
C:0x0014    00       NOP      
   224:                 P30 = 0;
C:0x0015    C2B0     CLR      P30(0xB0.0)
   225:         }
C:0x0017    80F9     SJMP     C:0012



为什么用示波器测量 高电平的维持时间是500ns?

查了  汇编  SETB,  CLR 都为一个机器周期, SJMP为2个机器周期。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106590
QQ
发表于 2020-11-5 12:05:07 | 显示全部楼层
while(1)
{
P30 = 1;//
_nop_();//高电平时间500ns
P30 = 0;
}

这么写是不是好点,直接测指令的执行时间
while(1)
{
P30 = 1;
P30 = 0;
}

回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2020-11-5 17:58:30 | 显示全部楼层

                while(1)
        {       
                P30 = 0;//CLR, 该指令周期 = 3个机器周期       
                //低电平持续时间375ns       
                P30 = 1;//SETB,该指令周期 = ?个机器周期
                //高电平持续时间750ns,       
        }
       
       
        while(1)
        {       
               
                P30 = 1;//SETB,该指令周期 = 3个机器周期
                //高电平持续时间375ns
                P30 = 0;//CLR, 该指令周期 = 3个机器周期       
                //低电平持续时间750ns
               
        }
上面2个就直接可以测出来。谢谢。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-26 02:49 , Processed in 0.148591 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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