?? 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 + -