SoftUart.c
上传用户:xhjmsc
上传日期:2019-09-13
资源大小:389k
文件大小:4k
源码类别:

传真(Fax)编程

开发平台:

C/C++

  1. //soft UART
  2. //new bryan Jan. 23, 2007
  3. //
  4. #include "includeH.h"
  5. unsigned char SoftUartRxOneFrame(void)
  6. {
  7.      unsigned char ucGeneralCount=0,ucSoftUartRxData=0;
  8.      while ((SOFTUART_PORT_IN & bitSOFTUARTRX) == bitSOFTUARTRX)//wait start bit Low
  9.      {  
  10.       if ((gucGeneralStatus & bitModemActive) == bitModemActive)
  11.         break;
  12.       if (((KEY_PORT_IN & bitKeyRingNumDec) != bitKeyRingNumDec) || 
  13.         ((KEY_PORT_IN & bitKeyRingNumAdd) != bitKeyRingNumAdd) ||
  14.         ((KEY_PORT_IN & bitKeyAutoMode) != bitKeyAutoMode) ||
  15.         ((KEY_PORT_IN & bitKeyManualMode) != bitKeyManualMode)) //||
  16.         //((KEY_PORT_IN & bitKeySendFaxSignal) != bitKeySendFaxSignal))
  17.         break;
  18.      } 
  19.      if ( (SOFTUART_PORT_IN & bitSOFTUARTRX) != bitSOFTUARTRX)
  20.      {
  21.      delay1us(6);//SoftUartDelay();
  22.      for (ucGeneralCount=0;ucGeneralCount<8;ucGeneralCount++)
  23.      {
  24.         delay1us(2);//SoftUartDelayHalf();
  25.         ucSoftUartRxData=ucSoftUartRxData>>1;
  26.         if ((SOFTUART_PORT_IN & bitSOFTUARTRX) == bitSOFTUARTRX)
  27.           ucSoftUartRxData |= BIT7;//BIT7;//(1<<ucGeneralCount);//set   Rx bit
  28.         else
  29.           {ucSoftUartRxData &= ~BIT7;__no_operation();__no_operation();__no_operation();}//~BIT7;//~(1<<ucGeneralCount);//set   Rx bit
  30.         
  31.         delay1us(2);//SoftUartDelayHalf();
  32.         __no_operation();
  33.         __no_operation();
  34.         __no_operation();
  35.         __no_operation();
  36.         __no_operation();  
  37.      }
  38.      //delay1us(6);
  39.      while ((SOFTUART_PORT_IN & bitSOFTUARTRX) != bitSOFTUARTRX) //wait stop bit High
  40.      {  
  41.       if ((SOFTUART_PORT_IN & bitSOFTUARTRX) == bitSOFTUARTRX)
  42.         break;
  43.       gucFrhErrorStatus=0x00;//
  44.         if (gwTimeOverflowCount++ == 0xffff)
  45.            {gucFrhErrorStatus=0x03;gwTimeOverflowCount=0;break;}
  46.      }
  47.      //delay1us(6);//SoftUartDelay();
  48.      }
  49.      return ucSoftUartRxData;       
  50. }
  51. void SoftUartTxOneFrame(unsigned char ucSoftUartTxData)
  52. {
  53.      unsigned char ucGeneralCount=0;
  54.      __disable_interrupt();
  55.      SOFTUART_PORT_OUT &= ~bitSOFTUARTTX; //reset Tx bit
  56.      delay1us(7);//115 9600//57 19200//17 57600 //7 115200
  57.      //__no_operation();
  58.      //__no_operation();
  59.      //__no_operation();
  60.      //delay1us(8);
  61.      for (ucGeneralCount=0;ucGeneralCount<8;ucGeneralCount++)
  62.      {
  63.         if ((ucSoftUartTxData & BIT0) == BIT0)
  64.           {SOFTUART_PORT_OUT |= bitSOFTUARTTX;} //set   Tx bit
  65.         else
  66.           {SOFTUART_PORT_OUT &= ~bitSOFTUARTTX;__no_operation();__no_operation();__no_operation();} //reset Tx bit
  67.         delay1us(6);//115 9600 //56 19200//16 57600 //6 115200
  68.         //__no_operation();
  69.         __no_operation();
  70.         ucSoftUartTxData=ucSoftUartTxData>>1;
  71.         
  72.      }
  73.      __no_operation();
  74.      __no_operation();
  75.      SOFTUART_PORT_OUT |= bitSOFTUARTTX;  //set   Tx bit
  76.      delay1us(7);//115 9600 //17 57600//7 115200
  77.      _EINT();                             //enable interrupt   
  78. }
  79. void SoftUartDelay7us(void)
  80. {
  81.    unsigned wGeneralCount=0;
  82.    //BauRate1200 wGeneralCount<831 BauRate9600 wGeneralCount<96 BauRate115200 6 42 19200
  83.    for (wGeneralCount=0;wGeneralCount<4;wGeneralCount++)
  84.    {
  85.      __no_operation();
  86.    }
  87. }
  88. void SoftUartDelay8p7us(void)
  89. {
  90.    unsigned wGeneralCount=0;
  91.    //BauRate1200 wGeneralCount<831 BauRate9600 wGeneralCount<96 BauRate115200 6 42 19200
  92.    for (wGeneralCount=0;wGeneralCount<4;wGeneralCount++)
  93.    {
  94.      __no_operation();
  95.      __no_operation();
  96.    }
  97. }
  98. void SoftUartDelay(void)
  99. {
  100.    unsigned wGeneralCount=0;
  101.    //BauRate1200 wGeneralCount<831 BauRate9600 wGeneralCount<96 BauRate115200 6 42 19200
  102.    for (wGeneralCount=0;wGeneralCount<96;wGeneralCount++)
  103.    {
  104.      __no_operation();
  105.    }
  106. }   
  107. void SoftUartDelayHalf(void)
  108. {
  109.    unsigned wGeneralCount=0;
  110.    for (wGeneralCount=0;wGeneralCount<48;wGeneralCount++)//BauRate1200 wGeneralCount<831 BauRate9600 wGeneralCount<96
  111.    {
  112.      __no_operation();
  113.    }
  114. }
  115. void Delay1us(void)
  116. {
  117.      __no_operation();
  118.      __no_operation();
  119.      __no_operation();
  120.      __no_operation();
  121.      __no_operation();
  122.      __no_operation();
  123.      __no_operation();
  124.      __no_operation();