亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 16c550.c

?? 51單片機驅動16C550
?? C
字號:
#include    <16C550Cfg.h>
#include    <reg52.h>

//----------------------------------------------------------------------------------------

typedef unsigned char uchr;
typedef unsigned int  uint;
typedef unsigned long ulng;

//----------------------------------------------------------------------------------------

#define bit_test(BBYTE,BBIT)   ( ( BBYTE ) & ( 1 << ( BBIT ) ) )
#define bit_set(BBYTE,BBIT)    ( BBYTE ) |= ( 1 << ( BBIT ) )
#define bit_clr(BBYTE,BBIT)    ( BBYTE ) &= ~( 1 << ( BBIT ) )

//----------------------------------------------------------------------------------------

#if  C550_USING_EXTERN_INT_NUMBER==1
    #define C550_IE     IE1
    #define C550_IT     IT1
    #define C550_EX     EX1
    #define C550_INT    2
#elif  C550_USING_EXTERN_INT_NUMBER==0
    #define C550_IE     IE0
    #define C550_IT     IT0
    #define C550_EX     EX0
    #define C550_INT    0
#else
    #error  "C550_USING_EXTERN_INT_NUMBER" 定義錯誤,取值范圍(0,1)
#endif

//----------------------------------------------------------------------------------------

C550_REG struct {
    char flag;

    uchr rin;
    uchr rout;

    uchr tin;
    uchr tout;

    uchr rbuff[ C550_RBUFF_LEN ];
    uchr tbuff[ C550_TBUFF_LEN ];
} c550;

#define K_START      0
#define K_TIMEOUT    1


/*----------------------------------------------------------------------------------------
名  稱: c550_init
功  能: 初始化16C550寄存器和緩沖區
說  明:
原  型: void c550_init( void )
參  數:
返回值:
作  者: 李德強
編譯器: Keil C51 V7
創  建: 2003年12月29日   09:44
----------------------------------------------------------------------------------------*/
void c550_init( void ) {
    uint len;
    uchr C550_REG * ptr;

    len = sizeof( c550 );
    ptr = ( uchr C550_REG * )&c550;
    do {
        *ptr = 0;
        ++ ptr;
    } while( -- len );

	//SET FCR
	C550_FCR = C550_VAL_FCR;

	//SET MCR
	C550_MCR = C550_VAL_MCR;

	//SET LCR Select Divisor Latch Enable
	bit_set( C550_LCR, 7 );
	//SET BAUD
	C550_DLL = C550_VAL_DL;
	C550_DLM = C550_VAL_DL >> 8;

	//SET LCR
	C550_LCR = C550_VAL_LCR;

	//SET IER
	C550_IER = C550_VAL_IER;

	C550_IT = 1;
	C550_EX = 1;
	EA = 1;
}


/*----------------------------------------------------------------------------------------
名  稱: c550_trsblank
功  能: 獲取發送緩沖區內剩余空間
說  明:
原  型: unsigned char c550_trsblank( void )
參  數:
返回值: 發送緩沖區內剩余空間
作  者: 李德強
編譯器: Keil C51 V7
創  建: 2003年12月29日   09:44
----------------------------------------------------------------------------------------*/
uchr c550_trsblank( void ) {
    uchr tmp;

	tmp = c550.tin - c550.tout;

    if( tmp >= C550_TBUFF_LEN ) return 0;

    return C550_TBUFF_LEN - tmp;
}

/*----------------------------------------------------------------------------------------
名  稱: c550_rcvhold
功  能: 獲取接收緩沖區內字符數
說  明:
原  型: unsigned char c550_rcvhold( void )
參  數:
返回值: 接收緩沖區內字符數
作  者: 李德強
編譯器: Keil C51 V7
創  建: 2003年12月29日   09:45
----------------------------------------------------------------------------------------*/
uchr c550_rcvhold( void ) {
    return c550.rin - c550.rout;
}

/*----------------------------------------------------------------------------------------
名  稱: c550_putstr
功  能: 發送一個字符串
說  明:
原  型: unsigned char c550_putstr( unsigned char len, char * str )
參  數: len   待發送字符串長度
        str   待發送字符串的首地址
返回值: 實際發送的字符數量
作  者: 李德強
編譯器: Keil C51 V7
創  建: 2003年12月29日   09:48
----------------------------------------------------------------------------------------*/
uchr c550_putstr( uchr len, char * str ) {
    uchr count;

	count = c550.tin - c550.tout;

    if( count >= C550_TBUFF_LEN ) return 0;

    count = C550_TBUFF_LEN - count;

    if( len > count )  len = count;
    else  count = len;

    while( len -- ) {
        c550.tbuff[ ( c550.tin ++ ) & ( C550_TBUFF_LEN - 1 ) ] = (*str);
        ++ str;
    } //while

    if( ( count != 0 ) && ( ! bit_test( c550.flag, K_START ) ) ) {
        bit_set( c550.flag, K_START );
        C550_THR = c550.tbuff[ (c550.tout ++ ) & ( C550_TBUFF_LEN - 1 ) ];
    } //if

    return count;
}

/*----------------------------------------------------------------------------------------
名  稱: c550_rclear
功  能:
說  明:
原  型: void c550_rclear( unsigned char len )
參  數: len   要獲取的字符串長度
返回值:
作  者: 李德強
編譯器: Keil C51 V7
創  建: 2003年12月29日   09:49
----------------------------------------------------------------------------------------*/
void c550_rclear( uchr len ) {
    uchr count;

	count = c550.rin - c550.rout;

    if( len > count ) {
        c550.rin = 0;
        c550.rout = 0;
    }
    else {
        c550.rout += len;
    }
}

/*----------------------------------------------------------------------------------------
名  稱: c550_getstr
功  能: 獲取一個字符串
說  明:
原  型: unsigned char c550_getstr( unsigned char len, char * str )
參  數: len   要獲取的字符串長度
        str   保存字符串的首地址
返回值: 實際獲取的字符數量
作  者: 李德強
編譯器: Keil C51 V7
創  建: 2003年12月29日   09:49
----------------------------------------------------------------------------------------*/
uchr c550_getstr( uchr len, char * str ) {
    uchr count;

	count = c550.rin - c550.rout;

    if( len > count ) len = count;
    else count = len;

    while( len -- ) {
        *str = c550.rbuff[ ( c550.rout ++ ) & ( C550_RBUFF_LEN - 1) ];
        ++ str;
    } //while

    return count;
}

/*----------------------------------------------------------------------------------------
名  稱: c550_isr
功  能: 16C550的中斷服務函數
說  明:
原  型: void c550_isr( void )
參  數:
返回值:
作  者: 李德強
編譯器: Keil C51 V7
創  建: 2003年12月29日   09:46
----------------------------------------------------------------------------------------*/
void c550_isr( void ) interrupt C550_INT using 1
{
    uchr tmp;
    uchr count;

    //RXRDY
    while( bit_test( C550_LSR, 0 ) ) {
        tmp = C550_RHR;
        count = c550.rin - c550.rout;
        if( count <= C550_RBUFF_LEN ) {
            c550.rbuff[ ( c550.rin ++ ) & ( C550_RBUFF_LEN - 1 ) ] = tmp;
        } //if
    }

    //TXRDY
    if( bit_test( C550_LSR, 5 ) ) {
        count = c550.tin - c550.tout;
        if( count > 16 ) count = 16;
        tmp = count;
        if( tmp == 0 ) {
            bit_clr( c550.flag, K_START );
        } //if
        else {
            while( tmp -- ) {
                C550_THR = c550.tbuff[ ( c550.tout ++ ) & ( C550_TBUFF_LEN - 1 ) ];
            } //while
        } //else
    } //if

    //處理C550_ISR
    while( ! ( bit_test( C550_ISR, 0 ) ) );
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91视频免费观看| 欧美久久久久久久久| 亚洲福利一区二区| 久久色在线观看| 91福利在线播放| 国产精品综合二区| 一区二区三区四区不卡视频| 精品国产青草久久久久福利| 91在线视频网址| 九一久久久久久| 一区二区三区欧美日| 国产欧美精品一区二区三区四区| 91福利视频久久久久| 国产精品资源网站| 亚洲成人www| 国产精品久久久久毛片软件| 2024国产精品视频| 欧美日韩高清一区二区三区| 成人精品视频.| 久久99精品网久久| 亚洲aaa精品| 综合网在线视频| 国产日韩欧美一区二区三区乱码 | 国产精品996| 美女任你摸久久| 亚洲国产视频a| 中文字幕中文在线不卡住| 欧美r级在线观看| 欧美日韩中字一区| 日本黄色一区二区| 波多野结衣在线aⅴ中文字幕不卡| 韩国成人在线视频| 青椒成人免费视频| 亚洲成人午夜电影| 亚洲一卡二卡三卡四卡无卡久久| 国产精品毛片a∨一区二区三区| 久久天堂av综合合色蜜桃网| 日韩一级片网址| 欧美一区二区三区四区五区| 欧美日韩中文国产| 欧美亚洲一区二区在线| 色悠悠亚洲一区二区| 成a人片国产精品| 国产suv精品一区二区三区| 久久www免费人成看片高清| 日韩中文字幕一区二区三区| 一区二区三区精品久久久| 亚洲精品久久久蜜桃| 亚洲精品视频免费看| 亚洲人妖av一区二区| 亚洲欧美一区二区三区极速播放| 国产精品国产成人国产三级| 中文字幕五月欧美| 1024成人网色www| 亚洲人快播电影网| 亚洲影院在线观看| 亚洲国产精品影院| 日韩精品一卡二卡三卡四卡无卡| 日韩va欧美va亚洲va久久| 婷婷久久综合九色国产成人| 欧美96一区二区免费视频| 精品一区二区国语对白| 丁香网亚洲国际| 91免费视频网址| 欧美日韩亚洲综合| 欧美电视剧在线观看完整版| 久久精品视频一区二区三区| 亚洲欧洲精品天堂一级| 亚洲一区二区三区在线| 日韩av网站免费在线| 狠狠色综合色综合网络| 成人性生交大片免费看在线播放| 色综合久久久久久久| 欧美妇女性影城| 久久久www成人免费无遮挡大片 | 国产精品国产馆在线真实露脸| 亚洲精品网站在线观看| 日韩av高清在线观看| 国产一二精品视频| 色网综合在线观看| 欧美一区二区三区啪啪| 日本一区二区三区四区| 一区二区三区 在线观看视频| 日本女人一区二区三区| 国产成人亚洲精品狼色在线 | 精品福利一区二区三区免费视频| 亚洲国产经典视频| 亚洲动漫第一页| 国产成人在线色| 欧美色国产精品| 久久九九久精品国产免费直播| 亚洲精品日产精品乱码不卡| 蜜桃精品视频在线| 色网综合在线观看| 亚洲精品一区二区三区影院| 伊人夜夜躁av伊人久久| 国产一区二区视频在线| 欧美无人高清视频在线观看| 久久久久久久av麻豆果冻| 午夜精品在线视频一区| 成人丝袜18视频在线观看| 7878成人国产在线观看| 国产精品久久久久四虎| 久久99精品久久久久久动态图| 91女厕偷拍女厕偷拍高清| 久久综合久久久久88| 亚洲一级不卡视频| 成人午夜在线播放| 精品国产乱码久久久久久闺蜜| 亚洲精品一二三| 国产69精品久久99不卡| 日韩欧美一区二区视频| 亚洲在线观看免费视频| 成人av在线影院| 久久综合色婷婷| 日本va欧美va欧美va精品| 在线精品视频免费播放| 国产精品九色蝌蚪自拍| 国产精品资源在线看| 日韩欧美一区电影| 日精品一区二区三区| 欧美在线一区二区三区| 亚洲视频在线观看三级| 粉嫩绯色av一区二区在线观看| 日韩免费电影一区| 美腿丝袜一区二区三区| 欧美久久久久免费| 亚洲丰满少妇videoshd| 欧美伊人久久久久久久久影院| 国产精品久久久久久一区二区三区| 国产麻豆午夜三级精品| 精品处破学生在线二十三| 日韩不卡一区二区三区| 欧美久久一区二区| 日韩在线a电影| 3751色影院一区二区三区| 五月天国产精品| 欧美日韩国产一二三| 午夜不卡在线视频| 欧美日韩国产一级二级| 性感美女久久精品| 91精品国产综合久久久久久久久久| 亚洲成国产人片在线观看| 欧美精品久久99久久在免费线| 亚洲一区视频在线观看视频| 91黄色激情网站| 性做久久久久久久免费看| 欧美二区三区的天堂| 日韩av在线播放中文字幕| 欧美一区二区美女| 精品一区二区综合| 久久精品视频免费| aaa国产一区| 亚洲精品一二三| 欧美日韩精品福利| 日韩和欧美的一区| 欧美mv和日韩mv的网站| 国产美女在线精品| 国产精品国产三级国产aⅴ无密码| 91视频在线观看| 午夜a成v人精品| 日韩女优电影在线观看| 国产一区二区三区四区五区美女| 国产欧美日韩不卡| 色婷婷av一区二区三区软件| 亚洲va天堂va国产va久| 精品国内二区三区| 99re这里只有精品视频首页| 亚洲国产一区在线观看| 精品国产一区二区三区久久久蜜月 | 国产视频在线观看一区二区三区| 不卡的av电影| 亚洲v中文字幕| 精品成人免费观看| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲电影视频在线| 久久婷婷一区二区三区| 色噜噜狠狠色综合中国 | 成人午夜视频福利| 亚洲一区二区免费视频| 精品播放一区二区| 91久久精品一区二区三| 久久aⅴ国产欧美74aaa| 亚洲欧美一区二区在线观看| 欧美放荡的少妇| 成人ar影院免费观看视频| 日韩在线一区二区| 国产精品欧美一区喷水| 这里是久久伊人| 成人午夜伦理影院| 日本欧美在线看| 日韩毛片视频在线看| 欧美va亚洲va| 欧美中文字幕一二三区视频| 国产99精品视频| 日韩激情视频在线观看| 亚洲男帅同性gay1069| 久久亚洲精品国产精品紫薇| 欧美日本不卡视频| 91视频免费看|