亚洲欧美第一页_禁久久精品乱码_粉嫩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;

    uint rin;
    uint rout;

    uint tin;
    uint tout;

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

#define K_START      0
#define K_TIMEOUT    1


/*----------------------------------------------------------------------------------------
名  稱: c550_init
功  能: 初始化16C550寄存器和緩沖區(qū)
說  明:
原  型: void c550_init( void )
參  數(shù):
返回值:
作  者: 李德強
編譯器: Keil C51 V7
創(chuàng)  建: 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
功  能: 獲取發(fā)送緩沖區(qū)內剩余空間
說  明:
原  型: unsigned int c550_trsblank( void )
參  數(shù):
返回值: 發(fā)送緩沖區(qū)內剩余空間
作  者: 李德強
編譯器: Keil C51 V7
創(chuàng)  建: 2003年12月29日   09:44
----------------------------------------------------------------------------------------*/
uint c550_trsblank( void ) {
    uint tmp;

	C550_EX = 0;
	tmp = c550.tin - c550.tout;
	C550_EX = 1;

    if( tmp >= C550_TBUFF_LEN ) return 0;

    return C550_TBUFF_LEN - tmp;
}

/*----------------------------------------------------------------------------------------
名  稱: c550_rcvhold
功  能: 獲取接收緩沖區(qū)內字符數(shù)
說  明:
原  型: unsigned int c550_rcvhold( void )
參  數(shù):
返回值: 接收緩沖區(qū)內字符數(shù)
作  者: 李德強
編譯器: Keil C51 V7
創(chuàng)  建: 2003年12月29日   09:45
----------------------------------------------------------------------------------------*/
uint c550_rcvhold( void ) {
    uint tmp;

	C550_EX = 0;
	tmp = c550.rin - c550.rout;
	C550_EX = 1;

    return tmp;
}

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

	C550_EX = 0;
	count = c550.tin - c550.tout;
	C550_EX = 1;

    if( count >= C550_TBUFF_LEN ) return 0;

    count = C550_TBUFF_LEN - count;

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

    while( len -- ) {

        C550_EX = 0;
        c550.tbuff[ ( c550.tin ++ ) & ( C550_TBUFF_LEN - 1 ) ] = (*str);
        C550_EX = 1;

        ++ str;
    } //while

    if( ( count != 0 ) && ( ! bit_test( c550.flag, K_START ) ) ) {
        bit_set( c550.flag, K_START );

        C550_EX = 0;
        C550_THR = c550.tbuff[ (c550.tout ++ ) & ( C550_TBUFF_LEN - 1 ) ];
        C550_EX = 1;

    } //if

    return count;
}

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

	C550_EX  = 0;
	count = c550.rin - c550.rout;

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

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

	C550_EX  = 0;
	count = c550.rin - c550.rout;
	C550_EX  = 1;

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

    while( len -- ) {

        C550_EX  = 0;
        *str = c550.rbuff[ ( c550.rout ++ ) & ( C550_RBUFF_LEN - 1) ];
        C550_EX  = 1;

        ++ str;
    } //while

    return count;
}

/*----------------------------------------------------------------------------------------
名  稱: c550_isr
功  能: 16C550的中斷服務函數(shù)
說  明:
原  型: void c550_isr( void )
參  數(shù):
返回值:
作  者: 李德強
編譯器: Keil C51 V7
創(chuàng)  建: 2003年12月29日   09:46
----------------------------------------------------------------------------------------*/
void c550_isr( void ) interrupt C550_INT using 1
{
    uchr tmp;
    uint 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一区二区三区免费野_久草精品视频
精品国产a毛片| 国产午夜精品一区二区三区视频| 韩国一区二区三区| 另类成人小视频在线| 天堂在线一区二区| 亚洲123区在线观看| 丝袜脚交一区二区| 丝袜诱惑制服诱惑色一区在线观看| 亚洲成人av一区| 午夜av电影一区| 久久精品国产亚洲5555| 国产在线国偷精品免费看| 国产真实乱子伦精品视频| 国产盗摄女厕一区二区三区| 国产福利精品一区| 97精品久久久午夜一区二区三区 | 亚洲国产另类精品专区| 亚洲在线视频一区| 亚洲一二三级电影| 欧美96一区二区免费视频| 精品一区二区免费视频| 床上的激情91.| 在线看不卡av| 精品国产三级电影在线观看| 亚洲国产成人午夜在线一区| 亚洲私人黄色宅男| 日产欧产美韩系列久久99| 国产精品一区不卡| 色婷婷精品久久二区二区蜜臀av| 欧美乱妇一区二区三区不卡视频 | 久久国产精品免费| 成人永久aaa| 欧美日韩不卡一区| 国产欧美中文在线| 一区二区欧美精品| 久久精品国产亚洲aⅴ| 99精品视频一区二区三区| 欧美性猛交xxxx乱大交退制版| 欧美一区午夜精品| 国产精品久线在线观看| 毛片一区二区三区| 日本韩国一区二区三区视频| 欧美成人在线直播| 一区二区三区欧美| 国产大陆a不卡| 91美女蜜桃在线| 欧美成人一区二区三区片免费| 亚洲欧美在线视频观看| 蜜臀av国产精品久久久久 | 亚洲综合在线五月| 国产精品18久久久久久久网站| 欧美图片一区二区三区| 国产精品天天摸av网| 久久97超碰国产精品超碰| 欧美在线综合视频| 综合av第一页| 国内精品伊人久久久久av影院 | 日韩国产高清影视| 色呦呦网站一区| 欧美国产一区二区| 国精品**一区二区三区在线蜜桃| 亚洲精品久久久蜜桃| 亚洲午夜久久久久久久久电影网| 欧美情侣在线播放| 久久老女人爱爱| 亚洲777理论| 欧美亚洲图片小说| 国产精品不卡视频| 国产精品亚洲人在线观看| 日韩欧美国产一区二区在线播放 | 成人美女视频在线观看18| 日韩欧美亚洲另类制服综合在线| 亚洲6080在线| 欧美视频一二三区| 亚洲bt欧美bt精品777| 欧美综合一区二区三区| 亚洲综合999| 在线观看视频一区二区欧美日韩| 亚洲人成伊人成综合网小说| 99精品热视频| 亚洲三级理论片| 91麻豆成人久久精品二区三区| 亚洲日本在线a| 一本色道久久综合亚洲aⅴ蜜桃 | 国产一区二区不卡老阿姨| 欧美mv日韩mv亚洲| 国产精品66部| 中文字幕一区二区在线播放 | 欧洲色大大久久| 一区二区成人在线| 欧美精品久久天天躁| 免费一级欧美片在线观看| 久久影院午夜片一区| 国产成人精品三级麻豆| 亚洲欧美在线观看| 欧美日韩成人综合在线一区二区| 五月激情综合色| 精品欧美乱码久久久久久1区2区| 国产精品资源在线| 亚洲图片欧美激情| 91麻豆精品91久久久久同性| 国产乱理伦片在线观看夜一区| 国产精品网曝门| 欧美日韩夫妻久久| 国产91露脸合集magnet| 亚洲综合一二三区| 精品国产乱码久久久久久图片 | 日韩三级精品电影久久久| 国产精品456| 亚洲国产精品天堂| 国产午夜精品一区二区三区嫩草| 色哟哟精品一区| 蜜臀av一区二区| 中文字幕亚洲欧美在线不卡| 在线综合+亚洲+欧美中文字幕| 国产乱码精品一区二区三区忘忧草| 国产精品久久久爽爽爽麻豆色哟哟| 欧美日韩中字一区| 国产伦精品一区二区三区免费迷 | 91精品婷婷国产综合久久 | 亚洲大尺度视频在线观看| 久久久天堂av| 欧美美女一区二区在线观看| 成人国产视频在线观看| 天天操天天综合网| 亚洲四区在线观看| 26uuu成人网一区二区三区| 欧美亚洲国产一区在线观看网站 | 亚洲免费高清视频在线| 精品国产乱子伦一区| 69堂成人精品免费视频| 99综合电影在线视频| 国产一区在线观看麻豆| 日本视频一区二区| 亚洲午夜精品网| 亚洲裸体xxx| 国产精品国产自产拍在线| 久久亚洲一区二区三区明星换脸 | 久草精品在线观看| 亚洲成人中文在线| 亚洲女人的天堂| 国产精品欧美久久久久一区二区 | 国产精品国产三级国产aⅴ原创| 91精品国产福利在线观看 | 欧美成人精品1314www| 欧美日韩国产不卡| 欧美色综合网站| 欧美视频一二三区| 欧美三级电影网| 欧美午夜精品一区二区三区| 色噜噜狠狠成人中文综合| 97se亚洲国产综合自在线不卡| 波多野结衣亚洲| 不卡的电影网站| 91网上在线视频| 色八戒一区二区三区| 色八戒一区二区三区| 欧美中文字幕一区二区三区| 欧美性猛交xxxxxxxx| 欧美区一区二区三区| 欧美一区二区在线看| 日韩视频不卡中文| 久久亚洲一级片| 国产精品久久久久影视| 亚洲嫩草精品久久| 亚洲制服丝袜一区| 日韩制服丝袜av| 久久精品国产秦先生| 国产成人啪午夜精品网站男同| 国产福利一区在线| 99精品视频在线观看| 欧美日韩综合色| 欧美成人伊人久久综合网| 国产日产亚洲精品系列| 自拍偷拍亚洲欧美日韩| 午夜一区二区三区在线观看| 麻豆成人综合网| 成人高清视频在线观看| 欧美婷婷六月丁香综合色| 欧美一级黄色录像| 中文一区一区三区高中清不卡| 一区二区三区四区在线播放 | 亚洲国产日韩在线一区模特| 日韩—二三区免费观看av| 国产经典欧美精品| 在线观看免费视频综合| 精品少妇一区二区三区| 亚洲欧美国产毛片在线| 国内精品伊人久久久久av影院| 99久久精品国产麻豆演员表| 欧美精品久久99| 国产日韩欧美精品电影三级在线| 亚洲免费伊人电影| 麻豆精品视频在线观看视频| 99久久99久久精品免费看蜜桃| 91精品国产综合久久福利软件| 国产精品成人免费| 麻豆国产精品视频| 欧美影院一区二区| 国产精品电影院|