单片机输出TTL信号

2019-07-16 04:29发布

我想用STC89C52RC输出一个TTL信号,使用示波器测量的下面这个程序输出的信号频率为331Hz,当我把第19和20行中的65536-b换成count时,输出信号的频率变成了14.3kHz。但程序中第18行有count=65536-b,所以我想两种写法的输出频率应该一样才对,怎么会相差这么多。14.3kHz才是我需要的频率,请高手帮助,谢谢了。

1    #include <reg52.h>
2
3    sbit 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条回答
lovezjf234
1楼-- · 2019-07-16 06:58
这是在运算过程中所花费的时间,向一个变量或者寄存器赋值的时候赋值直接数速度就越快,越有计算就越慢,尤其对于技术要求严格的,特别需要注意
3htech
2楼-- · 2019-07-16 07:38
 精彩回答 2  元偷偷看……
Stone_up
3楼-- · 2019-07-16 12:52
楼主你好!
我感觉用65536-X这种方法计算初值不是很好,建议你老老实实用初值的计算方法计算准确点吧!做技术的要求严谨!
还有注意变量的定义,要多少定义多大,资源很宝贵!
xuelang_aa
4楼-- · 2019-07-16 15:20
3htech 发表于 2012-9-28 09:25
你用的是6.8M的晶振吗?
18、19、20行的运行需要时间的。而且,你用的是65536-b,这个65536可是unsigned lo ...

我用的晶振频率是11.0592M的.
在程序第8行有b=20,我把19,20行中的b换成20时,输出结果也不一样,因为b就等于20,我想输出结果应该是一样的.这似乎不是计算时间的问题,我还是先来试一下你的提议吧.
xuelang_aa
5楼-- · 2019-07-16 18:13
刚试过了楼上几位的建议,运行结果没有任何改变,18,19,20这几行在修改前后的运行时间没有改变.
3htech
6楼-- · 2019-07-16 22:18
65536-20和65536-b是不一样的。前一个只是个立即数。编译器不会真的让两个立即数在程序中做减法的,编译器会做处理。后一个则是真正的4字节减法。
另:你的初值才20个数,为何不用初值重装??然后在中断中(或者查询)做状态翻转??

一周热门 更多>