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

📄 can_gps.lst

📁 单片机和GPS接收机构成的车载卫星定位系统
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V8.05a   CAN_GPS                                                              06/20/2008 15:11:44 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE CAN_GPS
OBJECT MODULE PLACED IN can_gps.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE can_gps.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #pragma   /*small*/  large   /*large*/
   2          #include  <reg52.h>
   3          #include  <SJA_BCANCONF.H>
   4          #include  <absacc.h>
   5          #include  <string.h>
   6          #include  <intrins.h>
   7          #define   uchar  unsigned char
   8          #define   uint   unsigned int
   9          /*
  10          #define   machine_NUM    0x02              //机器号
  11          #define   function_code  0x04              //功能码
  12          #define   data_NUMER     0x10              //数据个数
  13          */
  14          idata uchar machine_NUM;             //机器号
  15          idata uchar function_code;           //功能码
  16          idata uchar data_NUMER;              //数据个数
  17          /*----------------------------------------------------------*/
  18          bdata uchar ab,d;
  19          sbit abit0=ab^0;sbit abit1=ab^1;sbit abit2=ab^2;sbit abit3=ab^3;
  20          sbit abit4=ab^4;sbit abit5=ab^5;sbit abit6=ab^6;sbit abit7=ab^7;
  21          /*************************************************************/
  22          /********************** GPS **********************************/
  23          /*************************************************************/
  24          /*----------------------------------------------------------*/
  25          code  uchar NO_GPS[]={2,4,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xC3,0xDF}; 
  26          code  uchar NO_position[]={2,4,16,'*','*','*','*','*','*','*','*','*','*','*','*','*','*',0xFA,0x0D};
  27          /*GGA的4个数据*/
  28          /*RMC的6个数据*/
  29          //xdata directe[7];
  30          /*可选数据*/
  31          //uchar satellites_state1,satellites_state2,HDOP;
  32          //GPS数据存储数组
  33          xdata uchar GPSdata[50];          //全部GPS数据串
  34          xdata uchar GPSdataCount;         //GPSdata计数器
  35          xdata uchar date[7];              //日期
  36          xdata uchar cmd[5];           //命令类型存储数组   /*$GPGGA  或   $GPRMC*/
  37          xdata uchar JD[15];           //经度
  38          xdata uchar JD_a[2];          //经度方向
  39          xdata uchar WD[15];           //纬度
  40          xdata uchar WD_a[2];          //纬度方向
  41          xdata uchar time[12];         //时间
  42          xdata uchar speed[8];         //速度
  43          xdata uchar high[8];          //高度
  44          xdata uchar angle[7];         //方位角
  45          xdata uchar use_sat[2];       //使用的卫星数
  46          xdata uchar total_sat[2];     //天空中总卫星数
  47          xdata uchar altitude[8];          //海拔高度
  48          idata uchar lock;             //定位状态
  49          //串口中断需要的变量
  50          idata uchar seg_count;        //逗号计数器
  51          idata uchar dot_count;        //小数点计数器
  52          idata uchar byte_count;       //位数计数器
  53          idata uchar cmd_number;       //命令类型,数据类型:1、GGA 2、GSV 3、RMC
  54          idata uchar mode;             //0:结束模式,1:命令模式(判断数据类型)2:数据模式(数据接受和处理)
  55          idata uchar buf_full;         //1:整句接收完成,相应数据有效。0:缓存数据无效。
