?? pwm_motor.c
字號:
/*以下是一段產(chǎn)生占空比為20%的脈沖信號的c51程序,我想電機(jī)轉(zhuǎn)速*/
/*對應(yīng)于一定的占空比,如果你要改變占空比,可能需要建立一個對應(yīng)*/
/*于不同轉(zhuǎn)速的參數(shù)表(如定時器初值等),查表*/
/*得到不同參數(shù),以改變占空比和轉(zhuǎn)速。你用什么驅(qū)動電路?*/
/*采用6MHz晶振,在P1.0腳上輸出周期為2.5s,占空比為20%的脈沖信號*/
/*定時100ms,周期2.5s需25次中斷,高電平0.5s需5次中斷*/
#include <reg51.h>
typedef unsigned char uchar;
sbit P0_0=P0^0;
sbit P0_1=P0^1;
sbit P0_2=P0^2;
sbit P0_3=P0^3;
sbit P2_0=P2^0;
sbit P2_1=P2^1;
uchar time=0;
uchar period=25;
uchar high=10;
uchar th1=0;
uchar tl1=0;
uchar th0=0;
uchar tl0=0;
void timer0() interrupt 1 using 1
{
TH0=0x3c; /*定時器初值重裝載*/
TL0=0xb0;
//TH0=0xc3;/*定時器初值重裝載*/
//TL0=0x50;
time++;
if(time==high) /*高電平持續(xù)時間結(jié)束,變低*/
{ P2_0=tl0;
P2_1=tl1;
}
else if(time==period) /*周期時間到,變高*/
{ time=0;
P2_0=th0;
P2_1=th1;
}
}
void main()
{
TMOD=0x01; /*定時器0方式1*/
TH0=0x3c; /*定時器裝載初值,設(shè)置脈沖信號的占空比為1/5*/
TL0=0xb0;
//TH0=0xc3;/*定時器裝載初值,設(shè)置脈沖信號的占空比為4/5*/
//TL0=0x50;
EA=1; /*開CPU中斷*/
ET0=1; /*開定時器0中斷*/
TR0=1;/*啟動定時器0*/
if(P0_2==1)
{
th0=1;
tl0=0;
th1=0;
tl1=0;
}
if(P0_3==1)
{
th0=0;
tl0=0;
th1=1;
tl1=0;
}
while(1) /*等待中斷*/
{}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -