?? transmitter.lst
字號(hào):
C51 COMPILER V7.50 TRANSMITTER 11/20/2006 22:09:40 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE TRANSMITTER
OBJECT MODULE PLACED IN Transmitter.OBJ
COMPILER INVOKED BY: D:\keil\C51\BIN\C51.EXE Transmitter.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*=====================================================================
2 *
3 *由 Keil C51 V7.50 編譯通過(guò)
4 *==============================================================================
5 */
6 #include <reg24e1.h>
7
8 struct RFConfig
9 {
10 unsigned char n;
11 unsigned char buf[15];
12 };
13
14 typedef struct RFConfig RFConfig;
15
16 #define ADDR_INDEX 8 // Index to address bytes in RFConfig.buf
17 #define ADDR_COUNT 4 // Number of address bytes
18
19
20 const RFConfig tconf =
21 {
22 15, //If the nRF2401 subsystem is to be configured for 2 channel RX in ShockBurst, a
23 //total of 120 bits must be shifted in during the first configuration
24 // after VDD is applied. 是不是不要120--143bit(Reserved for testing) 了
25 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //數(shù)據(jù)包是8位8位的傳,地址是32位,需要CRC,是16位,
26 0xaa, 0xbb, 0x12, 0x34, 0x83, 0x6f, 0x05 //1 Mbps的 RF Data Rate,16MHz的時(shí)鐘頻率,調(diào)制于2404MHz.
27 }; // The MSB bit should be loaded first into the configuration register
28
29
30 void Delay100us(volatile unsigned char n)
31 {
32 1 unsigned char i;
33 1 while(n--)
34 1 for(i=0;i<35;i++)
35 1 ;
36 1 }
37
38 void Delayms(volatile unsigned char n)
39 {
40 1 unsigned char j;
41 1 while(n--)
42 1 for(j=0;j<10;j++)
43 1 Delay100us(10);
44 1
45 1 }
46
47 unsigned char SpiReadWrite(unsigned char b)
48 // Output data is shifted on negedge SCK, and input data is read on posedge SCK
49 {
50 1 EXIF &= ~0x20; // Clear SPI interrupt
51 1 SPI_DATA = b; // Move byte to send to SPI data register
52 1 while((EXIF & 0x20) == 0x00) // Wait until SPI hs finished transmitting
53 1 ;
54 1 return SPI_DATA;
55 1 }
C51 COMPILER V7.50 TRANSMITTER 11/20/2006 22:09:40 PAGE 2
56
57 void TransmitPacket(unsigned char b)
58 {
59 1 unsigned char i;
60 1 CE = 1;
61 1 Delay100us(0);
62 1 for(i=0;i<ADDR_COUNT;i++)
63 1 SpiReadWrite(tconf.buf[ADDR_INDEX+i]); //先傳4bytes的地址(0xaa, 0xbb, 0x12, 0x34)
64 1 SpiReadWrite(b);
65 1 CE = 0;
66 1 Delay100us(3); // Wait 300us
67 1 }
68
69 unsigned char GetChar(void)
70 {
71 1 unsigned char c;
72 1 while(!RI)
73 1 ;
74 1 RI = 0;
75 1 c=SBUF ;
76 1 return c;
77 1 }
78
79 void Transmitter(void)
80 {
81 1 unsigned char b;
82 1
83 1 CS = 1;
84 1 Delay100us(0);
85 1 for(b=0;b<tconf.n;b++)
86 1 {
87 2 SpiReadWrite(tconf.buf[b]);
88 2 }
89 1 CS = 0;
90 1 b=GetChar();
91 1 TransmitPacket(b); // Transmit data
92 1 }
93
94
95
96 void Init(void)
97 {
98 1
99 1 // Port ini
100 1 P0_ALT = 0x06; // Select alternate functions on pins P0.1 and P0.2, TXD RXD
101 1
102 1 PWR_UP = 1; // Turn on Radio
103 1 Delay100us(30); // Wait > 3ms
104 1 SPICLK = 0; // Max SPI clock (XTAL/8)
105 1 SPI_CTRL = 0x02; // Connect internal SPI controller to Radio CH1
106 1
107 1 // serial communication ini
108 1 TH1 = 243; // 19200@16MHz (when T1M=1 and SMOD=1) 19200=(2/32)*{(16M/4)*[1/(256-243)]}
109 1 CKCON |= 0x10; // T1M=1 (/4 timer clock)
110 1 PCON = 0x80; // SMOD=1 (double baud rate)
111 1 SCON = 0x52; // Serial mode 1, enable receiver
112 1 TMOD = 0x20; // Timer1 8bit auto reload
113 1 TCON = 0x40; // Start timer1
114 1 }
115
116
117 void main(void)
C51 COMPILER V7.50 TRANSMITTER 11/20/2006 22:09:40 PAGE 3
118 {
119 1 Init();
120 1 while(1)
121 1 {
122 2 Transmitter();
123 2 Delayms(500); //間隔0.5s發(fā)一次
124 2 }
125 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 187 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 16 2
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -