📄 card.lst
字号:
C51 COMPILER V8.02 CARD 07/30/2007 17:26:50 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE CARD
OBJECT MODULE PLACED IN card.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE card.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg24e1.h>
2 #define sn1 0x27 // card ID
3 #define sn2 0x12
4
5 sbit LED = P0^6; //LED: P0.6
6 #define ADDR_INDEX 10 // Index to address bytes in RFConfig.buf
7 #define ADDR_COUNT 2 // Number of address bytes
8 /******************************************************************
9 Fun : RTC interrupt service routine //RTC中断唤醒掉电模式
10 ******************************************************************/
11
12 void RTCISR (void) interrupt 12
13 {
14 1 WDTI = 0; //clear WDTI
15 1 }
16 //定义结构体来装入RF寄存器配置
17 struct RFConfig
18 {
19 unsigned char n;
20 unsigned char buf[15];
21 };
22
23 typedef struct RFConfig RFConfig;
24
25 //配置字
26 const RFConfig tconf =
27 {
28 15,
29 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
30 0x00, 0x00, 0x72, 0xaa, 0x43, 0x6f, 0x04
31 };
32
33
34 //延时时间=n*100us
35 void Delay100us( unsigned char n)
36 {
37 1 unsigned char i;
38 1 while(n--)
39 1 for(i=0;i<35;i++)
40 1 ;
41 1 }
42 /****************************************************************
43 Fun: SPI_DATA R/W //SPI数据读写()
44 ****************************************************************/
45 unsigned char SpiReadWrite(unsigned char b)
46 {
47 1 EXIF &= ~0x20; // Clear SPI interrupt
48 1 SPI_DATA = b; // Move byte to send to SPI data register
49 1 while((EXIF & 0x20) == 0x00) ; // Wait until SPI hs finished transmitting
50 1
51 1 return SPI_DATA;
52 1 }
53
54 //发送数据
55 void TransmitPacket ( unsigned char b1,unsigned char b2 )
C51 COMPILER V8.02 CARD 07/30/2007 17:26:50 PAGE 2
56 {
57 1 unsigned char i;
58 1 PWR_UP = 1; // 打开Radio
59 1 Delay100us(30); //等3ms
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]);
64 1 SpiReadWrite(b1);
65 1 SpiReadWrite(b2);
66 1 CE = 0;
67 1 Delay100us(3); //等300us
68 1 }
69 //初始化
70 void Init( void )
71
72 {
73 1 unsigned char b;
74 1
75 1 PSW = 0x20; //用工作寄存器R0
76 1
77 1 P0_ALT = 0x00; //不用P0口的第二功能
78 1 P0_DIR = 0x00; //P0为输出
79 1
80 1
81 1 LED = 0; // Led on led :p0.6
82 1 Delay100us(50);
83 1 LED = 1; //Led off
84 1
85 1 EA = 1; //中断允许
86 1
87 1
88 1 SPICLK = 0; // Max SPI clock,为1/2CPU速度 .
89 1 SPI_CTRL = 0x02; // 将SPI口接到905
90 1 //配置FR
91 1 PWR_UP = 1; // 打开Radio
92 1 Delay100us(30); //等3ms
93 1
94 1 CS = 1;
95 1 Delay100us(0);
96 1 for(b=0;b<tconf.n;b++)
97 1 {
98 2 SpiReadWrite(tconf.buf[b]);
99 2 }
100 1 CS = 0;
101 1 // 设置、启动RTC
102 1 //REGX_CTRL为看门狗的控制
103 1 //4空闲标志,0:空,1:忙 (只读)
104 1 //3读/写, 0:读,1:写
105 1 //2-0间接寻址
106 1 while( REGX_CTRL & 0x10 ); //Wait until REGX_CRTL.4 == 0 (i.e. not busy)
107 1
108 1 REGX_MSB = 0x07; //2s
109 1 REGX_LSB = 0xd0;
110 1
111 1 REGX_CTRL = 0x0A; //1010 写RTC寄存器
112 1
113 1
114 1 EWDI = 1; // Enable RTC interrupt
115 1
116 1
117 1 }
C51 COMPILER V8.02 CARD 07/30/2007 17:26:50 PAGE 3
118
119
120
121 /***************************************************************
122
123 Fun: send card ID
124 ***************************************************************/
125
126 void main ( void )
127 {
128 1
129 1
130 1 Init(); //initialize nrf24e1
131 1
132 1 while ( 1 ) // main loop
133 1 {
134 2
135 2 TransmitPacket(sn1,sn2);
136 2
137 2 while ( DR1 == 0 ); //transmit data is over
138 2
139 2 PWR_UP = 0; //关闭FR
140 2
141 2 Delay100us(16);
142 2 LED = 0; // Led on led :p0.6
143 2 Delay100us(5);
144 2 LED = 1; //Led off
145 2
146 2 CK_CTRL = 0x04; //Deep power down
147 2
148 2
149 2 }
150 1
151 1 }
152
153
154
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 196 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 16 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -