Ⅰ 51單片機產生40KHZ方波
程序為:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit Waveout=P1^0;
uchar
void main()
{
TMOD=0x01;
TH0=0xFF;
TL0=0xE8; //TL0=(65536-24)%256=232,即E8
EA=1;
ET0=1;
TR0=1;
while(1);
}
void T0_time() interrupt 1
{
TH0=0xFF;
TL0=0xE8;
Waveout=!Waveout;
}
(1)單片機輸出方波c程序擴展閱讀
使用方法
1.將模擬器插入需模擬的用戶板的CPU插座中,模擬器由用戶板供電;
2.將模擬器的串列電纜和PC機接好,打開用戶板電源;
3.通過KeilC 的IDE開發模擬環境UV2 下載用戶程序進行模擬、調試。
硬體說明
1、使用用戶板的晶振:模擬器晶振旁有兩組跳線用來切換內部晶振和用戶板晶振,當兩個短路塊位於模擬器晶振一側時,默認使用模擬板上的晶振(11.0592MHz), 當兩個短路塊位於電容一側時,使用用戶板的晶振。
2、為便於調試帶看門狗的用戶板,模擬器的復位端未與用戶板復位端相連;故模擬器的復位按鈕只復位模擬器,不復位用戶板;若要復位用戶板,請使用用戶板復位按鈕。
參考資料來源:網路-51單片機
Ⅱ 51單片機同時輸出不同頻率方波
可以使用多個定時器,每個定時器輸出不同的方波頻率。
每個定時器的計數器應配置為對應的頻率,並使用每個定時器的比較寄存器生成方波。可以使用引腳分配多個方波,也可以使用外部設備(例如,模擬輸出)。
請確保編寫程序以使用多個定時器,並且不會對其他功能造成影響。
下面是一個使用51單片機同時輸出不同頻率方波的簡單示例(使用 C 語言):
#include <reg51.h>
unsigned int counter1, counter2;
void Timer0_Init()
{
TMOD = 0x01; // 設置 Timer0 為模式 1(16 位計數器)
TH0 = 0xFC; // 初始化頻率為 1kHz 的方波
TL0 = 0x67;
TR0 = 1; // 啟動 Timer0
}
void Timer1_Init()
{
TMOD = ((TMOD & 0x0F) | 0x10); // 設置 Timer1 為模式 1(16 位計數器)
TH1 = 0xFD; // 初始化頻率為 500Hz 的方波
TL1 = 0x4B;
TR1 = 1; // 啟動 Timer1
}
void main()
{
P0 = 0x00; // 初始化 P0 引腳為低電平
Timer0_Init();
Timer1_Init();
while(1)
{
if(TF0 == 1) // Timer0 比較寄存器中斷
{
TF0 = 0;
TH0 = 0xFC;
TL0 = 0x67;
counter1++;
if(counter1 == 1000) // 每隔 1000 個計數周期,改變 P0 引腳狀態
{
counter1 = 0;
P0 = ~P0;
}
}
if(TF1 == 1) // Timer1 比較寄存器中斷
{
TF1 = 0;
TH1 = 0xFD;
TL1 = 0x4B;
counter2++;
if(counter2 == 500) // 每隔 500 個計數周期,改變 P0 引腳狀態
{
counter2 = 0;
P0 = ~P0;
}
}
}
}
希望能幫到你
Ⅲ 用c語言編程實現C8051F300單片機1s定時,50Hz的方波輸出
#include
sbit wave=P1^0;
void SetupTimer0()
{
TMOD &= 0XF0; //僅保留T1信息
TMOD |= 0X02; //設置T0: 定時功能,方式2,自動重載8位定時器/計數器
TH0 = 256-250;//定時每0.25ms中斷一次
TL0 = 256-250;
TR0 = 1; //開啟定時器
ET0 = 1; //定時器0中斷打開
}
data unsigned char us250;
data unsigned int ms;
bit WAVE; //用以記住當前wave的狀態
void Timer0_ISR() interrupt 1 //定時中斷服務程序,為按鍵消抖服務
{
if (++us250<4) return;
us250=0; ++ms;
if (ms<10) return;
//每10ms波形變化一次,20ms完成一個波形,所以波形是50Hz的
ms=0;
WAVE=~WAVE; wave=WAVE; //方波輸出
}
void main()
{
us250=ms=0;
wave=WAVE=0;
SetupTimer0();
EA = 1; //全局中斷打開
while(1); //在中斷函數中實現方波輸出
}
Ⅳ 51單片機蜂鳴器發出1KHz的信號的c語言程序
通過中斷的方式,使用定時器0來提供1KHz的方波,蜂鳴器引腳定義為P1.0。代碼如下:
#include
<reg51.h>
#define
u8
unsigned
char
sbit
BEEP=P1^0;
void
main
{
EA=1;//開總中斷
IT0=1;//打開定時器0源中斷允許開關
TMOD=0x01;//選擇定時器0工作在方式0
TR0=1;//啟動定時器0
TH1=(65536-1000)/256;//賦值,定時1ms
TL1=(65536-1000)%256;
while(1)
{;}
}
void
TIM()
interrupt
1
{
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
BEEP=~BEEP;//蜂鳴器引腳輸出1KHz方波
}
Ⅳ 如何用C語言編程使單片機產生方波信號
你要看一下你使用的單片機的PWM或者時鍾模塊,裡面會有一項功能,捕捉單片機PIN腳上的電平變化,通常叫輸入捕捉。這種功能通常都有一個自由時鍾在運行,通過單片機的寄存器配置可以設置——捕捉輸入PIN腳上的上升沿還是下降沿,或者兩種變化沿都捕捉,當PIN腳上出現對應的變化沿時,輸入捕捉功能會將此時自由時鍾的計數值鎖存到一個寄存器,並產生中斷,診斷服務程序可以用來讀取這個計數值並進行計算。對於你的方波信號,通過硬體電路處理後,接到單片機PIN上,你可以配置——只捕捉上升沿或者只捕捉下降沿,這兩,連續兩次邊沿所記錄的時鍾計數值相減在結合你的時鍾配置頻率就可以計算得到周期,希望能幫到你