⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 io_uart232.lst

📁 51的IO口模拟UARTRS232 波特率9600 Fosc:22.1184MHz 已在keilc51调试通过
💻 LST
字号:
C51 COMPILER V7.10   IO_UART232                                                            11/09/2006 11:52:13 PAGE 1   


C51 COMPILER V7.10, COMPILATION OF MODULE IO_UART232
OBJECT MODULE PLACED IN io_uart232.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE io_uart232.c LARGE BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*
   2           *******************************************************************************
   3           *51 IO口模拟串口通讯C源程序
   4           * Copyright (Ren) 17-Oct-2006
   5           * All rights   reserved
   6           * 文件名称: C51io_uart_t0.C
   7           * 当前版本: 2.0V
   8           * 作    者: JACK.REN(任永)
   9           * 完成日期: Nov./02/2006
  10           *------------------------------------------------------------------------------
  11           * 取代版本: 1.0V
  12           * 作    者: JACK.REN(任永)
  13           * 完成日期: Oct./30/2006
  14           *------------------------------------------------------------------------------
  15           *******************************************************************************
  16           * 硬件描述
  17           *              VCC:   DC-5V
  18           *              VSS:    DC-0V
  19           *              CPU:    MCS51
  20           *              Fosc:   CPU —— 22.1184 MHz
  21           *              RS232 IC: MAX232EPA
  22           *******************************************************************************
  23           *              MCS51 IO模拟UART(232)通讯占用MCS51硬件资源
  24           *              1、占用引脚端口:P3.0,P3.1;
  25           *
  26           * 通讯方式:
  27           *              1、Baudrate 9600,8位数据位,1位起始位,1位停止位,无效验位;
  28           *
  29           *******************************************************************************
  30           * 功能描述
  31           *              按上层函数提供的数据播发语音。如在播发语音时,又有新的语音到来,放弃
  32           * 当前正在播发的语音,立即播放新的语音。
  33           *******************************************************************************
  34           */
  35          #include        "marco.H"
  36          
  37          #include        "IO_UART_H.H"
  38          #include        <string.H>
  39          
  40          #include        <stdio.H>
  41          /*
  42          **-----------------------------------------------------
  43          ** 函数原型:    void  IO_UART_Send_1Byte( uint_8 In_ch )
  44          ** 功能描述:    该函数用于模拟232端口发送一个字节
  45          ** 参数说明:    In_ch   将要从模拟232端口发送的——
  46          **                                              字节缓存寄存器。
  47          **
  48          ** 返回值:      无
  49          **                              
  50          ** 全局变量:    无
  51          **
  52          ** 调用模块:    无
  53          **
  54          ** 作 者:              任永
  55          ** 日 期:              2006年10月30日
C51 COMPILER V7.10   IO_UART232                                                            11/09/2006 11:52:13 PAGE 2   

  56          **-----------------------------------------------------
  57          */
  58          void  IO_UART_Send_1Byte( uint_8 In_ch )
  59          {
  60   1              uint_8 xdata ii, iVal;
  61   1              uint_8 xdata iBaud;
  62   1      
  63   1              Dis_CPU_ISR();
  64   1      
  65   1              iVal = In_ch;
  66   1              InitAUART232_IO( );
  67   1              A_TXD = LOW; //start bit 
  68   1              iBaud = UART_baudrate + 1;
  69   1              BaudrateDelay( iBaud );
  70   1              _nop_();_nop_();
  71   1              // 发送数据位,低位在前
  72   1              for (ii = 0; ii < 8; ii++ )
  73   1              {
  74   2                      iVal >>= 1;
  75   2                      A_TXD = CY;     // data bit
  76   2                      iBaud = UART_baudrate + 1;
  77   2                      BaudrateDelay( iBaud );
  78   2              }
  79   1      
  80   1              _nop_();_nop_();_nop_();
  81   1              A_TXD = HIGH; // stop bit
  82   1      
  83   1              iBaud = UART_baudrate + 3;
  84   1              BaudrateDelay( iBaud );
  85   1      
  86   1              En_CPU_ISR();
  87   1      }// end of void  IO_UART_Send_1Byte( uint_8 In_ch )
  88          
  89          
  90          
  91          /*
  92          **-----------------------------------------------------
  93          ** 函数原型:    uint_8 IO_UART_Get_1Byte( void )
  94          ** 功能描述:    该函数用于模拟232端口接收一个字节
  95          ** 参数说明:    无
  96          **
  97          ** 返回值:      uint_8  模拟232端口接收到的——
  98          **                                                              字节临时寄存器。
  99          **                              
 100          ** 全局变量:    无
 101          **
 102          ** 调用模块:    无
 103          **
 104          ** 作 者:              任永
 105          ** 日 期:              2006年10月30日
 106          **-----------------------------------------------------
 107          */
 108          
 109          uint_8 IO_UART_Get_1Byte( void )
 110          {
 111   1              uint_8 xdata out_ch, ibuf1, ibuf2, ibuf3, ibuf4, ii;
 112   1              uint_8 xdata iBaud;
 113   1      
 114   1              Dis_CPU_ISR();
 115   1      
 116   1              A_RXD = HIGH;
 117   1              while ( A_RXD == HIGH ) // 等待起始位 2Mach
C51 COMPILER V7.10   IO_UART232                                                            11/09/2006 11:52:13 PAGE 3   

 118   1              {
 119   2                      //if (10mS超时判断)
 120   2                      {
 121   3                      //IO_UART_Get_FlagReg = IO_UART_Get_Err;
 122   3                      //return ( 0 );
 123   3                      ;
 124   3                      //...................................
 125   3                      }
 126   2              }
 127   1              iBaud = UART_baudrate + 1;
 128   1              BaudrateDelay( iBaud );
 129   1              _nop_();_nop_();_nop_();_nop_();
 130   1      
 131   1              // read data bit
 132   1              for (out_ch = ii = 0; ii < 8; ii++ )
 133   1              {
 134   2                      ibuf1 = ibuf2 = ibuf3 = 0;
 135   2      
 136   2                      // 集中到中心频率度数
 137   2                      iBaud = 8;
 138   2                      BaudrateDelay( iBaud );
 139   2                      ibuf1 = A_RXD; //47
 140   2                      iBaud = 2;
 141   2                      BaudrateDelay( iBaud );
 142   2                      ibuf2 = A_RXD;
 143   2                      iBaud = 2;
 144   2                      BaudrateDelay( iBaud );
 145   2                      ibuf3 = A_RXD;
 146   2                      // 数据干扰识别
 147   2                      if ( ibuf1 == ibuf2 )
 148   2                      {
 149   3                              ibuf4 = ibuf1;
 150   3                              _nop_();_nop_();_nop_();_nop_();_nop_();
 151   3                              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
 152   3                      }
 153   2                      else if ( ibuf2 == ibuf3 )
 154   2                      {
 155   3                              ibuf4 = ibuf2;
 156   3                              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
 157   3                      }
 158   2                      else if (ibuf1 == ibuf3) 
 159   2                      {
 160   3                              ibuf4 = ibuf3;
 161   3                      }
 162   2                      else
 163   2                      {
 164   3                              // 通讯失败
 165   3                              IO_UART_Get_FlagReg = IO_UART_Get_Err;
 166   3                              break;
 167   3                              //.............................
 168   3                      }
 169   2                      out_ch >>= 1;
 170   2                      if ( ibuf4 )
 171   2                      {
 172   3                              out_ch |= 0x80;
 173   3                      }
 174   2                      else
 175   2                      {
 176   3                              _nop_();_nop_();_nop_();_nop_();_nop_();
 177   3                      }
 178   2      
 179   2                      iBaud = 1;
C51 COMPILER V7.10   IO_UART232                                                            11/09/2006 11:52:13 PAGE 4   

 180   2                      BaudrateDelay( iBaud );
 181   2              }
 182   1              // check stop bit
 183   1      
 184   1              iBaud = UART_baudrate;
 185   1              BaudrateDelay( iBaud );
 186   1              if ( A_RXD )
 187   1              {
 188   2                      IO_UART_Get_FlagReg = IO_UART_Get_OK;
 189   2              }
 190   1              else
 191   1              {
 192   2                      IO_UART_Get_FlagReg = IO_UART_Get_Err;
 193   2              }
 194   1              A_RXD = HIGH;
 195   1      
 196   1              En_CPU_ISR();
 197   1              return ( out_ch );
 198   1      }// end of uint_8 IO_UART_Get_1Byte( void )
 199          
 200          
 201          
 202          /*
 203          **-----------------------------------------------------
 204          ** 函数原型:    void  main( void )
 205          ** 功能描述:    该函数用于调度个功能函数
 206          ** 参数说明:    无
 207          **
 208          ** 返回值:      无
 209          **                              
 210          ** 全局变量:    无
 211          **
 212          ** 调用模块:    无
 213          **
 214          ** 作 者:              任永
 215          ** 日 期:              2006年10月30日
 216          **-----------------------------------------------------
 217          */
 218          
 219          void  main( void )
 220          {
 221   1              uint_8 xdata GetChar;
 222   1              uint_8 xdata Txt_buf1[ ] = {"调试软件\n"};
 223   1              uint_8 xdata Txt_buf2[ ] = {"KeilC51汉字内码测试软件\n测试码:三二一\n "};
 224   1              uint_8 xdata Txt_buf[ ] = {"调试成功,2006年11月06日\n"};
 225   1              uint_8 xdata iVal, ilen;
 226   1      
 227   1      
 228   1              ilen = strlen( Txt_buf2 );
 229   1              for (iVal = 0; iVal < ilen; iVal++ )
 230   1              {
 231   2                      IO_UART_Send_1Byte( Txt_buf2[ iVal ] );
 232   2              }
 233   1              ilen = strlen( Txt_buf1 );
 234   1              for (iVal = 0; iVal < ilen; iVal++ )
 235   1              {
 236   2                      IO_UART_Send_1Byte( Txt_buf1[ iVal ] );
 237   2              }
 238   1      
 239   1              //******************** 功能测试代码 Start ******************
 240   1              ilen = strlen( Txt_buf );
 241   1              GetChar = 0;
C51 COMPILER V7.10   IO_UART232                                                            11/09/2006 11:52:13 PAGE 5   

 242   1              while ( 1 )
 243   1              {
 244   2      
 245   2                      GetChar = IO_UART_Get_1Byte();//接收1字节。
 246   2      
 247   2              }// end of while ( 1 )
 248   1              //******************** 功能测试代码 End *******************
 249   1      
 250   1      }// end of void main( void )


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    386    ----
   CONSTANT SIZE    =     76    ----
   XDATA SIZE       =      4      78
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      4    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -