📄 recv8000.lst
字号:
C51 COMPILER V7.06 RECV8000 02/01/2007 11:10:31 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE RECV8000
OBJECT MODULE PLACED IN recv8000.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE recv8000.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #define __SRC
2 #include "Config.h"
3 #undef __SRC
4
5 #define HALFSECTICKS 500 //12
6 #define SECTICKS 1000 //24
7 #define COMSBUFLEN 16
8 #define COMRBUFLEN 8
9 #define TX_ADDRESSMAX 7
10 uchar TLV=0x00; //0xb0; //Now is 1000 times per seconds; //for 18432000,
11 uchar THV=0xfa; //0xff; //
12 uchar temptl0,tempth0;
13 sbit RLED = P1^2;
14 bit triggle=0,triggle1=0;
15 uint count=0;
16
17 #define PWR_ON 0
18 #define PWR_OFF 1
19 #define MOTO_FORW 1 /* 01 */
20 #define MOTO_BACK 2 /* 10 */
21 #define MOTO_STOP 3 /* 11 */
22
23 /************************************************************/
24 #define E2ADRSYS 0x00 /* 本系统于EEPROM中地址 */
25 uchar idata ADDRESS; /**/
26 uchar idata URT_buf; /* 串口接收数据缓冲器 */
27 uchar idata URT_cnt; /* 数据接收计数器 */
28 uchar idata URT_rcv,URT_cmd,URT_len;
29 /************************************************************/
30 uchar idata wrrdadr; /* EEPROM操作(读/写)首地址 */
31 uchar idata Databuf[16]; /* 16字节数据存储缓冲区 */
32 uchar idata comsbuf[COMSBUFLEN],comsbufp=0; /* 16字节数据存储缓冲区 */
33 uchar idata comrbuf[COMRBUFLEN],comrbufp=0; /* 16字节数据存储缓冲区 */
34 #define BUFADR Databuf[0] /* 系统地址 */
35 #define BUFPTST Databuf[1] /* 操作端口/状态 */
36 #define BUFHOUR Databuf[2] /* 时间:时 */
37 #define BUFMINT Databuf[3] /* 时间:分 */
38 extern ulong RX_ADDRESS; /* 接收有效地址(本方) */
39 #define RX_ADDRESS_0 RX_ADDRESS >> 24 //接收有效地址第1字节 Byte5 11100111
40 #define RX_ADDRESS_1 (RX_ADDRESS >> 16) & 0xff //接收有效地址第2字节 Byte6 11100111
41 #define RX_ADDRESS_2 (RX_ADDRESS >> 8) & 0xff //接收有效地址第3字节 Byte7 11100111
42 #define RX_ADDRESS_3 RX_ADDRESS & 0xff //接收有效地址第4字节 Byte8 11100111
43
44 //uchar idata TX_ADDRESS[6][4]={{0x40,0x41,0x42,0x43},{0x50,0x51,0x52,0x53},{0x60,0x61,0x62,0x63},{0x70,0x
-71,0x72,0x73},{0x80,0x81,0x82,0x83},{0x90,0x91,0x92,0x93}}; /* RF接收方地址 */
45 uchar code TX_ADDRESS[TX_ADDRESSMAX][4]={{0x30,0x31,0x32,0x33},{0x40,0x41,0x42,0x43},{0x50,0x51,0x52,0x53}
-,{0x60,0x61,0x62,0x63},{0x70,0x71,0x72,0x73},{0x80,0x81,0x82,0x83},{0x90,0x91,0x92,0x93}}; /* RF接收方地址 */
46 uchar idata tx_addressp=0,tx_realaddressp=0;
47 /*
48 uchar idata TX_ADDRESS[4]={0xA0,0xA1,0xA2,0xA3}; /* RF接收方地址 */
49 /************************************************************/
50 uchar idata tim_cnt; /* 定时计数器 */
51 uchar idata tim_scd; /* 秒计数器 */
52 uchar idata tim_mnt;
53 uchar idata tim_hur;
C51 COMPILER V7.06 RECV8000 02/01/2007 11:10:31 PAGE 2
54 bit bdata Flag_scd; /* 1秒标志位 */
55
56 /* 波特率发生器的初值fosc=7.3728MHz/(2*DIVM)=1.8432MHz */
57 /* 设置串口波特率 = Fosc / ((BRGR1,BRGR0)+16) */
58 #define BRGR1_DATA 0x00 /* 9600BPS = 00B0H */
59 #define BRGR0_DATA 0xB0 /* 2400BPS = 1DF0H */
60
61 /*==========================================================*/
62 void Spi_init(void);
63 void Config905(void); /* 配置nRF905 */
64 void ChangeMode(uchar num); /* RF模式配置 */
65 void RF905_Write(uchar RFcmd,uchar *RFdata); /* 配置nRF905写地址/数据 */
66 void RF905_Read(uchar RFcmd,uchar *RFdata); /* 配置nRF905读地址/数据 */
67 void Delayus(uchar xus);
68
69 void Delayms(uint xms)
70 {
71 1 //uint i = xus;
72 1 uint startc,endc;
73 1 startc=count;
74 1 endc=count;
75 1 while((endc+SECTICKS-startc)%SECTICKS < xms) endc=count;
76 1 }
77
78 /*==========================================================*/
79 /* 功能:查询方式对地址范围为0x00~0xFF之间的EEPROM字节编程(写) */
80 /* 入口: ptr,写入数据首地址
81 /* e2adr,写入EEPROM首地址
82 /* length,写入数据长度
83 /* 出口: 无。
84 /************************************************************/
85 /*
86 void eeprom_write(uchar e2adr,uchar *ptr,uchar length)
87 {
88 uchar i,j;
89 i=j=0;
90 for(i=0;i<length;i++)
91 {
92 j=0;
93 DEECON = 0;
94 DEEDAT = ptr[i];
95 DEEADR = e2adr;
96 while(j==0)j=DEECON&0x80;
97 e2adr++;
98 }
99 }
100 */
101 /*==========================================================*/
102 /* 功能:查询方式对地址范围为0x00~0xFF之间的EEPROM字节编程(读) */
103 /* 入口: ptr,写入数据首地址
104 /* e2adr,写入EEPROM首地址
105 /* length,写入数据长度
106 /* 出口: 无。
107 /************************************************************/
108 /*
109 void eeprom_read(uchar e2adr,uchar *ptr,uchar length)
110 {
111 uchar i,j;
112 i=j=0;
113 for(i=0;i<length;i++)
114 {
115 j=0;
C51 COMPILER V7.06 RECV8000 02/01/2007 11:10:31 PAGE 3
116 DEECON = 0;
117 DEEADR = e2adr;
118 while(j==0)j=DEECON&0x80;
119 ptr[i] = DEEDAT;
120 e2adr++;
121 }
122 }
123 */
124 void uart_init(void)
125 {
126 1 //SCON=0x50; /* 串行口为方式1 SM2=0,REN=1 */
127 1 /* PCON|=0x40; /* SMOD0=1,使用FE标志位(与SSTAT.3是同一标志) */
128 1 //PCON=0x00;
129 1 //SSTAT=0x20; /* 禁止双缓冲使能,中断独立,每发送一字节产生一次中断 */
130 1 /* 设置串口波特率:Fosc / ((BRGR1,BRGR0)+16) */
131 1 //BRGCON=0x00; /* 关波特率发生器 */
132 1 //BRGR1=BRGR1_DATA;
133 1 //BRGR0=BRGR0_DATA;
134 1 //BRGCON=0x03; /* 打开串口波特率发生器,使用串口波特率发生器 */
135 1 ES=1; /* 允许接收中断 */
136 1 //EST=0; /* 禁止发送中断 */
137 1 //RI=0;
138 1 //TI=0;
139 1 SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */
140 1 TMOD |= 0x21; /* TMOD: timer 1, mode 2, 8-bit reload */
141 1 TH1 = 0xfb; //9600bps 0xe8; //1200bps,0xfd; //9600bps for 11.0592M /* TH1: reload val
-ue for 1200 baud @ 16MHz */
142 1 TR1 = 1; /* TR1: timer 1 run */
143 1 TI = 1; /* TI: set TI to send first char of UART */
144 1 }
145
146 /*=================================================*/
147 /*发送数据子程序*/
148 void mscom_snd(uchar *ptr,uchar length)
149 {
150 1 uchar i;
151 1 for(i=0;i<length;i++)
152 1 { SBUF=ptr[i];
153 2 while(TI==0);
154 2 TI=0;
155 2 }
156 1 }
157 /*
158 void mscom_byte(uchar sndat)
159 {
160 SBUF=sndat;
161 while(TI==0);
162 TI=0;
163 }
164 */
165 /**************************************************/
166 /*********** 串口(Rx)中断服务子程序 *************/
167 void Mscom_rcv(void) interrupt 4 using 1
168 {
169 1 if(RI==1)
170 1 {
171 2 RI=0;
172 2 //URT_rcv=SBUF;
173 2 comrbuf[comrbufp]=SBUF;
174 2 if(comrbuf[comrbufp]=='E' && comrbuf[(comrbufp+COMRBUFLEN-1)%COMRBUFLEN]==0 && comrbuf[(comrbufp+COMRBUF
-LEN-4)%COMRBUFLEN]=='S')
175 2 {
C51 COMPILER V7.06 RECV8000 02/01/2007 11:10:31 PAGE 4
176 3 //comsbuf[12]=comrbuf[(comrbufp+COMRBUFLEN-3)%COMRBUFLEN];
177 3 //comsbuf[13]=comrbuf[(comrbufp+COMRBUFLEN-2)%COMRBUFLEN];
178 3
179 3 if(comrbuf[(comrbufp+COMRBUFLEN-3)%COMRBUFLEN]==RX_ADDRESS_0)
180 3 {
181 4 triggle1=1;
182 4 switch(comrbuf[(comrbufp+COMRBUFLEN-2)%COMRBUFLEN])
183 4 {
184 5 case 0x00:
185 5 tx_realaddressp=tx_addressp;
186 5 if(++tx_addressp==TX_ADDRESSMAX) tx_addressp=0;
187 5 break;
188 5 case 0x30:
189 5 tx_realaddressp=0;
190 5 break;
191 5 case 0x40:
192 5 tx_realaddressp=1;
193 5 break;
194 5 case 0x50:
195 5 tx_realaddressp=2;
196 5 break;
197 5 case 0x60:
198 5 tx_realaddressp=3;
199 5 break;
200 5 case 0x70:
201 5 tx_realaddressp=4;
202 5 break;
203 5 case 0x80:
204 5 tx_realaddressp=5;
205 5 break;
206 5 case 0x90:
207 5 tx_realaddressp=6;
208 5 break;
209 5 default:break;
210 5 }
211 4 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -