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