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