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

📄 suart2.lst

📁 基于STC51通过GPS自主定位导航FAT文件系统程序
💻 LST
字号:
C51 COMPILER V7.20   SUART2                                                                11/03/2007 17:08:46 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE SUART2
OBJECT MODULE PLACED IN .\output\suart2.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE src\driver\suart2.c LARGE ORDER INCDIR(.\src\include) DEBUG OBJECTEXTEND PR
                    -INT(.\output\suart2.lst) OBJECT(.\output\suart2.obj)

line level    source

   1          //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&软串口2驱动&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
   2          //*文件名称:suart2.c
   3          
   4          //*文件作用:串口驱动
   5          
   6          //*文件作者:翟  鹏
   7          
   8          //*创建日期:2004年5月
   9          //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  10          
  11          
  12          
  13          #include <include.h>
  14          
  15          
  16          
  17          uchar idata suart2_th0=0;
  18          uchar idata suart2_tl0=0;
  19          uchar idata suart2_th0_1_3=0;//设置到BIT宽度的1/3处
  20          uchar idata suart2_tl0_1_3=0;//设置到BIT宽度的1/3处
  21          
  22          uchar idata SUART2_RI=0;//接收数据位计数器
  23          uchar bdata SUART2_BUF=0;//数据寄存器
  24          sbit SUART2_BUF_HIGH=SUART2_BUF^7;//数据寄存器最高位-用于接收移位
  25          
  26          uchar idata SUART2_TI=0;//发送数据位计数器
  27          uchar bdata SUART2_SBUF=0;//数据寄存器
  28          sbit SUART2_SBUF_LOW=SUART2_SBUF^0;//数据寄存器最低位-用于发送移位
  29          
  30          uchar  idata suart2_fifo[SUART2_FIFO_SIZE];//接收FIFO
  31          uchar  idata  suart2_fifo_in=0;//写指针
  32          uchar  idata  suart2_fifo_out=0;//读指针
  33          
  34          
  35          
  36          //********************************************************************************************************
             -***************
  37          //函数作用:软串口起始位中断服务程序
  38          //参数说明:无
  39          //注意事项:
  40          //返回说明:无
  41          //********************************************************************************************************
             -***************
  42          static void suart2_isr(void) interrupt IRQ_EXTINT1 //using USE_EXTINT
  43          {
  44   1              EX1=0;//关INT1中断
  45   1              TH0=suart2_th0_1_3;//设置到BIT宽度的1/3处
  46   1              TL0=suart2_tl0_1_3;//设置到BIT宽度的1/3处
  47   1              SUART2_RI=1;//送接收标志
  48   1              TR0=1;//开Timer0
  49   1      }
  50          
  51          //********************************************************************************************************
             -***************
