send8000(add_com_11.0592m).lst
来自「基于89c2051开发的ptr8000一对多无线通信程序.」· LST 代码 · 共 448 行 · 第 1/2 页
LST
448 行
C51 COMPILER V7.06 SEND8000_ADD_COM_11_0592M_ 01/19/2007 16:36:53 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SEND8000_ADD_COM_11_0592M_
OBJECT MODULE PLACED IN send8000(add_com_11.0592M).OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE send8000(add_com_11.0592M).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;
12 sbit RLED = P1^2;
13 sbit GLED = P1^3;
14 sbit IRED = P3^7;
15 bit triggle=0,triggle1=0,trigglecom=0;
16 uint count=0;
17
18 #define PWR_ON 0
19 #define PWR_OFF 1
20 #define MOTO_FORW 1 /* 01 */
21 #define MOTO_BACK 2 /* 10 */
22 #define MOTO_STOP 3 /* 11 */
23
24 /************************************************************/
25 #define E2ADRSYS 0x00 /* 本系统于EEPROM中地址 */
26 uchar idata ADDRESS; /**/
27 uchar idata URT_buf; /* 串口接收数据缓冲器 */
28 uchar idata URT_cnt; /* 数据接收计数器 */
29 uchar idata URT_rcv,URT_cmd,URT_len;
30 /************************************************************/
31 uchar idata wrrdadr; /* EEPROM操作(读/写)首地址 */
32 uchar idata Databuf[16]; /* 16字节数据存储缓冲区 */
33 uchar idata comrbuf[COMRBUFLEN],comrbufp=0; /* 16字节数据存储缓冲区 */
34 uchar idata comsbuf[COMSBUFLEN],comsbufp=0; /* 16字节数据存储缓冲区 */
35 #define BUFADR Databuf[0] /* 系统地址 */
36 #define BUFPTST Databuf[1] /* 操作端口/状态 */
37 #define BUFHOUR Databuf[2] /* 时间:时 */
38 #define BUFMINT Databuf[3] /* 时间:分 */
39 extern ulong RX_ADDRESS;
40 #define RX_ADDRESS_0 RX_ADDRESS >> 24 //接收有效地址第1字节 Byte5 11100111
41 #define RX_ADDRESS_1 (RX_ADDRESS >> 16) & 0xff //接收有效地址第2字节 Byte6 11100111
42 #define RX_ADDRESS_2 (RX_ADDRESS >> 8) & 0xff //接收有效地址第3字节 Byte7 11100111
43 #define RX_ADDRESS_3 RX_ADDRESS & 0xff //接收有效地址第4字节 Byte8 11100111
44
45 /*
46 uchar idata TX_ADDRESS[4]={0x50,0x51,0x52,0x53}; /* RF接收方地址 */
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;
54 bit bdata Flag_scd; /* 1秒标志位 */
55
C51 COMPILER V7.06 SEND8000_ADD_COM_11_0592M_ 01/19/2007 16:36:53 PAGE 2
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;
116 DEECON = 0;
117 DEEADR = e2adr;
C51 COMPILER V7.06 SEND8000_ADD_COM_11_0592M_ 01/19/2007 16:36:53 PAGE 3
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 v
-alue for 1200 baud @ 16MHz */
142 1 TH1 = 0xfd; //9600bps 0xe8; //1200bps,0xfd; //9600bps for 11.0592M /* TH1: reload val
-ue for 1200 baud @ 16MHz */
143 1 TR1 = 1; /* TR1: timer 1 run */
144 1 TI = 1; /* TI: set TI to send first char of UART */
145 1 }
146
147 /*=================================================*/
148 /*发送数据子程序*/
149 void mscom_snd(uchar *ptr,uchar length)
150 {
151 1 uchar i;
152 1 for(i=0;i<length;i++)
153 1 { SBUF=ptr[i];
154 2 while(TI==0);
155 2 TI=0;
156 2 }
157 1 }
158 /*
159 void mscom_byte(uchar sndat)
160 {
161 SBUF=sndat;
162 while(TI==0);
163 TI=0;
164 }
165 */
166 /**************************************************/
167 /*********** 串口(Rx)中断服务子程序 *************/
168 void Mscom_rcv(void) interrupt 4 using 1
169 {
170 1 if(RI==1)
171 1 {
172 2 RI=0;
173 2 //URT_rcv=SBUF;
174 2 comrbuf[comrbufp]=SBUF;
175 2 if(comrbuf[comrbufp]=='E' && comrbuf[(comrbufp+COMRBUFLEN-1)%COMRBUFLEN]==0 && comrbuf[(comrbufp+COMRBUF
-LEN-4)%COMRBUFLEN]=='S')
176 2 {
C51 COMPILER V7.06 SEND8000_ADD_COM_11_0592M_ 01/19/2007 16:36:53 PAGE 4
177 3 //comsbuf[12]=comrbuf[(comrbufp+COMRBUFLEN-3)%COMRBUFLEN];
178 3 //comsbuf[13]=comrbuf[(comrbufp+COMRBUFLEN-2)%COMRBUFLEN];
179 3 if(comrbuf[(comrbufp+COMRBUFLEN-3)%COMRBUFLEN]==RX_ADDRESS_0) trigglecom=1;
180 3 }
181 2 if(++comrbufp==COMRBUFLEN) comrbufp=0;
182 2 //mscom_byte(URT_rcv);
183 2 }/* 串口接收程序结束 */
184 1 }/* 串口中断程序结束 */
185
186
187 /****************************************************************/
188 //////////Timer0 interrupt//////
189
190 void t0int() interrupt 1
191 {
192 1 temptl0=TL0;
193 1 tempth0=TH0;
194 1 TH0=THV+tempth0;
195 1 TL0=TLV+temptl0+10;
196 1 GLED=~IRED;
197 1 count++;
198 1 if(count==HALFSECTICKS)
199 1 {
200 2 triggle=1;
201 2 comsbuf[13]=P3;
202 2 RLED=1;
203 2 }
204 1 if(count==SECTICKS)
205 1 {
206 2 count=0;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?