微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 菜鸟请教关于两条命令之间时间间隔的问题

菜鸟请教关于两条命令之间时间间隔的问题

时间:10-02 整理:3721RD 点击:
有个小程序如下:
#include <reg51.h>    //此文件中定义了51的一些特殊功能寄存器
/*******延时函数*************/
void delay(void)        //两个 void意思分别为无需返回值,没有参数传递
{
  unsigned int i;       //定义无符号整数,最大取值范围 65535
  for(i=0;i<1;i++)  //15、16微妙延时
        ;               //什么也不做,等待一个机器周期
}
sbit SCLK=P1^0;
sbit SDATA=P1^1;
void sendata(unsigned int x)     //x=1 or 0
{ SCLK=0;//SCLK上升沿有效
  SDATA=x;//SDATA赋值
  delay();
  SCLK=1;//SCLK从0到1跳变
  delay();
}
main()
{
  sendata(1);  
  sendata(0);
  sendata(1);  
  SCLK=0;
  SDATA=0;
}
问题1:据说,单片机每次只能执行一条指令,而每条指令需要的时间一般为1~2个指令周期。以12MHz晶体为例,1个指令周期即为1us。这是不是意味着,如上的两个信号SCLK和SDATA,根本就不可能同时出现,必须存在1~2个指令周期的时间间隔?有什么办法可以解决吗?对于某些特殊应用,1、2us的时间差很重要。
问题2:上面主函数中,连续调用3次sendata函数,实测发现SCLK下降沿跟SDATA有5us左右的时间间隔,比较大。而程序最后,SCLK=0、SDATA=0,两个信号之间间隔就只有1个指令周期,即1us。前面的间隔5us跟函数调用有关,怎么解决?
谢谢!纯属菜鸟问题。

你是什么应用,1us的时间差也很重要

提高晶振。简短一个周期指令的时间,让本来重要的变得不重要不就行了。

51单片机结构决定了速度本来就不快,换avr或pic,而且现在stc的51单片机也不会1us才一条指令的,你说的是最传统的51单片机速度

碰巧你两个用的都是P1,要不考虑不用位操作,直接字节操作,用按位与和按位或操作,不知道可行不?

接到同一组口线上。给Pn赋值。

给P1赋值,可以保证P10、P11...P17同时翻转,但是,浪费资源,尤其只使用其中1、2个端口的时候。不够灵活。

是的,就是最基本的。

是个“办法”,呵呵。

有人解答我的问题2 吗?谢谢!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top