找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2393|回复: 7
打印 上一主题 下一主题
收起左侧

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
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:50910 发表于 2022-2-11 21:38 | 只看该作者
中断响应需要耗时3-6微秒。
回复

使用道具 举报

板凳
ID:57657 发表于 2022-2-11 22:27 | 只看该作者
请将 pause = ~pause; 改成 pause = TF0 ? 0 :!pause; 确定有无输出。
回复

使用道具 举报

地板
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. }
复制代码

回复

使用道具 举报

5#
ID:624769 发表于 2022-2-12 08:39 来自触屏版 | 只看该作者
你是89c51的话,用定时器2,并且从ex
回复

使用道具 举报

6#
ID:624769 发表于 2022-2-12 08:43 来自触屏版 | 只看该作者
你是89c51的话,用t2定时器,并且从ex引脚输出脉冲,可以达到理论上的最高速,如果配上倍频,即6t模式的话,勉强可输出1us的方波,其他方法都不可能实现。
回复

使用道具 举报

7#
ID:879348 发表于 2022-2-12 08:58 | 只看该作者
要理解基本概念,不能用中断实现,用中断1us没有人这样做的,找有时钟分频输出功能的单片机
回复

使用道具 举报

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

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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