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

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

?? r591io.c

?? 基于p87c591的can通訊驅動程序源碼
?? C
字號:
/*======================================================================*/
/* NAME:    r591io.c                                                    */
/* INFO:    In/Out module for the PHYTEC training board equipped with   */
/*          PHYTEC phyCORE 591 and Philips P8x591 Microcontroller       */
/* RIGHTS:  Embedded Systems Academy   www.esacademy.com                */
/*----------------------------------------------------------------------*/
/* DETAILS: LED D1 can be dimmed using set_brightness_d1 - this only    */
/*          works after the call of init_timer0_dim_d1. Timer 0 is used */
/*          to create a PWM signal to D1                                */
/*----------------------------------------------------------------------*/
/* HISTORY: V1.0     Pf    21-FEB-2000                                  */
/*          V1.1     Pf    16-JUN-2000                                  */
/*======================================================================*/

#include "reg591.h"
#include "reg591ex.h"

/*------------------------- GLOBAL DATA --------------------------------*/

WORD timer1tick;

/*-------------------------- LOCAL DATA --------------------------------*/

BYTE D1InUse = 0;                   /* D1 used to display analog value? */
WORD T0VALON, T0VALOFF;             /* reload values for ON and OFF */
WORD t1reload;                      /* reload for timer 1 */
BYTE statusD1;                      /* LED 1=ON, 0=OFF */
char xdata *pPD;                    /* Pointer to Address of ext. Port D */


/*----------------------- GLOBAL SUBROUTINES ---------------------------*/

/*======================================================================*/
/* FUNCTION:   check_button                                             */
/* DESCRIPTION:Reading the status of push button S1 or S2               */
/* INPUT:      Sx: 1 or 2 for reading button S1 or S2                   */
/* OUTPUT:     0, if button SX is not pushed down                       */
/*             0xFF, if button is pushed down                           */
/*======================================================================*/
BYTE check_button (BYTE Sx)
{
BYTE  button;                       /* Define and init vars */

   pPD = ADDR_INPUT_PORT;           /* Set pointer to external port address */

   button = *pPD & Sx;              /* read external port */

   if (button == 0)
      return (0);
   else
      return (0xFF);
}


/*======================================================================*/
/* FUNCTION:   read_dip_switches                                        */
/* DESCRIPTION:Read the settings of the 8 DIP switches S5               */
/* INPUT:      none                                                     */
/* OUTPUT:     Current value of the DIP switches S5                     */
/*======================================================================*/
BYTE read_dip_switches (void)
{
char xdata *loc_pPD;                /* Pointer to Address of ext. Port D */

   loc_pPD = ADDR_DIP_INPUT_PORT;   /* Set pointer to external port address */
   return (*loc_pPD);
}


/*======================================================================*/
/* FUNCTION:   read_poti                                                */
/* DESCRIPTION:Read an analog input value at P1.2 - Potentiometer       */
/* CAUTION:    Starts a A/D conversion and WAITS until it is completed  */
/* INPUT:      none                                                     */
/* OUTPUT:     Current value of the DIP switches S5                     */
/*======================================================================*/
BYTE read_poti (void)
{
int poti;

   ADCON &= 0xF8;                   /* select POTI on P1.2 */
   ADCON |= 0x08;                   /* set ADCS to start conversion */
   while(!(ADCON == (ADCON | 0x10))); /* wait for int flag */
   ADCON &= 0xEF;                   /* clear int flag */
   poti = (0xFF - ADCH);
   return (poti);                   /* return 0-100 */
}


/*======================================================================*/
/* FUNCTION:   switch_leds                                              */
/* DESCRIPTION:Switches LED D1 and D2 on or off                         */
/*             Will not use LED D1 if init_timer0_dim_d1 was called     */
/* INPUT:      on_off:  0 switches both LEDs off,                       */
/*                      1 switches LED D1 on, D2 off                    */
/*                      2 switches LED D1 off, D2 on                    */
/*                      3 switches both LEDs on                         */
/* OUTPUT:     none                                                     */
/*======================================================================*/
void switch_leds (BYTE on_off)
{
   pPD = ADDR_INPUT_PORT;           /* Set pointer to external port address. */
   if (D1InUse)
   {
      on_off &= 2;
      if (on_off > 0)
         *pPD |= 0x20;
      else
         *pPD &= 0xDF;
   }
   else
      *pPD = (on_off << 4);         /* write to external port */
}


