小強號車體程式 -irq中斷 (接收端
//stc12c5052ad
//date : 11/11/02
//作者: phoenix
#include "stc12c2052ad.h"
#include
#include
typedef unsigned char uchar;
typedef unsigned char uint;
小強號12 io埠定義*** 11/02
sbit mosi =p1^6;
sbit csn =p1^7;
sbit miso =p1^3;
sbit sck =p1^4;
sbit ce =p1^5;
sbit irq =p3^2;
nrf24l01
#define tx_adr_width 5 // 5 uints tx address width
#define rx_adr_width 5 // 5 uints rx address width
#define tx_pload_width 5 // 20 uints tx payload
#define rx_pload_width 5 // 20 uints tx payload
uint const tx_address[tx_adr_width]= ; //本地位址
uint const rx_address[rx_adr_width]= ; //接收位址
nrf24l01暫存器指令
#define read_reg 0x00 // 讀暫存器指令
#define write_reg 0x20 // 寫暫存器指令
#define rd_rx_pload 0x61 // 讀取接收資料指令
#define wr_tx_pload 0xa0 // 寫待發資料指令
#define flush_tx 0xe1 // 沖洗傳送 fifo指令
#define flush_rx 0xe2 // 沖洗接收 fifo指令
#define reuse_tx_pl 0xe3 // 定義重複裝載資料指令
#define nop0xff // 保留
spi(nrf24l01)暫存器位址
#define config0x00 // 配置收發狀態,crc校驗模式以及收發狀態響應方式
#define en_aa0x01 // 自動應答功能設定
#define en_rxaddr 0x02 // 可用通道設定
#define setup_aw 0x03 // 收發位址寬度設定
#define setup_retr 0x04 // 自動重發功能設定
#define rf_ch0x05 // 工作頻率設定
#define rf_setup 0x06 // 發射速率、功耗功能設定
#define status0x07 // 狀態暫存器
#define observe_tx 0x08 // 傳送監測功能
#define cd0x09 // 位址檢測
#define rx_addr_p0 0x0a // 頻道0接收資料位址
#define rx_addr_p1 0x0b // 頻道1接收資料位址
#define rx_addr_p2 0x0c // 頻道2接收資料位址
#define rx_addr_p3 0x0d // 頻道3接收資料位址
#define rx_addr_p4 0x0e // 頻道4接收資料位址
#define rx_addr_p5 0x0f // 頻道5接收資料位址
#define tx_addr 0x10 // 傳送位址暫存器
#define rx_pw_p0 0x11 // 接收頻道0接收資料長度
#define rx_pw_p1 0x12 // 接收頻道0接收資料長度
#define rx_pw_p2 0x13 // 接收頻道0接收資料長度
#define rx_pw_p3 0x14 // 接收頻
道0接收資料長度
#define rx_pw_p4 0x15 // 接收頻道0接收資料長度
#define rx_pw_p5 0x16 // 接收頻道0接收資料長度
#define fifo_status 0x17 // fifo棧入棧出狀態暫存器設定void delay(unsigned int s);
void inerdelay_us(unsigned char n);
void init_nrf24l01(void);
uint spi_rw(uint uchar);
uchar spi_read(uchar reg);
void setrx_mode(void);
uint spi_rw_reg(uchar reg, uchar value);
uint spi_read_buf(uchar reg, uchar *pbuf, uchar uchars);
uint spi_write_buf(uchar reg, uchar *pbuf, uchar uchars);
void nrf24l01_rxpacket(unsigned char* rx_buf);
void nrf24l01_txpacket(unsigned char * tx_bufuint bdata sta; //狀態標誌
sbit rx_dr =sta^6;
sbit tx_ds =sta^5;
sbit max_rt =sta^41ms延時函式void delay_ms(uint t)
return(ucharreturn read uchar函式:uchar spi_read(uchar reg)
/*功能:nrf24l01的spi時序uchar spi_read(uchar reg)
//串列埠除錯用傳送接受到得資料到串列埠ea=1nrf24l01初始化 2011/11/02void init_nrf24l01(void)
{inerdelay_us(100);
ce=0; // chip enable
csn=1; // spi disable
sck=0; // spi clock line init high
spi_write_buf(write_reg + tx_addr, tx_address, tx_adr_width); // 寫本地位址
spi_write_buf(write_reg + rx_addr_p0,
rx_address, rx_adr_width); // 寫接收端位址
spi_rw_reg(write_reg + en_aa, 0x01頻道0自動 ack應答允許
spi_rw_reg(write_reg + en_rxaddr, 0x01); // 允許接收位址只有頻道0,如果需要多頻道可以參考page21
spi_rw_reg(write_reg + rf_ch, 0設定通道工作為2.4ghz,收發必須一致
spi_rw_reg(write_reg + rx_pw_p0, rx_pload_width); //設定接受資料長度 5位元組
spi_rw_reg(write_reg + rf_setup, 0x07); //設定發射速率為1mhz,發射功率為最大值0db
spi_rw_reg(write_reg + config, 0x0firq收發完成中斷響應,16位crc ,主接收
setrx_mode();//設定接受模式 irq收發完成中斷響應,16位crc ,主接收
init_nrf_irq();//設定int0中斷低電平觸發開啟int0nrf24l01se 應用層函式init_nrf24l01();//設定nrf24
// int0_nrf_irq (void) interrupt 0// 資料處理在其中主函式void main(void)
{init_rs232();//初始化串列埠
init_nrf24l01();//初始化nrf24l01 5位元組資料通訊 irq觸發int0 接受模式資料接受存於rxbuf開機顯示ser_sendstring("小強號!!");
while(1
NRF24L01接收程式
標頭檔案 檔名 建立人 動車組 日期 2012 8 21 功能描述 用nrf24l01傳送一定位元組數的資料或者接收資料 占用資源 四位控制spi匯流排的io線和 1位nrf24l01模式控制引腳 占用乙個中段 include uchar code tx address tx adr width 本...
nrf24l01傳送和接收程式
1 傳送 include include typedef unsigned char uchar typedef unsigned char uint io埠定義 sbit miso p1 2 sbit mosi p3 2 sbit sck p1 6 sbit ce p1 5 sbit csn p1...
nrf24L01工作流程圖型
第1頁nrf24l01 流程圖 引腳定義 n yy n n 開始 時鐘ic lcd 液晶 溫度感測器 初始化nrf24l01 配置模式 判斷鍵盤是 否有動作 資料採集 和顯示將採集到的資料 裝入發射暫存器 啟動發射 發射是否完成 按鍵處理子程式 是否處理完 第2頁 nn y yn 開始 序列通訊 初...