📄 send8000(add_com).lst
字号:
C51 COMPILER V7.06 SEND8000_ADD_COM_ 01/19/2007 16:22:27 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SEND8000_ADD_COM_
OBJECT MODULE PLACED IN send8000(add_com).OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE send8000(add_com).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_ 01/19/2007 16:22:27 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_ 01/19/2007 16:22:27 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 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 {
176 3 //comsbuf[12]=comrbuf[(comrbufp+COMRBUFLEN-3)%COMRBUFLEN];
177 3 //comsbuf[13]=comrbuf[(comrbufp+COMRBUFLEN-2)%COMRBUFLEN];
C51 COMPILER V7.06 SEND8000_ADD_COM_ 01/19/2007 16:22:27 PAGE 4
178 3 if(comrbuf[(comrbufp+COMRBUFLEN-3)%COMRBUFLEN]==RX_ADDRESS_0) trigglecom=1;
179 3 }
180 2 if(++comrbufp==COMRBUFLEN) comrbufp=0;
181 2 //mscom_byte(URT_rcv);
182 2 }/* 串口接收程序结束 */
183 1 }/* 串口中断程序结束 */
184
185
186 /****************************************************************/
187 //////////Timer0 interrupt//////
188
189 void t0int() interrupt 1
190 {
191 1 temptl0=TL0;
192 1 tempth0=TH0;
193 1 TH0=THV+tempth0;
194 1 TL0=TLV+temptl0+10;
195 1 GLED=~IRED; //Led help.
196 1 count++;
197 1 if(count==HALFSECTICKS)
198 1 {
199 2 triggle=1;
200 2 comsbuf[13]=P3;
201 2 RLED=1;
202 2 }
203 1 if(count==SECTICKS)
204 1 {
205 2 count=0;
206 2 triggle=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -