📄 usbfortest.lst
字号:
C51 COMPILER V8.05a USBFORTEST 04/20/2012 11:23:55 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE USBFORTEST
OBJECT MODULE PLACED IN Usbfortest.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE Usbfortest.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*福州天虹电脑科技有限公司 苏秋锦2011年2月*/
2 #include <reg51.h>
3 #include <max7219.h>
4 //#include <74Ls165.h>
5 #include <api.h>
6
7 /*数据字显示说明*/
8 //10-A|11-b|12-c|13-d|14-e|15-F|16-H|17-J|18-L|19-n|20-P|21-q|22-U|23-[|24-]|25--|26-=|27-三横|28-┤|29-├
-|30-E|31-h|31-空|33-N
9
10
11
12 #define uchar unsigned char
13
14 /***************************************************/
15 #define TX_ADR_WIDTH 5 // 5字节宽度的发送/接收地址
16 #define TX_PLOAD_WIDTH 4 // 数据通道有效数据宽度
17 #define LED P2
18
19 uchar code TX_ADDRESS[TX_ADR_WIDTH] = {0x34,0x43,0x10,0x10,0x01}; // 定义一个静态发送地址
20 uchar RX_BUF[TX_PLOAD_WIDTH];
21 uchar TX_BUF[TX_PLOAD_WIDTH];
22 uchar flag;
23 uchar DATA = 0x01;
24 uchar bdata sta;
25 sbit RX_DR = sta^6;
26 sbit TX_DS = sta^5;
27 sbit MAX_RT = sta^4;
28 /**************************************************/
29
30 /**************************************************
31 函数: init_io()
32
33 描述:
34 初始化IO
35 /**************************************************/
36 void init_io(void)
37 {
38 1 CE = 0; // 待机
39 1 CSN = 1; // SPI禁止
40 1 SCK = 0; // SPI时钟置低
41 1 IRQ = 1; // 中断复位
42 1 LED = 0xff; // 关闭指示灯
43 1 }
44 /**************************************************/
45
46 /**************************************************
47 函数:delay_ms()
48
49 描述:
50 延迟x毫秒
51 /**************************************************/
52 void delay_ms(uchar x)
53 {
54 1 uchar i, j;
C51 COMPILER V8.05a USBFORTEST 04/20/2012 11:23:55 PAGE 2
55 1 i = 0;
56 1 for(i=0; i<x; i++)
57 1 {
58 2 j = 250;
59 2 while(--j);
60 2 j = 250;
61 2 while(--j);
62 2 }
63 1 }
64 /**************************************************/
65
66 /**************************************************
67 函数:SPI_RW()
68
69 描述:
70 根据SPI协议,写一字节数据到nRF24L01,同时从nRF24L01
71 读出一字节
72 /**************************************************/
73 uchar SPI_RW(uchar byte)
74 {
75 1 uchar i;
76 1 for(i=0; i<8; i++) // 循环8次
77 1 {
78 2 MOSI = (byte & 0x80); // byte最高位输出到MOSI
79 2 byte <<= 1; // 低一位移位到最高位
80 2 SCK = 1; // 拉高SCK,nRF24L01从MOSI读入1位数据,同时从MISO输出1位数据
81 2 byte |= MISO; // 读MISO到byte最低位
82 2 SCK = 0; // SCK置低
83 2 }
84 1 return(byte); // 返回读出的一字节
85 1 }
86 /**************************************************/
87
88 /**************************************************
89 函数:SPI_RW_Reg()
90
91 描述:
92 写数据value到reg寄存器
93 /**************************************************/
94 uchar SPI_RW_Reg(uchar reg, uchar value)
95 {
96 1 uchar status;
97 1 CSN = 0; // CSN置低,开始传输数据
98 1 status = SPI_RW(reg); // 选择寄存器,同时返回状态字
99 1 SPI_RW(value); // 然后写数据到该寄存器
100 1 CSN = 1; // CSN拉高,结束数据传输
101 1 return(status); // 返回状态寄存器
102 1 }
103 /**************************************************/
104
105 /**************************************************
106 函数:SPI_Read()
107
108 描述:
109 从reg寄存器读一字节
110 /**************************************************/
111 uchar SPI_Read(uchar reg)
112 {
113 1 uchar reg_val;
114 1 CSN = 0; // CSN置低,开始传输数据
115 1 SPI_RW(reg); // 选择寄存器
116 1 reg_val = SPI_RW(0); // 然后从该寄存器读数据
C51 COMPILER V8.05a USBFORTEST 04/20/2012 11:23:55 PAGE 3
117 1 CSN = 1; // CSN拉高,结束数据传输
118 1 return(reg_val); // 返回寄存器数据
119 1 }
120 /**************************************************/
121
122 /**************************************************
123 函数:SPI_Read_Buf()
124
125 描述:
126 从reg寄存器读出bytes个字节,通常用来读取接收通道
127 数据或接收/发送地址
128 /**************************************************/
129 uchar SPI_Read_Buf(uchar reg, uchar * pBuf, uchar bytes)
130 {
131 1 uchar status, i;
132 1 CSN = 0; // CSN置低,开始传输数据
133 1 status = SPI_RW(reg); // 选择寄存器,同时返回状态字
134 1 for(i=0; i<bytes; i++)
135 1 pBuf[i] = SPI_RW(0); // 逐个字节从nRF24L01读出
136 1 CSN = 1; // CSN拉高,结束数据传输
137 1 return(status); // 返回状态寄存器
138 1 }
139 /**************************************************/
140
141 /**************************************************
142 函数:SPI_Write_Buf()
143
144 描述:
145 把pBuf缓存中的数据写入到nRF24L01,通常用来写入发
146 射通道数据或接收/发送地址
147 /**************************************************/
148 uchar SPI_Write_Buf(uchar reg, uchar * pBuf, uchar bytes)
149 {
150 1 uchar status, i;
151 1 CSN = 0; // CSN置低,开始传输数据
152 1 status = SPI_RW(reg); // 选择寄存器,同时返回状态字
153 1 for(i=0; i<bytes; i++)
154 1 SPI_RW(pBuf[i]); // 逐个字节写入nRF24L01
155 1 CSN = 1; // CSN拉高,结束数据传输
156 1 return(status); // 返回状态寄存器
157 1 }
158 /**************************************************/
159
160 /**************************************************
161 函数:RX_Mode()
162
163 描述:
164 这个函数设置nRF24L01为接收模式,等待接收发送设备的数据包
165 /**************************************************/
166 void RX_Mode(void)
167 {
168 1 CE = 0;
169 1 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 接收设备接收通道0使用和发送设备相
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -