完善资料让更多小伙伴认识你,还能领取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 吗?谢谢!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
238 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
629 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
552 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
552 浏览 0 评论
1074 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11765 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 08:14 , Processed in 0.567147 second(s), Total 58, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号