📄 code.lst
字号:
C51 COMPILER V7.50 CODE 06/25/2004 19:21:10 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE CODE
OBJECT MODULE PLACED IN CODE.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE CODE.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************************************
2 科创四第15小组FSK通信控制程序
3
4 此乃连着本地主系统的模块的控制程序
5 /*******************************************************************************************/
6 #include <reg51.h>
7 #include <intrins.h>
8 #include <absacc.h>
9 #include "set.h"
*** WARNING C235 IN LINE 183 OF SET.H: parameter 1: different types
10
11 #define SB 16 //sent bytes 一个数据包里的payload字节数
12
13 sbit retest=P2^0;
14 int trsec;
15 uchar jj=0;
16 uchar r_flag=1;// flag of receiving 指示芯片处于接受状态的flag
17 uchar retrieving_flag=0; //高则指示单片机从芯片取数据的那段时间
18
19 code RFConfig RxTxConf =
20 {
21 10,
22 0x01,
23 0x2c,
24 0x44,
25 0x10,
26 0x10,
27 0xcc, 0xcc, 0xcc,0xcc, // 4 bytes address
28 0x5c
29 };
30 // The content of this struct is nRF905's initialize data.初始化数据
31 // CH_NO=1;433MHZ;Normal Opration,No Retrans;RX,TX Address is 4 Bytes
32 // RX TX Payload Width is SB Bytes;Disable Extern Clock;Fosc=16MHZ
33 // 8 Bits CRC And enable
34
35 //四个按键对应的动作
36 Key1()//
37 {
38 1 trsec = 410;
39 1 }
40 Key2()//
41 { uchar i,flag=1;
42 1
43 1 CSN=0;PB8255=PB;
44 1 SpiWrite(RC);
45 1 for (i=0;i<10;i++) // Write configration words 写放配置字
46 1 {
47 2 temp.buf[i]=SpiRead();
48 2 }
49 1 CSN=1; PB8255=PB;
50 1 for(i=0;i<10;i++)
51 1 {
52 2 if ( temp.buf[i] == RxTxConf.buf[i]) flag++;
53 2 }
54 1 sec_dis=flag;
C51 COMPILER V7.50 CODE 06/25/2004 19:21:10 PAGE 2
55 1 }
56 Key3()//
57 {
58 1 int i;
59 1 for(i=0;i<SB;i++)
60 1 TxBuf[i]=i+1;
61 1 SetTxMode(); // Set Tx Mode
62 1 //for (i=0;i<SB;i++) TxData(TxBuf[i]);
63 1 Delay(100);
64 1
65 1 TxPacket(); // Transmit Tx buffer data
66 1 SetRxMode();
67 1
68 1 }
69 Key4()//
70
71 {
72 1 trsec = 0; SetRxMode();
73 1 }
74
75
76 /*
77 void Resend(void)
78 {
79 int i;
80 SetTxMode();
81 for(i=0;i<SB;i++)
82 TxBuf[i]=RxBuf[i];
83 TxPacket();
84
85 } */
86 /**** T0时钟中断服务程序
87 在本例中,每5ms被执行一次
88 *****/
89
90 timer0() interrupt 1 using 0
91 {
92 1 //EA=0;
93 1 int i;
94 1 /* 重新对计数器赋初值,并启动定时计数 */
95 1 TH0=V_TH0;
96 1 TL0=V_TL0;
97 1 TR0=1;
98 1
99 1 if(p_counter<30) p_counter++;
100 1
101 1 /* 检测到按键被按下(0)时,相应的指示灯亮(0) */
102 1 if (KEY1==0)
103 1 {if (p_counter==30) {p_counter=0;Key1();} }
104 1 if (KEY2==0)
105 1 {if (p_counter==30) {p_counter=0;Key2();} }
106 1 if (KEY3==0)
107 1 {if (p_counter==30) {p_counter=0;Key3();} }
108 1 if (KEY4==0)
109 1 {if (p_counter==30) {p_counter=0;Key4();} }
110 1
111 1 //the next section is about display
112 1 Display();
113 1
114 1 // if(r_flag>0) r_flag--;
115 1
116 1 /* if(trsec>0)
C51 COMPILER V7.50 CODE 06/25/2004 19:21:10 PAGE 3
117 1 {
118 1 if (trsec%400==0)
119 1 { SetTxMode();
120 1 for(i=0;i<SB;i++)
121 1 TxBuf[i]=trsec/400;
122 1 TxPacket();
123 1 SetRxMode();
124 1 }
125 1 trsec--;
126 1 } */
127 1
128 1
129 1 if(trsec>0 && (!retrieving_flag))
130 1 {
131 2 if (trsec%180==0)
132 2 {
133 3 SetTxMode();
134 3 for(i=0;i<SB;i++)
135 3 TxBuf[i]=jj;
136 3 jj++;
137 3 if(jj>15) jj=0;
138 3 TxPacket();
139 3 SetRxMode();
140 3 }
141 2 trsec--;
142 2 if (trsec==0) trsec=200;
143 2 }
144 1
145 1 if(s_break>0)
146 1 {
147 2 s_break--;
148 2 if (s_break<10) time_up=1;
149 2 }
150 1
151 1 // EA=1;
152 1 }
153
154 /*******************************************************************************************/
155 void main()
156 {
157 1
158 1 SCON=0x50; //模式1
159 1 TMOD=0x21; //定时模式2
160 1 IE=0x90;
161 1
162 1 //=====9600=======设置串口通讯寄存器
163 1 PCON=0x00; //波特率9600BPS,晶振11.0592MHZ
164 1 TH1=0xFD; //
165 1 TL1=0xFD; //计数器初值
166 1 TH0=V_TH0; //5ms 键盘显示中断
167 1 TL0=V_TL0;
168 1
169 1
170 1 // 8255初始化
171 1 RST8255=0;
172 1 COM8255=0x81;
173 1 //================NRF905初始化
174 1 CSN=1; // Spi disable
175 1 SCK=0; // Spi clock line init high
176 1 DR=1; // Init DR for input
177 1 AM=1;
178 1 // TEST=1;
C51 COMPILER V7.50 CODE 06/25/2004 19:21:10 PAGE 4
179 1 // Init AM for input
180 1 PWR_UP=1; // nRF905 power on
181 1 TRX_CE=0; // Set nRF905 in standby mode
182 1 TX_EN=0; // set radio in Rx mode
183 1 ///////////////////////////////////////////
184 1 TI = 0;//串行中断标志位清零
185 1 TR1 = 1;//打开计数器1
186 1 TR0 = 1;//开计数器0
187 1 ET0=1; //允许计数器T0中断
188 1 PB8255=PB;
189 1
190 1
191 1
192 1 trsec=0;
193 1 //================
194 1 Config905(); // Config nRF905 module
195 1
196 1
197 1 SetRxMode(); // Set nRF905 in Rx mode
198 1 retest=0;
199 1 while(1)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -