找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

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

查看数: 2499 | 评论数: 7 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2022-2-11 16:45

正文摘要:

请教坛里各位,以下程序目的是输出1us的方波,可是用示波器检测只有38kHz左右(晶振12M正常),百思不得其解。 单片机源程序如下: #include <REG51.H> sbit pause = P0^3; void main(void) { EA = 1;& ...

回复

ID:1004765 发表于 2022-2-12 09:26
wulin 发表于 2022-2-12 06:04
传统51单片机在12M晶振条件下执行pause = ~pause;需要2us时间。所以不能用定时器中断,用最精简代码编程也 ...

感谢,我在STC8开发板上使用22.1184晶振就可以得到1us的方波了。
ID:879348 发表于 2022-2-12 08:58
要理解基本概念,不能用中断实现,用中断1us没有人这样做的,找有时钟分频输出功能的单片机
ID:624769 发表于 2022-2-12 08:43
你是89c51的话,用t2定时器,并且从ex引脚输出脉冲,可以达到理论上的最高速,如果配上倍频,即6t模式的话,勉强可输出1us的方波,其他方法都不可能实现。
ID:624769 发表于 2022-2-12 08:39
你是89c51的话,用定时器2,并且从ex
ID:213173 发表于 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. }
复制代码

ID:57657 发表于 2022-2-11 22:27
请将 pause = ~pause; 改成 pause = TF0 ? 0 :!pause; 确定有无输出。
ID:50910 发表于 2022-2-11 21:38
中断响应需要耗时3-6微秒。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表