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

📄 gm8125.lst

📁 基于51平台的串口一扩五芯片GM8125的测试程序
💻 LST
字号:
C51 COMPILER V7.50   GM8125                                                                03/09/2005 21:43:22 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE GM8125
OBJECT MODULE PLACED IN GM8125.OBJ
COMPILER INVOKED BY: E:\学习工具\Keil51\C51\BIN\C51.EXE GM8125.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************************************************
   2          * 文件:GM8125.C
   3          * 功能:串口一扩五芯片GM8125读写函数库
   4          * 作者:宋智宁
   5          * 日期:2005.3.7
   6          * 备注:晶振fosc = 11.0592MHz,暂不支持波特率115200bps 
   7          *       中断接收函数见中断函数库uart.c/uart51.c
   8          *********************************************************************************/
   9          #include "config.h"
  10          
  11          //--数据端口和控制端口定义-------------------------
  12          #ifdef C51_MX  //P89C669
                static unsigned char far UartCtrl _at_ 0x380000;
                static unsigned char far UartState _at_ 0x280000;
              #else  //AT89S52
  16            static unsigned char xdata UartCtrl _at_ 0x3800;
  17            static unsigned char xdata UartState _at_ 0x2800;
  18          #endif
  19          
  20          
  21          /******************************************************************************
  22          * 名称:DelayXms(uint16 x)
  23          * 功能:延时X毫秒子程序
  24          * 入口参数:uint16 x ----x ms
  25          * 出口参数:无
  26          * 说明:CPU--669(6时钟周期)
  27          *               晶振--11.0592MHz
  28          ******************************************************************************/
  29          void DelayXms(uint16 x)
  30          {
  31   1        uint16 data i;
  32   1        while(x!=0)
  33   1        {
  34   2              for(i=0; i<335; i++);
  35   2          x--;
  36   2        }
  37   1      } 
  38          
  39          
  40          /******************************************************************************
  41          * 名称:GM8125_Init(uint8 frame, uint16 baud)
  42          * 功能:GM8125初始化子程序
  43          * 入口参数:uint8 frame--帧格式(0--10bit/f,1--11bit/f)
  44          *           uint16 baud--母串口波特率(多通道模式)
  45          * 出口参数:无
  46          * 说明:串口初始化,用定时器1/波特率发生器, 上电时调用
  47          *       复位后GM8125的帧格式为11bit, 母串口波特率为7200bps
  48          *       晶振fosc = 11.0592MHz,暂不支持波特率115200bps 
  49          ******************************************************************************/
  50          void GM8125_Init(uint8 frame, uint16 baud)
  51          { 
  52   1        EA = 0; //初始化时关总中断
  53   1      
  54   1      //----Reset-----------------------------
  55   1        UartCtrl = 0x7f;  //RST=0
C51 COMPILER V7.50   GM8125                                                                03/09/2005 21:43:22 PAGE 2   

  56   1        DelayXms(200);
  57   1        UartCtrl = 0xff;  //RST=1
  58   1      
  59   1        Uart_Init(1,3,7200); //复位后GM8125的帧格式为11bit, 母串口波特率为7200bps
  60   1      
  61   1        GM8125_ChgBaud(frame, baud);  //改变GM8125后,同时改变主机的波特率
  62   1      
  63   1        EA = 1; //开总中断
  64   1      }
  65          
  66          /******************************************************************************
  67          * 名称:GM8125_ChgBaud(uint8 frame, uint16 baud)
  68          * 功能:改变GM8125母串口波特率和帧格式子程序
  69          * 入口参数:uint8 frame--帧格式(0--10bit/f,1--11bit/f)
  70          *           uint16 baud--母串口波特率(多通道模式)
  71          * 出口参数:int8 res--1表示成功,-1表示失败
  72          * 说明:改变GM8125后,同时改变主机的波特率(多通道模式)
  73          *       最多写3次控制字,若失败则返回-1
  74          *       晶振fosc = 11.0592MHz,暂不支持波特率115200bps 
  75          ******************************************************************************/
  76          int8 GM8125_ChgBaud(uint8 frame, uint16 baud)
  77          {
  78   1        uint8 num=3,cmd=0xf0; //命令控制字(高4位必须全为1)
  79   1        uint8 temp;
  80   1      
  81   1        if(frame==1) cmd = cmd | 0x08;  //11bit
  82   1        switch(baud)
  83   1        {
  84   2          case 7200: cmd = cmd + 0x00;
  85   2                                 break;
  86   2              case 14400: cmd = cmd + 0x01;
  87   2                                 break;
  88   2              case 28800: cmd = cmd + 0x02;
  89   2                                 break;
  90   2              case 57600: cmd = cmd + 0x03;
  91   2                                 break;
  92   2              //case 115200: cmd = cmd + 0x04;
  93   2              //                 break;
  94   2              default:   cmd = cmd + 0x00;
  95   2                                 break;
  96   2        }     
  97   1      
  98   1      for(;num>0;num--)       //最多写3次控制字,若失败则返回-1
  99   1      {                                                                                            
 100   2        UartCtrl = 0x81;  //STADD2~0=000,SRADD2~0=000
 101   2        DelayXms(1);
 102   2        UartCtrl = 0x80;      //MS=0, 写命令字
 103   2        DelayXms(1);
 104   2        Uart_Send_Byte(1, &cmd, 1); //发送命令字  
 105   2        
 106   2        DelayXms(100);  //delay
 107   2        
 108   2        UartCtrl = 0x81;  //MS=1, 读命令字
 109   2        Uart_Rev_Byte(1, &temp, 1); //读命令字 
 110   2        if(temp==cmd) break;  //读命令字  
 111   2      }          
 112   1        UartCtrl = 0xf2;  //MS=0,STADD2~0=001,SRADD2~0=111,使命令字生效
 113   1        
 114   1      
 115   1        if(num==0) return -1; //最多写3次控制字,若失败则返回-1
 116   1      
 117   1      //**改变主机的波特率***************************
C51 COMPILER V7.50   GM8125                                                                03/09/2005 21:43:22 PAGE 3   

 118   1        EA = 0; //初始化时关总中断
 119   1      
 120   1        if(frame==0) 
 121   1          Uart_Init(1,1,baud); //mode=1(10bit)
 122   1        else
 123   1          Uart_Init(1,3,baud); //mode=3(11bit)
 124   1      
 125   1        EA = 1; //开总中断
 126   1      
 127   1        return 1;
 128   1      }
 129          
 130          /******************************************************************************
 131          * 名称:GM8125_Send(uint8 mode, uint8 channel, uint8 buf[], uint8 len)
 132          * 功能:GM8125数据发送子程序
 133          * 入口参数:uint8 mode--工作模式(0--单通道模式, 1--多通道模式)
 134          *           uint8 channel--通道号(1~5)
 135          *           uint8 buf[]--数据指针
 136          *           uint8 len--数据长度
 137          * 出口参数:无
 138          * 说明:
 139          ******************************************************************************/
 140          void GM8125_Send(uint8 mode, uint8 channel, uint8 buf[], uint8 len)
 141          {
 142   1        uint8 i,j,temp=0xff; //端口(RST=1,MS=1)       
 143   1      
 144   1        if(mode==0) //单通道模式
 145   1        {
 146   2          temp = (temp&0x81) + (channel<<4) + (channel<<1);  //发送和接收通道号(1~5)  
 147   2      
 148   2          UartCtrl = temp;  //MS=1,STADD2~0=channel,选择子串口
 149   2      
 150   2          Uart_Send_Byte(1,buf,len);  //发送数据      
 151   2        }
 152   1        else  //多通道模式
 153   1        {
 154   2          temp = (temp&0xf0) + (channel<<1);  //发送通道号(1~5)       
 155   2      
 156   2          for(i=0; i<len; i++)
 157   2          {        
 158   3            UartCtrl = temp;  //MS=0,STADD2~0=channel,选择子串口 
 159   3                Uart_Send_Byte(1,buf+i,1);    //发送1B数据
 160   3      
 161   3            UartCtrl = 0xf0;  //MS=0,STADD2~0=000,不选择子串口
 162   3                j = 0x00;
 163   3                Uart_Send_Byte(1,&j,1);  //发送5个无效数据
 164   3                Uart_Send_Byte(1,&j,1);
 165   3                Uart_Send_Byte(1,&j,1);
 166   3                Uart_Send_Byte(1,&j,1);
 167   3                Uart_Send_Byte(1,&j,1);
 168   3              }
 169   2              UartCtrl = temp;
 170   2        }
 171   1      }
 172          
 173          /******************************************************************************
 174          * 名称:GM8125_Rev(GM8125BUF *buffer, uint8 len)
 175          * 功能:GM8125数据接收子程序
 176          * 入口参数:GM8125BUF *buffer--接收缓冲区的结构指针
 177          *           uint8 len--数据长度
 178          * 出口参数:int8 res--1表示正常接收, -1表示缓冲区溢出
 179          * 说明:用等待接收方式
C51 COMPILER V7.50   GM8125                                                                03/09/2005 21:43:22 PAGE 4   

 180          ******************************************************************************/
 181          int8 GM8125_Rev(GM8125BUF *buffer, uint8 len)
 182          {
 183   1        uint8 i,j,temp;
 184   1      
 185   1        for(i=0; i<len; i++)
 186   1        {
 187   2              Uart_Rev_Byte(1,&temp,1); //接收1Byte
 188   2              
 189   2              j = UartState&0x07; //读子串口号
 190   2              if(buffer->Len[j-1]>=sizeof(buffer->Ch[0]))
 191   2                return -1; //缓冲区溢出
 192   2              else
 193   2              {                   
 194   3                buffer->Ch[j-1][buffer->Len[j-1]] = temp;
 195   3                buffer->Len[j-1]++;  //长度加1
 196   3              } 
 197   2        }
 198   1        return 1;
 199   1      }
 200          
 201          /******************************************************************************
 202          * 名称:GM8125_Byte_Rev(uint8 dat)
 203          * 功能:GM8125数据接收处理子程序(供中断服务程序调用)
 204          * 入口参数:uint8 dat--接收的数据
 205          * 出口参数:无
 206          * 说明:供中断服务程序调用
 207          * 使用全局变量:GM8125BUF SerBuf--串口接收缓冲区的结构
 208          ******************************************************************************/
 209          void GM8125_Byte_Rev(uint8 dat)
 210          {
 211   1        uint8 j;
 212   1      
 213   1        j = UartState&0x07; //读子串口号
 214   1        if(SerBuf.Len[j-1]<sizeof(SerBuf.Ch[0]))          
 215   1        {                 
 216   2          SerBuf.Ch[j-1][SerBuf.Len[j-1]] = dat;
 217   2              SerBuf.Len[j-1]++;  //长度加1
 218   2        } 
 219   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    686    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      25
   IDATA SIZE       =   ----    ----
   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 + -