普通51的話需要模擬PWM,如果是加強版51有內置PWM模塊,
PIC和AVR以及430還有STM也有集成PWM的型號!
如果是單純輸出方波的話就簡單了。
程序如下:
//功能,按下P1_0的開關降低頻率,按P1_1為升高頻率
#include<AT89X52.H> //引用AT89X52的庫文件
#defineucharunsignedchar //替換簡稱
#defineuintunsignedint //替換簡稱
ucharsm; //定義臨時變數
voiddelay_ms(uintms) //延時子函數,一個循環12uS
{
while(--ms);
}
voidT0_IRQ(void)interruptTF0_VECTOR //定時器0中斷函數
{
TH0=sm; //將變數賦予定時器0的高位
P2_0=!P2_0; //翻轉IO
}
//寄存器初始化子函數
voidmcu_init()
{
ET0=1; //開定時器0中斷
EA=1; //開總中斷
TMOD=0x01; //設置為16位定時器0
TH0=0xFF; //填充定時器高位
TR0=1; //開定時器0
sm=0xFF; //變數初始化
}
voidmain() //主函數
{
mcu_init(); //調用初始化函數
while(1) //主循環
{
if((!P1_0)||(!P1_1)) //檢測是否有按鍵按下
{
delay_ms(8333); //延時去抖
if(!P1_0) //如果是P1_0按鍵按下
{
while(!P1_0); //等待按鍵放手
if(sm) //檢測變數不為0
{
--sm; //自減1
P2_1=1; //取消邊界LED
}
elseP2_1=0; //到達邊界點亮LED
}
elseif(!P1_1) //否則如果P1_1按鍵按下
{
while(!P1_1); //等待按鍵放手
if(sm<0xFF) //檢測變數小於0xFF
{
++sm; //自加1
P2_1=1;
}
elseP2_1=0;
}
}
}
}
㈡ 用單片機實現方波的產生,代碼應該如何寫
可以用單片機的定時器功能啊,你分別算出這兩個方波的半周期,然後設置定時初值,到時就產生中斷,然後進入中斷程序,在中斷程序中隊輸出口取反(開始的時候一定要置高或置低),總之要在1/2t內有電平的高低變換
㈢ 用單片機發生方波 程序
假設方波的周期為8微秒 如圖所示 由p1.0引腳產生方波
定時時間=方波周期/2=4微秒
定時時間 t=(2的8次方-X)12/(12×1000000)=(256-x)×1微秒
X=256-4=252=0FCH 由於定時時間很短 工作在方式可以選擇方式2 為8位自動重裝載的
選擇定時器T1定時
參考程序
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV TMOD,#20H
MOV TH1,#0FCH
MOV TL1,#0FCH
SETB TR1
LL31: JNB TF1,LL31
CLR TF1
CPL P1.0
SJMP LL31
哈啊 別忘了 要為俺選擇(滿意回答)
㈣ 如何用單片機產生正弦波,方波(附圖,程序)
就是讓某一個I/O口輸出高低電平,例如讓P0^0輸出1HZ的方波吧,就是讓它持續500ms的高電平,500ms的低電平,程序如下
#include
sbit
L1=P0^0;
void
delay1ms();
void
main()
{
LI=1;
delay1ms(500)
L1=0;
delay1ms(500);
}
㈤ 單片機方波是什麼意思,什麼是一個方波,如何控制,最好舉例說明一下
矩形波是一種底部和頂部水平,上升沿和下降沿接近垂直的波形,而方波是矩形波的一種特殊情況(占空比為50%)。把占空比不是50%的矩形波叫成方波是錯誤的,至少是不嚴謹的。至於對稱與否,那是對電壓而言,不是針對占空比。
你在提問中說要「控制」方波,不知你要怎麼控制?
㈥ 單片機如何產生多路不同頻率的方波
如果將P1口的變化寫成二進制的方式,你就容易理解了。
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0
1 0 1 0 0 0 0 0 0
0 1 1 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0
。
。
。
看出規律了嗎?P1.0中斷一次變換一次,P1.1中斷兩次變換一次,P1.2中斷4次變換一次,依次類推,一次中斷時間是500us,那麼產生的脈沖周期就是P1.0為500*2us=1ms,P1.1為2ms,P1.2為4ms依次類推
㈦ 單片機中把兩個16位無符號單位元組數求和相加,設計程序
如果把6MHZ改成12MHZ程序應該怎麼改?
可以使用方式1。
X = M-N = 65 536 - 1 000 = 64 536 = FC 18H
需要修改的指令為如下三條。
MOV TH0, #0FCH ; T0賦初值
MOV TL0, #18H
MOV TMOD, #01H
========================
如果把題目改成把兩個16位無符號單位元組數求和相加,程序怎麼變化?
把:
ADDC A, @R1 ; 兩個高位位元組帶Cy相加
改為:
ADD A, @R1 ; 兩個高位位元組帶Cy相加
即可。