标题: 51单片机怎样输出1微秒方波?用示波器检测只有38kHz左右(晶振12M正常)百思不得其解 [打印本页]

作者: gb_302    时间: 2022-2-11 16:45
标题: 51单片机怎样输出1微秒方波?用示波器检测只有38kHz左右(晶振12M正常)百思不得其解
请教坛里各位,以下程序目的是输出1us的方波,可是用示波器检测只有38kHz左右(晶振12M正常),百思不得其解。

单片机源程序如下:
#include <REG51.H>

sbit pause = P0^3;
void main(void)
{
EA = 1;  
TMOD = 0x01;  
ET0 = 1;   
TR0 = 1;   
pause = 0;
while(1); }


void timeint(void) interrupt 1
{  
TH0 = (65536-1)/256;  
TL0 = (65536-1)%256;   
pause = ~pause;
}

740.jpg (1.73 MB, 下载次数: 18)

740.jpg

作者: brucekang    时间: 2022-2-11 21:38
中断响应需要耗时3-6微秒。
作者: npn    时间: 2022-2-11 22:27
请将 pause = ~pause; 改成 pause = TF0 ? 0 :!pause; 确定有无输出。
作者: wulin    时间: 2022-2-12 06:04
传统51单片机在12M晶振条件下执行pause = ~pause;需要2us时间。所以不能用定时器中断,用最精简代码编程也只能输出脉宽3us,占空50%,频率166.667KHz的方波。理论上晶振频率达36MHz才能满足基本条件。
  1. #include <REG51.H>

  2. sbit pause = P0^3;

  3. void main(void)
  4. {
  5.         while(1)
  6.         {
  7.                 pause = ~pause;       
  8.         }
  9. }
复制代码


作者: 188610329    时间: 2022-2-12 08:39
你是89c51的话,用定时器2,并且从ex
作者: 188610329    时间: 2022-2-12 08:43
你是89c51的话,用t2定时器,并且从ex引脚输出脉冲,可以达到理论上的最高速,如果配上倍频,即6t模式的话,勉强可输出1us的方波,其他方法都不可能实现。
作者: wufa1986    时间: 2022-2-12 08:58
要理解基本概念,不能用中断实现,用中断1us没有人这样做的,找有时钟分频输出功能的单片机
作者: gb_302    时间: 2022-2-12 09:26
wulin 发表于 2022-2-12 06:04
传统51单片机在12M晶振条件下执行pause = ~pause;需要2us时间。所以不能用定时器中断,用最精简代码编程也 ...

感谢,我在STC8开发板上使用22.1184晶振就可以得到1us的方波了。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1