1. 用C51單片機,編寫脈沖控制步進電機的驅動器
是什麼步進電機啊,有沒有驅動器,如果有的話,就直接給脈沖就好了。
2. 向51單片機里寫發出脈沖信號的c程序怎麼編啊
//用ADC0808控制PWM輸出
//通過可變電阻調節脈沖寬度
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit CLK =P2^4;
sbit ST=P2^5;
sbit EOC=P2^6;
sbit OE=P2^7;
sbit PWM=P3^0;
//延時
void Delay(uchar x)
{
uchar i;
while(x--)
for(i=0;i<40;i++);
}
void main()
{
uchar Val;
TMOD=0x02;//定時器T0工作於方式2自動重裝8位計數器
TH0=0x14;
TL0=0x00;
IE=0x82; //允許T0中斷
TR0=1; //啟動定時器
while(1)
{
ST=0;ST=1;ST=0; //啟動A/D轉換
while(!EOC); //等待轉換完成
OE=1;
Val=P1; //讀取轉換結果
OE=0;
if(Val==0) //PWM輸出占空比為0
{
PWM=0;
Delay(0xff);
continue;}
if(Val==0xFF) // PWM輸出占空比為100%
{
PWM=1;
Delay(0xff);
continue;
}
PWM=1;
Delay(Val); //PWM輸出占空比
PWM=0;
Delay(0xff-Val);
}
}
//--------------------------------
//T0定時器中斷給ADC0808提供時鍾信號
//---------------------------------
void Timer0_INT() interrupt 1
{
CLK=!CLK; //ADC0808時鍾
}
能看明白嗎?我也是剛學的,照書上寫的
3. 如何寫一個單片機輸入上升沿和下降沿的脈沖輸出信號的c語言程序
如果是循環中查詢的話我一般這樣做, 定義一個變數比如keyLastStatus來記錄上一次掃描周期的狀態
sbit key=P2.0; char keyLastStatus=0;
keyLastStatus=key; //初始化
while (1)
{
if(key==0 && keyLastStatus!=key) Todo(); //上升沿
if(key==1 && keyLastStatus!=key) Todo(); //下降沿
keyLastStatus=key; //記錄上一次的狀態
}
4. 如何用單片機記脈沖數
1、用單片機產生200ms,占空比為50%的周期信號,即高低電平各100ms;
2、將該200ms信號接到INT0或INT1上,將外部脈沖信號接到T0或T1上,注意要對應接,即INT0與TO一起用或INT1和T1一起用。
3、設置定時器/計數器工作方式控制寄存器TMOD的GATE = 1(門控方式) ,C/T = 1 (計數方式)。
這樣,就可以用100ms作為一個控制門,在這個門有效(相應外部中斷)時,外部計數脈沖就可以進入這個門,定時器/計數器計數初值設為加1就溢出,中斷服務程序中計數就可以了。