• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

初学者,求教单片机io输出问题

sjsjling 2017-07-10 浏览量:900

下面是随便敲了个代码意思。

在51里运行起来,为什么P1.1出来的方波高电平和低电平都占了快500us了,

不应该是一个机器周期么?不解



void main()

      P1.1=~P1.1;     


但是这样写:
void main()

P1.1=1
delay100us();
P1.1=0;
_nop_();
P1.1=1;
这时看到的低电平就是1-2us
请指教!
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:9
  •   P1.1=~P1.1;    

    这个代码的执行时间一般也就2-3个时间周期,怎么都不会得到500us,你是不是弄错了?或者你可以把波形放上来看看

  • 如果 P1.1=~P1.1测到的 500us 那得从硬件找找原因了

  • 或許您可以在把Code在貼完整一點,且P1.1不合法才對(P1_1?),可再描述您的問題

    不過您第一個main只有取bitwise inverse

    沒有再取一次,如

    P1_1=1;

    P1_1=~P1_1;

    P1_1=~P1_1;

    以上

  • 1、首先看晶振是否准确。

    2、我猜是准确的。

    3、P1.1=~P1.1;这个是高低电平平分啊

    4、P1.1=1
    delay100us();
    P1.1=0;
    _nop_();
    P1.1=1;​这里肯定低电平时间短,你没有延时,只是执行了nop指令

    希望对你有帮助

  • delay100函数产生延迟

  • 寄存器取反操作绝对不会有这么大的延时的,楼主应该是别处占用了时间。

电子老工程师 回复了 :外部应用电路不一样,具体电路区别见附件 回复
电子老工程师 回复了 :外部应用电路不一样,具体电路区别见附件 回复

相关问题

问题达人换一批

初学者,求教单片机io输出问题