C51 COMPILER V7.20   SUART2                                                                11/03/2007 17:08:46 PAGE 2   

  52          //函数作用:定时器0中断服务程序
  53          //参数说明:无
  54          //注意事项:注意中断号码和优先级设置  使用R2寄存器
  55          //返回说明:无
  56          //********************************************************************************************************
             -***************
  57          static void timer0_isr(void) interrupt IRQ_TIMER0 //using USE_EXTINT
  58          {
  59   1              //装载初值
  60   1              TL0=suart2_tl0;
  61   1              TH0=suart2_th0;
  62   1      
  63   1              //*******************数据接收*****************************
  64   1              if(SUART2_RI)
  65   1              {
  66   2                      if(SUART2_RI==1)//起始位
  67   2                      {
  68   3                              //起始位容错
  69   3                              if(SUART2_RXD)
  70   3                              {
  71   4                                      SUART2_RI=0;//清数据位计数器
  72   4                                      EX1=1;//开INT1中断 准备接收下一个字节
  73   4                              }
  74   3                              else
  75   3                              {
  76   4                                      SUART2_RI++;
  77   4                              }
  78   3                      }
  79   2                      else if(SUART2_RI==10)//停止位
  80   2                      {       
  81   3                              //停止位容错
  82   3                              if(SUART2_RXD)
  83   3                              {
  84   4                                      //送FIFO缓冲区
  85   4                                      suart2_fifo[suart2_fifo_in++]=SUART2_BUF;
  86   4                                      if(suart2_fifo_in>=SUART2_FIFO_SIZE)suart2_fifo_in=0;
  87   4                              }
  88   3                              SUART2_RI=0;//清数据位计数器
  89   3                              EX1=1;//开INT1中断 准备接收下一个字节
  90   3                      }
  91   2                      else//数据位
  92   2                      {
  93   3                              SUART2_BUF>>=1;
  94   3                              SUART2_BUF_HIGH=SUART2_RXD;
  95   3                              SUART2_RI++;
  96   3                      }
  97   2              }
  98   1      
  99   1              //**********************数据发送***************************
 100   1              if(SUART2_TI)
 101   1              {
 102   2                      if(SUART2_TI==1)//起始位
 103   2                      {
 104   3                              SUART2_TXD=0;
 105   3                              SUART2_TI++;
 106   3                      }
 107   2                      else if(SUART2_TI==10)//停止位
 108   2                      {
 109   3                              SUART2_TXD=1;
 110   3                              SUART2_TI=0;//清数据位计数器
 111   3                      }
 112   2                      else//数据位
C51 COMPILER V7.20   SUART2                                                                11/03/2007 17:08:46 PAGE 3   

 113   2                      {
 114   3                              SUART2_TXD=SUART2_SBUF_LOW;
 115   3                              SUART2_SBUF>>=1;
 116   3                              SUART2_TI++;
 117   3                      }       
 118   2              }
 119   1      
 120   1              //如果没有接收 也没有发送 关闭Timer0
 121   1              if(!SUART2_RI && !SUART2_TI)TR0=0;//关Timer0
 122   1      }
 123          
 124          //********************************************************************************************************
             -***************
 125          //函数作用:清除串口缓存的数据
 126          //参数说明:无
 127          //注意事项:
 128          //返回说明:无
 129          //********************************************************************************************************
             -***************
 130          void suart2_flush(void)
 131          {
 132   1              suart2_fifo_in=suart2_fifo_out=0;       
 133   1      }
 134                  
 135          //********************************************************************************************************
             -***************
 136          //*函数作用:初始化
 137          //*参数说明:
 138          //*注意事项:
 139          //*返回说明:无
 140          //********************************************************************************************************
             -***************
 141          void suart2_init(uint baud)
 142          {       
 143   1              ET0=0;//关中断
 144   1              PT0=1;//高优先级
 145   1              TMOD|=0x01;//timer0方式1---16位计数器
 146   1              TR0=0;//关闭timer0
 147   1              suart2_th0=(65536-((ulong)F_OSC)/baud/CLOCK_COUNT)>>8;//计算初始值
 148   1              suart2_tl0=(65536-((ulong)F_OSC)/baud/CLOCK_COUNT)&0x00FF;//计算初始值
 149   1              suart2_tl0+=30;//修正
 150   1              suart2_th0_1_3=(65536-((ulong)F_OSC)/baud/CLOCK_COUNT/3)>>8;//计算下降沿1/3
 151   1              suart2_tl0_1_3=(65536-((ulong)F_OSC)/baud/CLOCK_COUNT/3)&0x00FF;//计算下降沿1/3
 152   1              ET0=1;//开中断
 153   1              
 154   1              EX1=0;//关INT1中断
 155   1              IT1=0;//低电平触发模式
 156   1              PX1=1;//高优先级
 157   1              suart2_flush();//清缓冲区
 158   1              EX1=1;//开INT1中断
 159   1      }
 160          
 161          //********************************************************************************************************
             -***************
 162          //函数作用:查询软串口 如果有数据读取一个字节
 163          //参数说明:ch---读取字符存放地址
 164          //注意事项:
 165          //返回说明:如果有数据返回1
 166          //********************************************************************************************************
             -***************
 167          uchar suart2_read_char(uchar *ch)
 168          {
C51 COMPILER V7.20   SUART2                                                                11/03/2007 17:08:46 PAGE 4   

 169   1              if(suart2_fifo_out==suart2_fifo_in)return 0;
 170   1              *ch=suart2_fifo[suart2_fifo_out];//得到当前要读取的字符
 171   1              suart2_fifo_out++;//指向下一个要读取的字符
 172   1              if(suart2_fifo_out==SUART2_FIFO_SIZE)suart2_fifo_out=0;//如果到了fifo末尾 则重从头开始
 173   1              return 1;
 174   1      }
 175          
 176          //********************************************************************************************************
             -***************
 177          //函数作用:向串口发送一个字符
 178          //参数说明:ch---要发送的字符
 179          //注意事项:
 180          //返回说明:无
 181          //********************************************************************************************************
             -***************
 182          void suart2_write_char(uchar ch)
 183          {
 184   1              SUART2_SBUF=ch;//送发送数据
 185   1              SUART2_TI=1;//送发送标志
 186   1              TR0=1;//开Timer0
 187   1              while(SUART2_TI);//如果TI说明还没有发送完毕---死等
 188   1      }
 189          
 190          //********************************************************************************************************
             -***************
 191          //函数作用:向串口发送字符串
 192          //参数说明:str---要发送的字符串
 193          //注意事项:
 194          //返回说明:无
 195          //********************************************************************************************************
             -***************
 196          void suart2_write_str(uchar *str)
 197          {
 198   1              while(*str)suart2_write_char(*str++);
 199   1      }
 200          
 201          //********************************************************************************************************
             -***************
 202          //函数作用:向串口发送缓冲区的数据
 203          //参数说明:
 204          //注意事项:
 205          //返回说明:无
 206          //********************************************************************************************************
             -***************
 207          //void suart2_write_buf(uchar *buffer, uint length)
 208          //{     
 209          //      while(length--)
 210          //      {
 211          //              suart2_write_char(*buffer++);
 212          //      }
 213          //}
 214          
 215          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    527    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----       5
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2    ----
   IDATA SIZE       =     24    ----
C51 COMPILER V7.20   SUART2                                                                11/03/2007 17:08:46 PAGE 5   

   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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