找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2375|回復: 7
收起左側(cè)

51單片機怎樣輸出1微秒方波?用示波器檢測只有38kHz左右(晶振12M正常)百思不得其解

[復制鏈接]
ID:1004765 發(fā)表于 2022-2-11 16:45 | 顯示全部樓層 |閱讀模式
請教壇里各位,以下程序目的是輸出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
回復

使用道具 舉報

ID:50910 發(fā)表于 2022-2-11 21:38 | 顯示全部樓層
中斷響應需要耗時3-6微秒。
回復

使用道具 舉報

ID:57657 發(fā)表于 2022-2-11 22:27 | 顯示全部樓層
請將 pause = ~pause; 改成 pause = TF0 ? 0 :!pause; 確定有無輸出。
回復

使用道具 舉報

ID:213173 發(fā)表于 2022-2-12 06:04 | 顯示全部樓層
傳統(tǒng)51單片機在12M晶振條件下執(zhí)行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:624769 發(fā)表于 2022-2-12 08:39 來自觸屏版 | 顯示全部樓層
你是89c51的話,用定時器2,并且從ex
回復

使用道具 舉報

ID:624769 發(fā)表于 2022-2-12 08:43 來自觸屏版 | 顯示全部樓層
你是89c51的話,用t2定時器,并且從ex引腳輸出脈沖,可以達到理論上的最高速,如果配上倍頻,即6t模式的話,勉強可輸出1us的方波,其他方法都不可能實現(xiàn)。
回復

使用道具 舉報

ID:879348 發(fā)表于 2022-2-12 08:58 | 顯示全部樓層
要理解基本概念,不能用中斷實現(xiàn),用中斷1us沒有人這樣做的,找有時鐘分頻輸出功能的單片機
回復

使用道具 舉報

ID:1004765 發(fā)表于 2022-2-12 09:26 | 顯示全部樓層
wulin 發(fā)表于 2022-2-12 06:04
傳統(tǒng)51單片機在12M晶振條件下執(zhí)行pause = ~pause;需要2us時間。所以不能用定時器中斷,用最精簡代碼編程也 ...

感謝,我在STC8開發(fā)板上使用22.1184晶振就可以得到1us的方波了。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表