完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我想用STC89C52RC输出一个TTL信号,使用示波器测量的下面这个程序输出的信号频率为331Hz,当我把第19和20行中的65536-b换成count时,输出信号的频率变成了14.3kHz。但程序中第18行有count=65536-b,所以我想两种写法的输出频率应该一样才对,怎么会相差这么多。14.3kHz才是我需要的频率,请高手帮助,谢谢了。
1 #include 2 3 ***it motor1 = P0^0; 4 5 unsigned int count,b; 6 main() 7 { 8 b=20; 9 TMOD = 0x01; 10 TH0 = 100; 11 TL0 = 100; 12 TR0 = 1; 13 while(1) 14 { 15 if(1 == TF0) 16 { 17 TF0 = 0; 18 count=65536-b; 19 TH0=(65536-b)/256; 20 TL0=(65536-b)%256; 21 motor1 = ~motor1; 22 } 23 } 24 } |
|
相关推荐
12个回答
|
|
这是在运算过程中所花费的时间,向一个变量或者寄存器赋值的时候赋值直接数速度就越快,越有计算就越慢,尤其对于技术要求严格的,特别需要注意
|
|
|
|
你用的是6.8M的晶振吗?
18、19、20行的运行需要时间的。而且,你用的是65536-b,这个65536可是unsigned long型的常数(占4字节),4字节数据运算很慢(你的晶振频率不高)。你可以用定时器单独计算这几行的执行时间。 我比较怀疑在执行这几行的时候,你的定时中断已经了生了。 在18行前插入EA = 0,在20行后插入EA = 1试试。 |
|
|
|
楼主你好!
我感觉用65536-X这种方法计算初值不是很好,建议你老老实实用初值的计算方法计算准确点吧!做技术的要求严谨! 还有注意变量的定义,要多少定义多大,资源很宝贵! |
|
|
|
我用的晶振频率是11.0592M的. 在程序第8行有b=20,我把19,20行中的b换成20时,输出结果也不一样,因为b就等于20,我想输出结果应该是一样的.这似乎不是计算时间的问题,我还是先来试一下你的提议吧. |
|
|
|
刚试过了楼上几位的建议,运行结果没有任何改变,18,19,20这几行在修改前后的运行时间没有改变.
|
|
|
|
65536-20和65536-b是不一样的。前一个只是个立即数。编译器不会真的让两个立即数在程序中做减法的,编译器会做处理。后一个则是真正的4字节减法。
另:你的初值才20个数,为何不用初值重装??然后在中断中(或者查询)做状态翻转?? |
|
|
|
65536-20和65536-b如果有微小的差别是可以理解的,但是运行结果却有数量级的差别. |
|
|
|
|
|
大哥,您为什么不亲自去测试一下这些代码的执行时间??有了数据不就好说话了???
|
|
|
|
我测试过这些代码的执行时间,是一样的,所以才发帖询问。 |
|
|
|
才疏学浅,无能为力了。帮顶。
|
|
|
|
{:23:}{:23:}{:23:}{:23:}
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
182 浏览 0 评论
如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板
1207 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十章 YOLO2人手检测实验
493 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-网络编程示例之开发板测试
420 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-网络编程示例之网络socket程序编程
957 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11741 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 03:26 , Processed in 1.309923 second(s), Total 64, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号