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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? dio.c

?? uCOS-II作者Jean J.Labrosse所著圖書 《嵌入式系統(tǒng)構(gòu)件》書后光盤中的源代碼。基本設(shè)計(jì)了常用嵌入式系統(tǒng)的外圍硬件接口程序
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
        case DO_BLINK_EN_INV:               /* Blink depends on the complemented user request's state  */
             en = pdo->DOBypass ? FALSE : TRUE;
             break;
    }
    return (en);
}
#endif

/*$PAGE*/
/*
*********************************************************************************************************
*                                 SET THE STATE OF THE DISCRETE OUTPUT
*
* Description : This function is used to set the state of the discrete output.
* Arguments   : n     is the discrete output channel (0..DIO_MAX_DO-1).
*               state is the desired state of the output:
*                         FALSE indicates a  negated  output
*                         TRUE  indicates an asserted output
* Returns     : None.
* Notes       : The actual output will be complemented if 'DIInv' is set to TRUE.
*********************************************************************************************************
*/

void  DOSet (INT8U n, BOOLEAN state)
{
    if (n < DIO_MAX_DO) {
        OS_ENTER_CRITICAL();
        DOTbl[n].DOCtrl = state;
        OS_EXIT_CRITICAL();
    }
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                  SET THE STATE OF THE BYPASSED OUTPUT
*
* Description : This function is used to set the state of the bypassed output.  This function is used to
*               override (or bypass) the application software and allow the output to be controlled
*               directly.  This function is only valid if the bypass switch is open.
* Arguments   : n       is the discrete output channel (0..DIO_MAX_DO-1).
*               state   is the desired state of the output:
*                         FALSE indicates a  negated  output
*                         TRUE  indicates an asserted output
* Returns     : None.
* Notes       : 1) The actual output will be complemented if 'DIInv' is set to TRUE.
*               2) In blink mode, this allows blinking to be enabled or not.
*********************************************************************************************************
*/

void  DOSetBypass (INT8U n, BOOLEAN state)
{
    DIO_DO  *pdo;
    
    
    if (n < DIO_MAX_DO) {
        pdo = &DOTbl[n];
        OS_ENTER_CRITICAL();
        if (pdo->DOBypassEn == TRUE) {
            pdo->DOBypass = state;
        }
        OS_EXIT_CRITICAL();
    }
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                  SET THE STATE OF THE OUTPUT BYPASS
*
* Description : This function is used to set the state of the output bypass switch.  The output is
*               bypassed when the 'switch' is open (i.e. DOBypassEn is set to TRUE).
* Arguments   : n     is the discrete output channel (0..DIO_MAX_DO-1).
*               state is the state of the bypass switch:
*                         FALSE disables output bypass (i.e. the switch is closed)
*                         TRUE  enables  output bypass (i.e. the switch is open)
* Returns     : None.
*********************************************************************************************************
*/

void  DOSetBypassEn (INT8U n, BOOLEAN state)
{
    if (n < DIO_MAX_DO) {
        OS_ENTER_CRITICAL();
        DOTbl[n].DOBypassEn = state;
        OS_EXIT_CRITICAL();
    }
}

/*$PAGE*/

/*
*********************************************************************************************************
*                            SET THE MAXIMUM VALUE FOR THE SYNCHRONOUS COUNTER
*
* Description : This function is used to set the maximum value taken by the synchronous counter which is
*               used in the synchronous blink mode.
* Arguments   : val   is the maximum value for the counter (1..255)
* Returns     : None.
*********************************************************************************************************
*/

#if  DO_BLINK_MODE_EN
void  DOSetSyncCtrMax (INT8U val)
{
    OS_ENTER_CRITICAL();
    DOSyncCtrMax = val;
    DOSyncCtr    = val;
    OS_EXIT_CRITICAL();
}
#endif
/*$PAGE*/
/*
*********************************************************************************************************
*                                    UPDATE DISCRETE OUT CHANNELS
*
* Description : This function is called to process all of the discrete output channels.
* Arguments   : None.
* Returns     : None.
*********************************************************************************************************
*/

static  void  DOUpdate (void)
{
    INT8U     i;
    BOOLEAN   out;
    DIO_DO   *pdo;


    pdo = &DOTbl[0];
    for (i = 0; i < DIO_MAX_DO; i++) {           /* Process all discrete output channels               */
        if (pdo->DOBypassEn == FALSE) {          /* See if DO channel is enabled                       */
            pdo->DOBypass = pdo->DOCtrl;         /* Obtain control state from application              */
        }
        out = FALSE;                             /* Assume that the output will be low unless changed  */
        switch (pdo->DOModeSel) {
            case DO_MODE_LOW:                    /* Output will in fact be low                         */
                 break;

            case DO_MODE_HIGH:                   /* Output will be high                                */
                 out = TRUE;
                 break;

            case DO_MODE_DIRECT:                 /* Output is based on state of user supplied state    */
                 out = pdo->DOBypass;
                 break;
/*$PAGE*/
#if DO_BLINK_MODE_EN
            case DO_MODE_BLINK_SYNC:                       /* Sync. Blink mode                         */
                 if (DOIsBlinkEn(pdo)) {                   /* See if Blink is enabled ...              */
                     if (pdo->DOA >= DOSyncCtr) {          /* ... yes, High when below threshold       */
                         out = TRUE;
                     }
                 }
                 break;

            case DO_MODE_BLINK_ASYNC:                      /* Async. Blink mode                        */
                 if (DOIsBlinkEn(pdo)) {                   /* See if Blink is enabled ...              */
                     if (pdo->DOA >= pdo->DOBCtr) {        /* ... yes, High when below threshold       */
                         out = TRUE;
                     }
                 }
                 if (pdo->DOBCtr < pdo->DOB) {             /* Update the threshold counter             */
                     pdo->DOBCtr++;
                 } else {
                     pdo->DOBCtr = 0;
                 }
                 break;
#endif
        }
        if (pdo->DOInv == TRUE) {                          /* See if output needs to be inverted ...   */
            pdo->DOOut = out ? FALSE : TRUE;               /* ... yes, complement output               */
        } else {
            pdo->DOOut = out;                              /* ... no,  no inversion!                   */
        }
        pdo++;                                             /* Point to next DIO_DO element             */
    }
#if DO_BLINK_MODE_EN
    if (DOSyncCtr < DOSyncCtrMax) {                        /* Update the synchronous free running ctr  */
        DOSyncCtr++;
    } else {
        DOSyncCtr = 0;
    }
#endif
}
/*$PAGE*/
#ifndef CFG_C
/*
*********************************************************************************************************
*                                      INITIALIZE PHYSICAL I/Os
*
* Description : This function is by DIOInit() to initialze the physical I/O used by the DIO driver.
* Arguments   : None.
* Returns     : None.
* Notes       : The physical I/O is assumed to be an 82C55 chip initialized as follows:
*                   Port A = OUT  (Discrete outputs)
*                   Port B = IN   (Discrete inputs)
*                   Port C = OUT  (not used)
*********************************************************************************************************
*/

void  DIOInitIO (void)
{
    outp(0x0303, 0x82);                          /* Port A = OUT, Port B = IN, Port C = OUT            */
}

/*
*********************************************************************************************************
*                                         READ PHYSICAL INPUTS
*
* Description : This function is called to read and map all of the physical inputs used for discrete
*               inputs and map these inputs to their appropriate discrete input data structure.
* Arguments   : None.
* Returns     : None.
*********************************************************************************************************
*/

void  DIRd (void)
{
    DIO_DI  *pdi;
    INT8U    i;
    INT8U    in;
    INT8U    msk;


    pdi = &DITbl[0];                                       /* Point at beginning of discrete inputs    */
    msk = 0x01;                                            /* Set mask to extract bit 0                */
    in  = inp(0x0301);                                     /* Read the physical port (8 bits)          */
    for (i = 0; i < 8; i++) {                              /* Map all 8 bits to first 8 DI channels    */
        pdi->DIIn   = (BOOLEAN)(in & msk) ? 1 : 0;
        msk       <<= 1;
        pdi++;
    }
}
/*$PAGE*/
/*
*********************************************************************************************************
*                                       UPDATE PHYSICAL OUTPUTS
*
* Description : This function is called to map all of the discrete output channels to their appropriate
*               physical destinations.
* Arguments   : None.
* Returns     : None.
*********************************************************************************************************
*/

void  DOWr (void)
{
    DIO_DO  *pdo;
    INT8U    i;
    INT8U    out;
    INT8U    msk;


    pdo = &DOTbl[0];                        /* Point at first discrete output channel                  */
    msk = 0x01;                             /* First DO will be mapped to bit 0                        */
    out = 0x00;                             /* Local 8 bit port image                                  */
    for (i = 0; i < 8; i++) {               /* Map first 8 DO to 8 bit port image                      */
        if (pdo->DOOut == TRUE) {
            out |= msk;
        }
        msk <<= 1;
        pdo++;
    }
    outp(0x0300, out);                      /* Output port image to physical port                      */
}
#endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲品质自拍视频网站| 久久精品一二三| 一本色道亚洲精品aⅴ| 成人avav影音| av日韩在线网站| 91网上在线视频| 91成人在线精品| 欧美乱妇15p| 欧美一区二区视频网站| 日韩亚洲欧美一区二区三区| 欧美一级日韩免费不卡| 亚洲精品一区二区三区福利| 久久嫩草精品久久久精品一| 国产精品理论在线观看| 亚洲女人的天堂| 日韩精品色哟哟| 国产制服丝袜一区| 成人精品鲁一区一区二区| 91社区在线播放| 欧美一区二区三区电影| 国产亚洲一区二区在线观看| 成人欧美一区二区三区视频网页| 伊人性伊人情综合网| 图片区小说区国产精品视频| 精油按摩中文字幕久久| 成人国产一区二区三区精品| 欧洲在线/亚洲| 2023国产精品| 一区二区三区精品在线| 蜜臀av一区二区在线观看| 成人午夜精品在线| 欧美精品欧美精品系列| 国产片一区二区| 亚洲国产中文字幕| 国产麻豆欧美日韩一区| 在线看国产日韩| 久久蜜桃香蕉精品一区二区三区| 亚洲欧美日韩一区二区 | 中文字幕永久在线不卡| 亚洲午夜一区二区| 国产一区二区三区不卡在线观看| 日本韩国精品在线| 国产日韩欧美不卡| 婷婷六月综合网| 97成人超碰视| 国产三级一区二区| 日本一道高清亚洲日美韩| 成人视屏免费看| 日韩一区二区影院| 亚洲黄色小视频| 成人小视频在线| 精品乱人伦一区二区三区| 一区二区国产盗摄色噜噜| 丁香一区二区三区| 精品噜噜噜噜久久久久久久久试看| 一区二区三区在线视频观看58| 国产成人免费xxxxxxxx| 日韩一级大片在线观看| 午夜国产精品一区| 在线精品视频一区二区三四| 国产精品久久久久7777按摩| 国产福利不卡视频| 久久久久国产一区二区三区四区 | 日韩av在线免费观看不卡| 91日韩精品一区| 久久精品视频在线免费观看 | 国产精品狼人久久影院观看方式| 久久www免费人成看片高清| 日本高清成人免费播放| 136国产福利精品导航| 成人丝袜高跟foot| 中文字幕乱码一区二区免费| 国产精品一二三在| 国产欧美一区二区精品婷婷| 国产一区二区福利视频| 久久久99精品免费观看| 国产激情视频一区二区三区欧美| 久久综合狠狠综合久久激情| 久久成人精品无人区| 精品精品国产高清一毛片一天堂| 久久爱另类一区二区小说| 日韩欧美国产高清| 国产一区91精品张津瑜| 欧美经典一区二区| 91在线视频观看| 成人综合婷婷国产精品久久免费| 国产蜜臀97一区二区三区| 99国产精品99久久久久久| 亚洲欧美日韩一区二区三区在线观看| 成人动漫一区二区在线| 亚洲综合在线第一页| 这里只有精品免费| 国产一区二区美女诱惑| 国产精品国产馆在线真实露脸| 99国产精品久久久久久久久久| 亚洲精品精品亚洲| 5858s免费视频成人| 美女国产一区二区三区| 国产日韩欧美精品电影三级在线| eeuss国产一区二区三区| 亚洲激情男女视频| 在线综合+亚洲+欧美中文字幕| 蜜桃视频第一区免费观看| 亚洲国产精品二十页| 在线精品视频一区二区三四| 久久国产精品99精品国产| 久久九九影视网| 欧美日产国产精品| 国产成人在线影院| 亚洲成在线观看| 中文字幕免费不卡在线| 欧美一区永久视频免费观看| 成人av综合一区| 午夜精品在线看| 日本一区二区三区高清不卡 | 国产v综合v亚洲欧| 亚洲综合久久av| 久久综合狠狠综合久久激情| 在线观看精品一区| 国产成人精品免费一区二区| 亚洲成人精品一区二区| 国产精品久久久久永久免费观看| 欧美性猛交xxxxxx富婆| 国产91在线看| 激情文学综合网| 亚洲成人动漫av| 亚洲精品免费看| 国产亚洲精品精华液| 日韩一区二区视频| 精品视频一区三区九区| 99r精品视频| 成年人网站91| 国产传媒日韩欧美成人| 视频一区欧美精品| 亚洲综合久久久| 亚洲蜜臀av乱码久久精品| 国产精品美日韩| 日本一区二区三区在线不卡 | 欧美日韩国产a| 色乱码一区二区三区88| 国产a精品视频| 国产a级毛片一区| 国产精品自在在线| 国产精品911| 国产成人亚洲综合色影视| 九九**精品视频免费播放| 美女国产一区二区| 美国毛片一区二区三区| 免费成人在线网站| 久久av中文字幕片| 精品一区二区影视| 国产精品一区二区在线观看不卡 | 日韩欧美国产电影| 日韩女优毛片在线| 欧美日韩高清一区| 6080yy午夜一二三区久久| 7777精品伊人久久久大香线蕉超级流畅| 91麻豆自制传媒国产之光| 99热在这里有精品免费| 99re6这里只有精品视频在线观看| 成人精品高清在线| 色狠狠色噜噜噜综合网| 色综合天天综合网天天狠天天| 成人爱爱电影网址| 日本电影亚洲天堂一区| 欧美午夜寂寞影院| 日韩精品专区在线影院观看| 2023国产精华国产精品| 国产精品日韩精品欧美在线| 最新欧美精品一区二区三区| 一区二区不卡在线视频 午夜欧美不卡在 | 久久精品夜色噜噜亚洲a∨| 中文字幕免费观看一区| 亚洲欧美偷拍三级| 蜜臀久久久久久久| 国产成人av影院| 欧美亚洲一区二区三区四区| 91麻豆精品国产91久久久久久| 26uuu色噜噜精品一区| 亚洲欧美在线视频| 日韩和的一区二区| 丁香五精品蜜臀久久久久99网站| av爱爱亚洲一区| 337p亚洲精品色噜噜| 久久久精品免费免费| 亚洲欧美日本韩国| 狠狠狠色丁香婷婷综合久久五月| 波多野结衣的一区二区三区| 欧美日韩综合一区| 国产欧美日韩不卡| 日韩国产精品91| 99麻豆久久久国产精品免费优播| 欧美午夜一区二区| 国产欧美精品一区二区三区四区| 亚洲无线码一区二区三区| 国产一区日韩二区欧美三区| 精品污污网站免费看| 中文字幕在线一区免费| 狠狠网亚洲精品| 欧美精品丝袜中出|