/*======================================================================*/
/* FUNCTION:   init_timer1                                              */
/* DESCRIPTION:Initializes timer 1 in mode 3                            */
/*             Increments the global variable timer1tick with each      */
/*             occurance of the timer 1 interrupt                       */
/* CAUTION:    EA needs to be set to 1 manually after this function is  */
/*             called to globally enable ALL interrupts                 */
/* INPUT:      reload: the 16-bit reload value for the time             */
/*----------------------------------------------------------------------*/
/* To get specific reload values calculated (for example to achieve a   */
/* 5ms interrupt), use the Microcontroller Peripheral Timing Calculator */
/* provided by the Embedded Systems Academy at                          */
/* www.esacademy.com/faq/calc/philips.htm                               */
/*----------------------------------------------------------------------*/
/* OUTPUT:     none                                                     */
/*======================================================================*/
void init_timer1 (WORD reload)
{
    t1reload = reload;
    timer1tick = 0;
    TR1      =  0;                   /* timer 1: stop */
    TMOD     |= 0x10;                /* mode 1 */
    IP1      |= 2;                   /* priority */
    TH1      =  reload / 256;
    TL1      =  reload % 256;
    TR1      =  1;                   /* timer 1: start */
    ET1      =  1;                   /* enable timer 1 int */
}


/*======================================================================*/
/* FUNCTION:   init_timer0_dim_d1                                       */
/* DESCRIPTION:Initializes timer 0 which is used to dim D1              */
/*             Needs to be called before set_brightness_d1 can be used  */
/* CAUTION:    EA needs to be set to 1 manually after this function is  */
/*             called to globally enable ALL interrupts                 */
/* INPUT:      none                                                     */
/* OUTPUT:     none                                                     */
/*======================================================================*/
void init_timer0_dim_d1 (void)
{
    D1InUse = 0xFF;                 /* D1 is in use */
    T0VALON = 0xFFC0;               /* reload for ON */
    T0VALOFF = 0xD000;              /* reload for OFF */
    statusD1 = 0;			        /* used to toggle LED */

    pPD = ADDR_INPUT_PORT;          /* initialize write address for LEDs */

    TR0     =  0;                   /* timer 0: stop */
    TMOD    |= 1;                   /* mode 1 */
    TH0     =  0xE0;
    TL0     =  0x00;
    TR0     =  1;                   /* timer 0: start */
    ET0     =  1;                   /* enable timer 0 int */
}


/*======================================================================*/
/* FUNCTION:   set_brightness_d1                                        */
/* DESCRIPTION:Sets the brightness of LED D1                            */
/* CAUTION:    init_timer0_dim_d1 needs to be called before this        */
/*             function can work                                        */
/* INPUT:      0-100, a value of 100 or higher makes LED D1 brightest   */
/* OUTPUT:     none                                                     */
/*======================================================================*/
void set_brightness_d1 (BYTE value)
{
    if (value > 100)
        value = 100;
    T0VALON = 0xFFD0 - (value * value);
    T0VALOFF = 0xCC00 + (value * 128);
}


/*======================================================================*/
/* FUNCTION:   error_state                                              */
/* DESCRIPTION:If a program discovers a fatal error, this routine can   */
/*             be used to display an error code to the user.            */
/*             THIS FUNCTION NEVER RETURNS! ONLY A RESET WILL RECOVER   */
/*             THE BOARD!
/* INPUT:      Error value to be displayed on both LEDs as a blinking   */
/*             pattern. Only values from 1-12 can be "reasonably"       */
/*             recognized by counting the "blinks"                      */
/* OUTPUT:     none                                                     */
/*======================================================================*/
void error_state (BYTE error)
{
WORD i,j;

   EA = 0;                             /* Disable all interrupts */
   while (1)
   {
      for (j = 1; j <= error; j++)
      {
         for (i = 0; i <= 20000; i++)
            switch_leds(0x03);         /* Both LEDs on */
         for (i = 0; i <= 20000; i++)
            switch_leds(0x00);         /* Both LEDs off */
      }
      for (i = 0; i <= 50000; i++)
         switch_leds(0x00);            /* Both LEDs off */
   }
}


/*----------------------- LOCAL SUBROUTINES ----------------------------*/

/*======================================================================*/
/* FUNCTION:   t0_isr                                                   */
/* DESCRIPTION:Interrupt Service Routine for timer 0                    */
/*             Controls the brightness of LED d1                        */
/* INPUT:      T0VALON and T0VALOFF - current reload values for timer   */
/* OUTPUT:     none                                                     */
/*======================================================================*/

void t0_isr (void) interrupt 1
{
    TR0     =  0;                   /* timer 0: stop */
    if (statusD1==0)                /* LED is OFF */
    {
        *pPD = *pPD | 0x10;         /* switch D1 on */
        TH0 = T0VALON / 256;
        TL0 = T0VALON % 256;        /* reload value for on */
        statusD1 = 1;
    }
    else
    {
        *pPD = *pPD & 0xEF;         /* switch D1 off */
        TH0  = T0VALOFF / 256;      /* reload value for off */
        TL0  = T0VALOFF % 256;
        statusD1 = 0;
    }
    TR0     =  1;                   /* timer 0: restart */
}


/*======================================================================*/
/* FUNCTION:   t1_isr                                                   */
/* DESCRIPTION:Interrupt Service Routine for timer 1                    */
/*             Increments the variable timer1tick with each occurance   */
/* INPUT:      t1reload - reload value set by function init_timer1      */
/* OUTPUT:     none                                                     */
/*======================================================================*/

void t1isr (void) interrupt 3
{
    TR1 =  0;                   /* timer 1: stop */
    TH1 = t1reload / 256;
    TL1 = t1reload % 256;       /* reload value */
    TR1 =  1;                   /* timer 1: restart */
    timer1tick++;
}

/*----------------------- END OF FILE ----------------------------------*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品香蕉一区二区三区| 免费观看在线色综合| 精品成人私密视频| 在线不卡一区二区| 欧美日韩国产电影| 欧美丰满高潮xxxx喷水动漫| 欧美高清视频一二三区| 欧美日本在线看| 日韩一区二区视频在线观看| 7799精品视频| 精品国产91乱码一区二区三区| 51精品秘密在线观看| 精品少妇一区二区三区| 欧美成人伊人久久综合网| 久久一区二区视频| 国产精品久久久久久久久图文区| 亚洲三级免费观看| 亚洲大片精品永久免费| 日本中文字幕一区二区视频| 美国av一区二区| 激情小说亚洲一区| 91在线视频观看| 欧美日韩黄视频| 久久久噜噜噜久久人人看 | 欧美系列一区二区| 在线电影院国产精品| 日韩精品一区二区三区四区视频 | 成人综合激情网| 菠萝蜜视频在线观看一区| 91美女在线观看| 日韩欧美色综合网站| 欧美高清一级片在线观看| 亚洲美腿欧美偷拍| 久久99精品国产.久久久久| 国产一区二区三区高清播放| 91亚洲永久精品| 日韩亚洲欧美高清| 国产精品每日更新在线播放网址 | 亚洲国产日韩a在线播放| 日韩电影在线观看电影| 成人av电影在线网| 欧美一级日韩不卡播放免费| 欧美国产一区在线| 蜜臀久久99精品久久久画质超高清| 成人性生交大片免费看视频在线 | 亚洲美女淫视频| 免费三级欧美电影| 色综合天天综合色综合av| 精品99999| 亚洲成人中文在线| 东方aⅴ免费观看久久av| 69精品人人人人| 亚洲欧美欧美一区二区三区| 免费人成精品欧美精品| 日本韩国一区二区三区视频| 欧美激情一区二区三区不卡| 久久激情五月婷婷| 在线成人av网站| 亚洲国产乱码最新视频| 99国产精品久| 国产精品免费视频观看| 另类的小说在线视频另类成人小视频在线 | 成人av电影免费观看| 日韩丝袜美女视频| 五月天网站亚洲| 91成人免费网站| 一区二区欧美精品| 91视视频在线观看入口直接观看www| 久久综合狠狠综合久久激情| 午夜av区久久| 欧美色视频在线| 午夜视频在线观看一区二区三区| 92国产精品观看| 亚洲色图在线视频| 91丨九色丨蝌蚪丨老版| 国产精品区一区二区三区| 国产精品一级片| 欧美国产日韩亚洲一区| 国产成人精品亚洲777人妖 | 亚洲欧美在线视频| 99精品热视频| 亚洲尤物在线视频观看| 在线视频欧美精品| 亚洲成人黄色小说| 日韩网站在线看片你懂的| 久久 天天综合| 久久日一线二线三线suv| 国产精品一区在线| 国产精品久久精品日日| 白白色 亚洲乱淫| 亚洲综合一区二区精品导航| 69堂国产成人免费视频| 国产一区二区三区在线看麻豆| 久久午夜电影网| 99热99精品| 亚洲成人tv网| 欧美成人三级电影在线| 国产成人精品一区二区三区四区 | 在线中文字幕一区二区| 日韩高清一级片| 亚洲精品在线免费观看视频| 成人免费毛片片v| 亚洲精品少妇30p| 日韩欧美三级在线| 91在线云播放| 日本网站在线观看一区二区三区 | 国产成人综合在线观看| 日韩理论片在线| 欧美一级一区二区| 成人av动漫网站| 男女性色大片免费观看一区二区| 欧美激情中文字幕| 精品视频在线免费观看| 韩国av一区二区三区四区| 国产精品情趣视频| 久久久国产午夜精品| 欧美性猛交xxxx乱大交退制版 | 狠狠色狠狠色综合| 亚洲精品国产一区二区精华液| 欧美一级免费观看| 91在线视频观看| 国产中文字幕精品| 午夜视频一区二区| 五月综合激情网| 亚洲欧洲三级电影| 日韩欧美国产综合一区 | 午夜精品久久久久久久久| 国产视频一区在线播放| 欧美人xxxx| 日本高清不卡一区| 成人激情小说网站| 美国毛片一区二区三区| 亚洲欧美激情插 | 国产精品久久影院| 欧美精品一区二区三区蜜臀| 在线亚洲欧美专区二区| 大陆成人av片| 国产精品一品视频| 国产在线一区观看| 麻豆精品精品国产自在97香蕉| 亚洲国产综合91精品麻豆| 亚洲欧美日韩在线不卡| 国产精品久久久久影院老司| 久久亚洲精品国产精品紫薇| 国产午夜精品一区二区三区四区 | 欧美丝袜自拍制服另类| av在线一区二区三区| 69p69国产精品| 欧美视频完全免费看| 99久久er热在这里只有精品15| 黑人巨大精品欧美黑白配亚洲| 免费成人av资源网| 午夜视频一区二区| 午夜精品视频一区| 天天综合色天天| 秋霞电影网一区二区| 免费成人美女在线观看.| 奇米在线7777在线精品 | 日韩一级在线观看| 日韩欧美自拍偷拍| 欧美不卡视频一区| 亚洲精品在线观看网站| 国产日韩欧美在线一区| 国产精品视频免费看| 国产精品久久看| 亚洲天堂久久久久久久| 夜夜操天天操亚洲| 偷拍与自拍一区| 老司机免费视频一区二区三区| 久久精品国产亚洲a| 国产精品一品二品| 日本久久精品电影| 日韩一二在线观看| 日本一区二区三区四区| 国产精品国产三级国产三级人妇| 国产欧美精品一区二区色综合朱莉| 国产农村妇女毛片精品久久麻豆 | 久久精品一区二区三区四区| 国产精品视频免费看| 亚洲一区在线视频| 免费高清在线一区| 丰满岳乱妇一区二区三区| 色综合久久99| 欧美一卡在线观看| 国产精品国产三级国产aⅴ无密码| 一区二区三区四区蜜桃| 久久99国产精品免费网站| 国产精品一区久久久久| 在线欧美日韩国产| 日韩欧美在线网站| 18欧美乱大交hd1984| 午夜精品久久久久| 国产麻豆日韩欧美久久| 91成人国产精品| 久久精品一区二区三区av| 亚洲动漫第一页| 成人sese在线| 91精品午夜视频| 亚洲综合免费观看高清完整版在线| 免费的成人av|