C51 COMPILER V8.05a   CAN_GPS                                                              06/20/2008 15:11:44 PAGE 2   

  56          //显示需要的变量
  57          idata unsigned int dsp_count;        //刷新次数计数器
  58          idata unsigned char time_count;
  59          /*************************************************************/
  60          /********************** LCD **********************************/
  61          /*************************************************************/
  62          #define clear   0x01  //清屏幕,约1.6ms
  63          #define home    0x02  //光标回零(左上角)
  64          #define in_mode 0x06  //输入方式:0x06 地址增1,光标右移;0x04地址减1,光标左移;
  65          //#define dis_on  0x0f  //开关:bit2显示、bit1光标、bit0闪烁功能
  66          #define dis_on  0x0C  //开关:bit2显示、bit1光标、bit0闪烁功能
  67          #define dis_cur 0x1f  //光标位置设定和反白是指
  68          #define f_set   0x30  // 8位基本指令   bit4:8位或四位;bit2:基本指令或扩展指令; bit1:图形显示开关
  69          #define f_set_E 0x36  // 8位扩展指令图形显示  先送8位垂直地址,再送4位水平地址
  70          
  71          sbit P_RS=P1^3;   //4
  72          sbit P_RW=P1^4;   //5
  73          sbit P_E =P1^5;   //6  
  74          /*************************************************************/
  75          /********************** 24c256 *******************************/
  76          /*************************************************************/
  77          sbit SDA24=P2^3;           //24C256的5脚
  78          sbit SCL24=P2^2;           //24C256的6脚
  79          idata uchar cnop24;
  80          bit  ACK24;
  81          idata uchar save_point;
  82           /*---------------------------------------------------------*/
  83          /****************************************************************
  84          CAN总线数据协议:
  85          
  86                 0          "1" to "20"          目标ID
  87                 1            "0x08"             特定
  88                 2          "m" or "p" or  "d"   关节的选择
  89                 3          "1" to "3"           自身ID
  90                 4          "C" or "D"           命令口or数据口的选择
  91                 5          "R" or "A"           命令字
  92                 6-9          ......             数据
  93          
  94          ******************************************************************/
  95          idata uchar str[10];
  96          data uchar start;
  97          //data uchar plat_data;
  98          //uchar i;
  99          /******************/
 100          sbit SJA_reset=P2^1;
 101          sbit green    =P1^1;
 102          sbit red      =P1^2;
 103          long real_position_m,real_position_p,real_position_d;
 104          unsigned char request_flag,interrupt_flag;   //是否为查询
 105          
 106          data uchar SystemBuf[10]; //系统设置的接收数据缓冲区
 107          data uchar SendBuf[10];   //系统设置的发送数据缓冲区
 108          //idata uchar CanRecBuf[50];
 109          //xdata uchar CanSendBuf[50];
 110          /*************************************************************/
 111          /********************** 函数 *********************************/
 112          /*************************************************************/
 113          /*---------------------------------------------------------*/
 114          void delay(uint j)    //  time=j*10+7 (us)延时函数/
 115          {       
 116   1          data uchar ch;
 117   1          while(j--)
C51 COMPILER V8.05a   CAN_GPS                                                              06/20/2008 15:11:44 PAGE 3   

 118   1          {
 119   2          ch++; ch--;
 120   2          }
 121   1      }
 122          /*----------------------- 延时 ------------------------------*/
 123          void delay_us(uint j)    //  time=j*10+7 (us)延时函数/
 124          {
 125   1          idata uchar ch;
 126   1          while(j--)
 127   1          {
 128   2          ch++; ch--;
 129   2          }
 130   1      }
 131          /*************************************************************/
 132          /********************** can **********************************/
 133          /*************************************************************/
 134          /************************************************************************
 135           *以下为基本的函数说明(BasicCAN)                                       *
 136           ************************************************************************/
 137          
 138          /************************************************************************
 139           *函数原型:  bit   BCAN_CREATE_COMMUNATION(void)                        *
 140           *参数说明:  无                                                         *
 141           *返回值:                                                               *
 142           *           0 ; 表示SJA1000接口正常                                    *
 143           *           1 ; 表示SJA1000与处理器接口不正常                          *
 144           *                                                                      *
 145           *说明:该函数用于检测CAN控制器的接口是否正常                            *
 146           ************************************************************************/
 147           bit   BCAN_CREATE_COMMUNATION(void)
 148           {
 149   1          SJA_BCANAdr=REG_TEST;                     //访问测试寄存器
 150   1      
 151   1          *SJA_BCANAdr   =0xaa;                     //写入测试值
 152   1          if(*SJA_BCANAdr == 0xaa)
 153   1          {
 154   2              return    0;                          //读测试正确
 155   2          }
 156   1          else
 157   1          {
 158   2             return    1;
 159   2          }
 160   1       }
 161          
 162          /************************************************************************
 163           *函数原型:      bit   BCAN_ENTER_RETMODEL(void)                        *
 164           *参数说明:  无                                                         *
 165           *返回值:                                                               *
 166           *           0 ; 表示成功进入复位工作模式                               *
 167           *           1 ; 表示不能进入复位工作模式                               *
 168           *                                                                      *
 169           *说明:      CAN控制器进入复位工作模式                                  *
 170           ************************************************************************/
 171           bit   BCAN_ENTER_RETMODEL(void)
 172           {
 173   1          unsigned   char   TempData;
 174   1          SJA_BCANAdr  = REG_CONTROL;                   //访问地址指向控制寄存器
 175   1          TempData=  *SJA_BCANAdr;                      //保存原始值
 176   1          *SJA_BCANAdr=(TempData|0x01);                 //置位复位请求
 177   1          if((*SJA_BCANAdr&0x01) == 1)
 178   1          {
 179   2             return   0;
C51 COMPILER V8.05a   CAN_GPS                                                              06/20/2008 15:11:44 PAGE 4   

 180   2          }
 181   1          else
 182   1          {
 183   2             return   1;
 184   2          }
 185   1      
 186   1       }
 187          
 188          /************************************************************************
 189           *函数原型:      bit   BCAN_QUIT_RETMODEL(void)                         *
 190           *参数说明:  无                                                         *
 191           *返回值:                                                               *
 192           *           0 ; 表示成功退出复位工作模式                               *
 193           *           1 ; 表示不能退出复位工作模式                               *
 194           *                                                                      *
 195           *说明:      CAN控制器退出复位工作模式                                  *
 196           ************************************************************************/
 197           bit   BCAN_QUIT_RETMODEL(void)
 198           {
 199   1          unsigned   char   TempData;
 200   1          SJA_BCANAdr = REG_CONTROL;                   //访问地址指向控制寄存器
 201   1          TempData    = *SJA_BCANAdr;                  //保存原始值
 202   1          *SJA_BCANAdr=(TempData&0xfe);                        //清除复位请求
 203   1          if((*SJA_BCANAdr&0x01) == 0)
 204   1          {
 205   2             return   0;                               //
 206   2          }
 207   1          else
 208   1          {
 209   2             return   1;                              //退出成功
 210   2          }
 211   1      
 212   1       }
 213          
 214          /************************************************************************
 215          ;*函数原型:   bit   BCAN_SET_BANDRATE(unsigned char CAN_ByteRate)       *
 216          ;*参数说明:    R7            波特率(Kbit/s) BTR0     BTR1             *
 217                                              500K
 218          ;*返回值:                                                               *
 219          ;*           0 ;波特率设置成功                                          *
 220          ;*           1 ;波特率设置失败                                          *
 221          ;*                                                                      *                                 
             -                       *
 222          ;************************************************************************/
 223          bit   BCAN_SET_BANDRATE(void)
 224          {
 225   1         unsigned char BTR0_num=0x00;  //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 226   1         unsigned char BTR1_num=0x1c;  //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 227   1        //将波特率的的预设值装入sja1000的总线定时器
 228   1        SJA_BCANAdr=REG_BTR0;                         //访问地址指向总线定时寄存器0
 229   1        *SJA_BCANAdr=BTR0_num;                        //写入参数
 230   1        if(*SJA_BCANAdr != BTR0_num)                  //校验写入值
 231   1        {
 232   2          return  1;
 233   2        }
 234   1        SJA_BCANAdr=REG_BTR1;                         //访问地址指向总线定时寄存器
 235   1        *SJA_BCANAdr=BTR1_num;                        //写入参数
 236   1        if(*SJA_BCANAdr != BTR1_num)                  //校验写入值

⌨️ 快捷键说明

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