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

📄 suart1.lst

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


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

line level    source

   1          //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&软串口1驱动&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
   2          //*文件名称:suart1.c
   3          
   4          //*文件作用:串口驱动
   5          
   6          //*文件作者:翟  鹏
   7          
   8          //*创建日期:2004年5月
   9          //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  10          
  11          
  12          
  13          #include <include.h>
  14          
  15          
  16          
  17          uchar idata suart1_th2=0;
  18          uchar idata suart1_tl2=0;
  19          uchar idata suart1_th2_1_3=0;//设置到BIT宽度的1/3处
  20          uchar idata suart1_tl2_1_3=0;//设置到BIT宽度的1/3处
  21          
  22          uchar idata SUART1_RI=0;//接收数据位计数器
  23          uchar bdata SUART1_BUF=0;//数据寄存器
  24          sbit SUART1_BUF_HIGH=SUART1_BUF^7;//数据寄存器最高位-用于接收移位
  25          
  26          uchar idata SUART1_TI=0;//发送数据位计数器
  27          uchar bdata SUART1_SBUF=0;//数据寄存器
  28          sbit SUART1_SBUF_LOW=SUART1_SBUF^0;//数据寄存器最低位-用于发送移位
  29          
  30          uchar idata suart1_fifo[SUART1_FIFO_SIZE];//接收FIFO
  31          uchar idata  suart1_fifo_in=0;//写指针
  32          uchar idata  suart1_fifo_out=0;//读指针
  33          
  34          
  35          
  36          //********************************************************************************************************
             -***************
  37          //函数作用:软串口起始位中断服务程序
  38          //参数说明:无
  39          //注意事项:
  40          //返回说明:无
  41          //********************************************************************************************************
             -***************
  42          static void suart1_isr(void) interrupt IRQ_EXTINT0 //using USE_EXTINT
  43          {
  44   1              EX0=0;//关INT0中断
  45   1              TH2=suart1_th2_1_3;//设置到BIT宽度的1/3处
  46   1              TL2=suart1_tl2_1_3;//设置到BIT宽度的1/3处
  47   1              SUART1_RI=1;//送接收标志
  48   1              TR2=1;//开Timer2
  49   1      }
  50          
  51          //********************************************************************************************************
             -***************
C51 COMPILER V7.20   SUART1                                                                11/03/2007 17:08:46 PAGE 2   

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

 113   3                              SUART1_SBUF>>=1;
 114   3                              SUART1_TI++;
 115   3                      }
 116   2              }
 117   1              
 118   1              //如果没有接收 也没有发送 关闭Timer2
 119   1              if(!SUART1_RI && !SUART1_TI)TR2=0;//关Timer2
 120   1      }
 121          
 122          //********************************************************************************************************
             -***************
 123          //函数作用:清除串口缓存的数据
 124          //参数说明:无
 125          //注意事项:
 126          //返回说明:无
 127          //********************************************************************************************************
             -***************
 128          void suart1_flush(void)
 129          {
 130   1              suart1_fifo_in=suart1_fifo_out=0;       
 131   1      }
 132                  
 133          //********************************************************************************************************
             -***************
 134          //*函数作用:初始化
 135          //*参数说明:
 136          //*注意事项:
 137          //*返回说明:无
 138          //********************************************************************************************************
             -***************
 139          void suart1_init(uint baud)
 140          {       
 141   1              ET2=0;//关中断
 142   1              PT2=1;//高优先级
 143   1              TR2=0;//关闭timer2
 144   1              TH2=(65536-((ulong)F_OSC)/baud/CLOCK_COUNT)>>8;//计算初始值
 145   1              TL2=(65536-((ulong)F_OSC)/baud/CLOCK_COUNT)&0x00FF;//计算初始值
 146   1              RCAP2H=(65536-((ulong)F_OSC)/baud/CLOCK_COUNT)>>8;//计算初始值
 147   1              RCAP2L=(65536-((ulong)F_OSC)/baud/CLOCK_COUNT)&0x00FF;//计算初始值
 148   1              suart1_th2_1_3=(65536-((ulong)F_OSC)/baud/CLOCK_COUNT/3)>>8;//计算下降沿1/3
 149   1              suart1_tl2_1_3=(65536-((ulong)F_OSC)/baud/CLOCK_COUNT/3)&0x00FF;//计算下降沿1/3
 150   1              ET2=1;//开中断
 151   1              
 152   1              EX0=0;//关INT0中断
 153   1              IT0=0;//低电平触发模式
 154   1              PX0=1;//高优先级
 155   1              suart1_flush();//清缓冲区
 156   1              EX0=1;//开INT0中断
 157   1      }
 158          
 159          //********************************************************************************************************
             -***************
 160          //函数作用:查询软串口 如果有数据读取一个字节
 161          //参数说明:ch---读取字符存放地址
 162          //注意事项:
 163          //返回说明:如果有数据返回1
 164          //********************************************************************************************************
             -***************
 165          uchar suart1_read_char(uchar *ch)
 166          {
 167   1              if(suart1_fifo_out==suart1_fifo_in)return 0;
 168   1              *ch=suart1_fifo[suart1_fifo_out];//得到当前要读取的字符
C51 COMPILER V7.20   SUART1                                                                11/03/2007 17:08:46 PAGE 4   

 169   1              suart1_fifo_out++;//指向下一个要读取的字符
 170   1              if(suart1_fifo_out==SUART1_FIFO_SIZE)suart1_fifo_out=0;//如果到了fifo末尾 则重从头开始
 171   1              return 1;
 172   1      }
 173          
 174          //********************************************************************************************************
             -***************
 175          //函数作用:向串口发送一个字符
 176          //参数说明:ch---要发送的字符
 177          //注意事项:
 178          //返回说明:无
 179          //********************************************************************************************************
             -***************
 180          void suart1_write_char(uchar ch)
 181          {
 182   1              SUART1_SBUF=ch;//送发送数据
 183   1              SUART1_TI=1;//送发送标志
 184   1              TR2=1;//开Timer2
 185   1              while(SUART1_TI);//如果TI说明还没有发送完毕---死等
 186   1      }
 187          
 188          //********************************************************************************************************
             -***************
 189          //函数作用:向串口发送字符串
 190          //参数说明:str---要发送的字符串
 191          //注意事项:
 192          //返回说明:无
 193          //********************************************************************************************************
             -***************
 194          void suart1_write_str(uchar *str)
 195          {
 196   1              while(*str)suart1_write_char(*str++);
 197   1      }
 198          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    607    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----       5
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2    ----
   IDATA SIZE       =     40    ----
   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 + -