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

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

?? dio.c

?? DMDD的嵌入式系統構件源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
        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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品亚洲视频| 久久福利视频一区二区| 成人欧美一区二区三区| 亚洲男同性恋视频| 日韩精品视频网| 国产精品一二三区| 欧美色电影在线| 国产欧美视频一区二区三区| 中文字幕在线不卡国产视频| 亚洲午夜影视影院在线观看| 久久成人av少妇免费| 94-欧美-setu| 国产亚洲欧美一级| 午夜伊人狠狠久久| 91亚洲大成网污www| 26uuu欧美| 日韩精彩视频在线观看| 色综合婷婷久久| 国产精品视频第一区| 国内精品伊人久久久久av影院| 一本大道久久a久久综合| 欧美激情在线免费观看| 韩国成人在线视频| 91精品国产乱| 日韩成人av影视| 欧美一区二区三区婷婷月色 | 亚洲一区二区三区四区五区黄| 国内精品国产三级国产a久久| 99精品国产热久久91蜜凸| 久久精品日产第一区二区三区高清版| 日韩av一级片| 欧美日韩另类国产亚洲欧美一级| 在线观看亚洲精品视频| 成人av先锋影音| 欧美日韩久久久久久| 欧美乱熟臀69xxxxxx| 免费的国产精品| 亚洲色图制服诱惑| 久久久久国色av免费看影院| 欧美日韩一区不卡| 美女视频一区二区| 26uuu国产在线精品一区二区| 九色综合狠狠综合久久| 中文字幕av一区 二区| www.日本不卡| 日韩欧美一二三四区| 久久久久久9999| 欧美精品久久一区二区三区| 精品成人a区在线观看| 日本成人在线不卡视频| 欧美性xxxxxxxx| 五月开心婷婷久久| 久久久高清一区二区三区| 91麻豆国产在线观看| 久久99精品久久只有精品| 国产精品麻豆99久久久久久| 国产91丝袜在线播放九色| 亚洲精品少妇30p| 久久久亚洲高清| 欧美亚洲国产一区二区三区va| 毛片基地黄久久久久久天堂| 久久精品视频在线免费观看| 欧美精品自拍偷拍| 成人高清视频在线观看| 老司机精品视频在线| 午夜亚洲福利老司机| 亚洲另类在线制服丝袜| 国产天堂亚洲国产碰碰| 日韩欧美一卡二卡| 91麻豆高清视频| 一本一道波多野结衣一区二区| 捆绑紧缚一区二区三区视频 | 丁香亚洲综合激情啪啪综合| 亚洲成人福利片| 亚洲成人免费观看| 一区二区三区成人| 午夜精品久久久久久久99樱桃| 亚洲高清一区二区三区| 琪琪久久久久日韩精品| 国产自产2019最新不卡| 成人免费高清在线| 欧美日本一区二区三区| 欧美一区三区四区| 国产欧美一区二区精品忘忧草 | 日韩欧美在线网站| 五月婷婷久久丁香| 午夜电影久久久| 亚洲免费观看视频| 色婷婷久久久综合中文字幕| 高清av一区二区| 国产成人午夜电影网| 亚洲欧美在线视频| 丝瓜av网站精品一区二区| 亚洲国产日日夜夜| 日日欢夜夜爽一区| 国产精品一区二区免费不卡| 波波电影院一区二区三区| 在线亚洲精品福利网址导航| 色欧美片视频在线观看在线视频| 欧美日韩国产乱码电影| 中文字幕欧美日韩一区| 亚洲最大色网站| 国产在线精品一区二区不卡了| 日本高清无吗v一区| 久久亚洲一级片| 亚洲欧美日韩电影| 国产成a人亚洲精| 欧美成人性战久久| 亚洲成av人影院在线观看网| 成人免费视频视频在线观看免费| 欧美一区二区三区不卡| 亚洲精品一二三| 国产亚洲成aⅴ人片在线观看| 亚洲欧美二区三区| 日韩欧美国产不卡| 日韩精品1区2区3区| 九九视频精品免费| 精品在线观看免费| 日韩一区二区中文字幕| 国产精品免费视频观看| 不卡的电视剧免费网站有什么| 久久久99久久| 国产精品香蕉一区二区三区| 欧美影视一区二区三区| www一区二区| 亚洲成人精品一区二区| 欧美精品 国产精品| 久久久91精品国产一区二区精品 | 国产精品久久久爽爽爽麻豆色哟哟| 经典三级在线一区| 欧美国产精品v| 成人动漫精品一区二区| 国产精品久久久一本精品| 91国在线观看| 久久不见久久见免费视频1| 欧美电影免费提供在线观看| 国产高清精品久久久久| 一区视频在线播放| 欧美色图天堂网| 久久精品国产一区二区| 日本一区二区免费在线观看视频| 国产成人精品免费视频网站| 亚洲视频精选在线| 日韩一区二区三区免费看| 粉嫩13p一区二区三区| 亚洲精品乱码久久久久久| 日韩欧美中文字幕一区| av一区二区三区在线| 日本三级亚洲精品| 亚洲码国产岛国毛片在线| 精品精品欲导航| 色天天综合久久久久综合片| 激情久久久久久久久久久久久久久久| 国产精品狼人久久影院观看方式| 88在线观看91蜜桃国自产| 成人美女在线视频| 同产精品九九九| 日韩一卡二卡三卡四卡| 国产成人亚洲综合a∨婷婷 | 国产精品黄色在线观看| 欧美一区二区三区免费观看视频| 99精品久久99久久久久| 亚洲成av人片在线观看无码| 久久亚洲捆绑美女| 欧美日韩第一区日日骚| 99精品视频在线观看免费| 日本在线不卡视频| 国产亚洲女人久久久久毛片| 欧美日韩成人高清| 一本在线高清不卡dvd| 成人三级在线视频| 国产成人h网站| 狠狠色丁香久久婷婷综合丁香| 亚洲第四色夜色| 亚洲成人资源在线| 亚洲综合久久久| 香蕉成人伊视频在线观看| 亚洲免费在线观看| 国产欧美视频一区二区| 国产午夜亚洲精品羞羞网站| 欧美va日韩va| 久久久久久久久久久久久夜| 欧美tickling挠脚心丨vk| 91精品国产综合久久久久久久久久| 欧美亚洲禁片免费| 欧美一区中文字幕| 国产午夜亚洲精品羞羞网站| 日韩欧美中文字幕公布| 久久精品夜色噜噜亚洲a∨| 欧美日韩一区精品| 日韩三级视频在线看| 精品福利一二区| 欧美激情在线免费观看| 一区二区三区四区五区视频在线观看 | 精品免费一区二区三区| 欧美成人三级电影在线| 精品国产百合女同互慰| 亚洲少妇屁股交4| 亚洲天堂av老司机| 国产综合久久久久久鬼色|