完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
有个小程序如下:
#include /*******延时函数*************/ void delay(void) //两个 void意思分别为无需返回值,没有参数传递 { unsigned int i; //定义无符号整数,最大取值范围 65535 for(i=0;i<1;i++) //15、16微妙延时 ; //什么也不做,等待一个机器周期 } ***it SCLK=P1^0; ***it 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跟函数调用有关,怎么解决? 谢谢!纯属菜鸟问题。 |
|
相关推荐
10个回答
|
|
|
你是什么应用,1us的时间差也很重要
|
|
|
|
|
|
提高晶振。简短一个周期指令的时间,让本来重要的变得不重要不就行了。
|
|
|
|
|
|
51单片机结构决定了速度本来就不快,换avr或pic,而且现在stc的51单片机也不会1us才一条指令的,你说的是最传统的51单片机速度
|
|
|
|
|
|
碰巧你两个用的都是P1,要不考虑不用位操作,直接字节操作,用按位与和按位或操作,不知道可行不?
|
|
|
|
|
|
接到同一组口线上。给Pn赋值。
|
|
|
|
|
|
|
|
|
给P1赋值,可以保证P10、P11...P17同时翻转,但是,浪费资源,尤其只使用其中1、2个端口的时候。不够灵活。 |
|
|
|
|
|
是的,就是最基本的。 |
|
|
|
|
|
|
|
|
|
|
|
有人解答我的问题2 吗?谢谢!
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
528 浏览 0 评论
654 浏览 0 评论
858 浏览 0 评论
837 浏览 0 评论
RT-Thread与英飞凌(infineon)合作得板子PSOC 6 板子学习
770 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
17064 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-14 22:55 , Processed in 0.918701 second(s), Total 89, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1434