專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

單片機(jī)產(chǎn)生頻率和輸出電壓可調(diào)的矩形波信號(hào)發(fā)生器

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年06月15日   【字體:

#include <reg51.h>
typedef unsigned char uchar;
sbit signal=P3^0;
uchar counter;
void main(void)
{
    TR0=0;                   //禁止T0
    TMOD=0x11;               //T0和T1均選擇工作方式1,16位定時(shí)器
    TH0=-1000/256;           //定時(shí)時(shí)間為50ms
    TL0=-1000%256;           
    signal=0;                //開始時(shí)輸出為低電平
    counter=0;               //初始化T1的中斷次數(shù)為0
    EA=1;                    //使能CPU中斷
    ET0=1;                   //使能T0溢出中斷
    ET1=1;                   //使能T1溢出中斷
    TR0=1;                   //T0開始運(yùn)行,注意,T1不能現(xiàn)在運(yùn)行
    while(1)                 //無(wú)限循環(huán)
    {}
}
void isr_t0(void) interrupt 1   //T0中斷服務(wù)函數(shù)
{   
    TH0=-50000/256;          //裝定時(shí)器,定時(shí)時(shí)間為50ms
    TL0=-50000%256;
    counter++;               //中斷次數(shù)
    if(counter==2)           //若已中斷兩次,說(shuō)明已經(jīng)過(guò)去100ms
    {
        counter=0;           //中斷次數(shù)歸零
        signal=1;            //產(chǎn)生矩形波中的高電平
        TR1=1;               //開始計(jì)數(shù)T1
    }
}

//***********T1中斷函數(shù)******
void isr_t1(void) interrupt 3  

{   
    signal=0;                //矩形波中的低電平
    TR0=0;                   //禁止T1計(jì)數(shù),等待T0將其喚醒
    TH1=-25000/256;          //25ms中斷初值
    TL1=-25000%256;

 

關(guān)閉窗口

相關(guān)文章