久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

51單片機(jī)軟件用定時(shí)器模擬串口程序

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

模擬串口用定時(shí)器完成,每一個(gè)串口要占用一個(gè)定時(shí)器,發(fā)送很好辦,每次定時(shí)器中斷(1BIT的時(shí)間)傳送一個(gè)Bit,接收就要你好好處理了,這個(gè)我模擬的一個(gè)串口,用的W77E58,實(shí)際工作時(shí)只用到了半雙工。


//使用硬件:定時(shí)器0,定時(shí)器0中斷,定時(shí)器1中斷,外中斷5
//波特率      9600 4800 2400 1200 600   300
//每BIT周期數(shù)  96  96*2 96*4 96*8 96*16 96*32
//以96為單位不同的波特率選用不同的倍率
//如果對(duì)方在每位的1/2處采樣,則發(fā)送中斷的響應(yīng)時(shí)間最多是48個(gè)時(shí)鐘周期
//也許可以置發(fā)送中斷以較高的優(yōu)先級(jí)來解決,實(shí)驗(yàn)表明發(fā)送可以工作于9600
//但若有其它中斷,并且串口工作于全雙工,則晶體頻率最好是22.1184以上
//!!實(shí)測(cè)表明當(dāng)用11.0592時(shí)鐘,標(biāo)準(zhǔn)51,收發(fā)同時(shí),最高只能到2400波特。
//但單發(fā)可以工作于9600
#define    BAUD_RATE    300
//#define    BAUD_RATE    600
//#define    BAUD_RATE    1200
//#define    BAUD_RATE    2400
//#define    BAUD_RATE    4800
//#define    BAUD_RATE    9600
 
#define    clock 110592
//#define    clock 221184
 
 
#define    RELOAD(TIMER,SVALUE)    TIMER+=SVALUE+1
 
bit    tTI;
bit    rRI;
 
unsigned char rSBUF;
unsigned char tSBUF;
 
unsigned char rSBUF0;
unsigned char RxdCnt;
unsigned char rSmpCnt;
 
unsigned char TxdCnt;
unsigned char tSmpCnt;
unsigned char multiple;
//-----------------------------------------------------------
 
void    SimuUARTinit(void)
{
#if    BAUD_RATE==300
    if(clock==110592)
    multiple=32;
    else if(clock==221184)
    multiple=64;
#endif
#if    BAUD_RATE==600
    if(clock==110592)
    multiple=16;
    else if(clock==221184)
    multiple=32;
#endif
#if    BAUD_RATE==1200
    if(clock==110592)
    multiple=8;
    else if(clock==221184)
    multiple=16;
#endif
#if    BAUD_RATE==2400
    if(clock==110592)
    multiple=4;
    else if(clock==221184)
    multiple=8;
#endif
#if    BAUD_RATE==4800
    if(clock==110592)
    multiple=2;
    else if(clock==221184)
    multiple=4;
#endif
#if    BAUD_RATE==9600
    if(clock==110592)
    multiple=1;
    else if(clock==221184)
    multiple=2;
#endif
    tTI=1;
    tTXD=1;
    rRXD=1;
 
    TMOD&=0xf0;
    TMOD|=0x03;
    ET0=1;
    ET1=1;
    TR0=1;
    IT0=1;
    EX0=1;
    TR1=1;
    PT1=1;  //置串口發(fā)送為高優(yōu)先級(jí)
    EA=1;
}
//-----------------------------------------------------------
//模擬串口發(fā)送中斷,原定時(shí)器1中斷
void    IntTH0(void)    interrupt 3
{
    RELOAD(TH0,-96);
    if(--tSmpCnt == 0)
    {      
        tSmpCnt=multiple;
        if(tTI) return;
        switch(TxdCnt++)
        {
        case    0:
            tTXD=0;
            break;
        case    9:
            tTXD=1;
            tTI=1;
            TxdCnt=0;
            break;
        default:
            tTXD=tSBUF&0x01;
            tSBUF>>=1;
            break;
        }
    }
}
//-----------------------------------------------------------
void    RxdInt0(void)   interrupt 0
{
    TL0=-96+4;     //The time of inter interrup
    ET0=1;
    TF0=0;
    rSmpCnt=multiple/2;
}
//----------------------------------------------------------
//模擬串口接收中斷,原定時(shí)器0中斷
void    IntTL0(void)    interrupt 1
{
    RELOAD(TL0,-96);
 
    if(--rSmpCnt == 0)
    {
        rSmpCnt=multiple;
        switch(RxdCnt++)
              {
        case    0:
            if(rRXD==1){RxdCnt=0;}//ET0=0 added,no start bit found then stop interrup
            break;
        case    9:
            RxdCnt=0;
            if(rRXD==0) return;
            rSBUF=rSBUF0;
            rRI=1;
            break;
        default:
            if(RxdCnt>9){ RxdCnt=0;return;}
            rSBUF0>>=1;
            rSBUF0|=rRXD?0x80:0;
            break;
        }
    }
}
//-----------------------------------------------------------

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 日本亚洲精品成人欧美一区 | 亚洲天堂一区二区 | 国产精品视频久久 | 麻豆av片| 一区二区在线 | 中文字幕国产一区 | 日本精品视频一区二区 | 国产欧美三区 | 久久久久久美女 | 国产免费高清 | 久久视频一区 | 日本精品免费 | 精品一区二区三区在线观看 | 99精品视频网 | 日韩毛片网 | 成人av一区二区三区 | 中文二区 | 成人精品国产一区二区4080 | 午夜男人天堂 | 在线激情视频 | 97超碰免费 | 精品欧美一区二区在线观看视频 | 日本不卡一区二区三区在线观看 | 精品久久99| 老外黄色一级片 | av大全在线观看 | 成人免费大片黄在线播放 | 国产午夜精品视频 | 精品在线免费看 | 91精品国产一区二区三区动漫 | 国产一区免费 | 精品www | 精品一区二区久久久久久久网站 | 国产一区二区在线91 | 日韩电影免费在线观看中文字幕 | 午夜丰满少妇一级毛片 | 日韩成人免费 | 国产精品视频一区二区三区 | 亚洲精品综合 | 99精品国产一区二区青青牛奶 | 天天综合天天 |