📄 can_gps.lst
字号:
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 + -