打印
[PIC®/AVR®/dsPIC®产品]

51单片机产生高频方波信号的方法

[复制链接]
607|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lvsezhidu|  楼主 | 2025-4-17 13:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  51单片机用12MHZ晶振最高可以产生周期是8us的方波,代码如下:
#include <REG51.h>    //12MHZ晶振
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
void main()           //产生周期T=8us的方波
{
    while(1)
       {
           P0=0xff; _nop_();_nop_();   
           P0=0x00;                        
        }
}
     周期8us的方波,Proteus8.6仿真波形精准,下载后用示波器测试波形有失真,为何P0后的空操作必须不一样多?P0先输出1还是先输出0,结果一样。
无限循环的两句P0后各加1个空操作,则出现周期10us的方波,下载波形有失真;以此类推,这样可以获得更低频率的方波。这样反而比用定时器更精准。
更简单的代码如下:
void main()          //产生周期T=8us的方波 //12MHZ晶振
{
    while(1)
       {
          P0  ^= 0xff; //或者P0 = ~P0;                                         
        }
}
     加1个空操作,周期延长2个控操作的时间,看来51单片机产生方波,最短周期是机器周期的8倍,即最高频率是机器周期的1/8,这还是在不考虑波形失真的情况下得到的,当然这也可能是示波器的问题,示波器采用亚龙YLDS1102D,100M,500MSa/s。Proteus仿真波形不失真。
这其中的道理,请高手解释一下。

使用特权

评论回复
沙发
LcwSwust| | 2025-4-17 14:04 | 只看该作者
发错版块了吧,用过STC没?

使用特权

评论回复
板凳
丙丁先生| | 2025-4-18 10:49 | 只看该作者
感谢分享。

使用特权

评论回复
地板
xionghaoyun| | 2025-4-18 11:40 | 只看该作者
兄弟应该定时器翻转的

使用特权

评论回复
5
xionghaoyun| | 2025-4-18 11:42 | 只看该作者
一般while循环翻转 为了反推主频多少

使用特权

评论回复
6
coody| | 2025-4-18 11:48 | 只看该作者
建议换STC的MCU,定时器可以输出FOSC/M/2/N、FOSC//M/12/2/N的方波(M=1~256,N=1~65536),不需要中断操作,设置好即可硬件取反输出。
还有主频分频输出 SYSCLK/N,N=1~127。

使用特权

评论回复
7
643757107| | 2025-4-21 12:37 | 只看该作者
死循环翻转IO

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

22

帖子

0

粉丝