




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、冒死分享公司項目外設(shè)驅(qū)動代碼(SPI讀取鐵電,RFID驅(qū)動,單總線18B20,I2C讀SD2000時鐘等) ,絕對的實用,做產(chǎn)品必備,進(jìn)來的請回帖支持一下第一個讀取鐵電的代碼:/ 對鐵電的操作不采用中斷的方式, 而是在需要對數(shù)據(jù)進(jìn)行存儲或讀取時, 采用查詢中斷標(biāo) 志位。/* 函數(shù)名稱: FM_init*功能描述:對鐵電進(jìn)行初始化,包括對于之接口的單片機(jī) SPI 口的初始化* 入口參數(shù):無* 出口參數(shù):無*/void FM_init(void)UCB2CTL1|=UCSWRST; 先對此位置 1UCB2CTL0=UCCKPH+UCMSB+UCMST+UCSY模式/3,MSBfirst ,8-bi
2、t data,Master mode,3-pin SPI , Synchronous modeUCB2CTL1|=UCSSEL_2;/SMCLK作為 SPI 的時鐘UCB2BR0=0x01;/SPI 采用16M的輔助主時鐘UCB2BR1=0x00;UCB2CTL1 &=UCSWRST;/清零/* 函數(shù)名稱: Fram_Read_char*功能描述:讀取鐵電的內(nèi)容,返回一個8 位的數(shù)*入口參數(shù):pab 鐵電的地址*出口參數(shù):返回一個 char 型數(shù)據(jù)*unsigned char FM_read_char(unsigned int pab)unsigned char j,k=0; j=(u
3、nsigned char)pab;FM_CS_0;/ 選中鐵電FM_WP_1;/ 不進(jìn)行寫保護(hù)UCB2TXBUF=0x03;while(UCB2IFG&UCTXIFG)=0);/ 等待發(fā)送完成標(biāo)志的產(chǎn)生UCB2TXBUF=(unsigned char)(pab>>8);當(dāng)數(shù)據(jù)寫入 TXBUF后,UCTXIFG標(biāo)志自動清零while(UCB2IFG&UCTXIFG)=0);/ 等待發(fā)送完成標(biāo)志的產(chǎn)生UCB2TXBUF=j;while(UCB2IFG&UCTXIFG)=0);/ 等待發(fā)送完成標(biāo)志的產(chǎn)生 UCB2TXBUF=0;while(UCB2STAT&
4、;UCBUSY)=1);/ 等待 SPI 不忙 k=UCB2RXBUF;FM_CS_1; / 不選中鐵電return k;/* 函數(shù)名稱: Fram_Read_int*功能描述:讀取鐵電的內(nèi)容,返回一個 16 位的數(shù)* 入口參數(shù): pab 鐵電的地址* 出口參數(shù):返回一個 int 型數(shù)據(jù)*/ unsigned int FM_read_int(unsigned int pab) unsigned char j;unsigned int t;j=(unsigned char)pab;FM_CS_0;/ 選中鐵電FM_WP_1;/ 不進(jìn)行寫保護(hù)UCB2TXBUF=0x03;while(UCB2IFG
5、&UCTXIFG)=0);/ 等待發(fā)送完成標(biāo)志的產(chǎn)生UCB2TXBUF=(unsigned char)(pab>>8);當(dāng)數(shù)據(jù)寫入 TXBUF后,UCTXIFG標(biāo)志自動清零while(UCB2IFG&UCTXIFG)=0);/ UCB2TXBUF=j;while(UCB2IFG&UCTXIFG)=0);/等待發(fā)送完成標(biāo)志的產(chǎn)生等待發(fā)送完成標(biāo)志的產(chǎn)生UCB2TXBUF=0;while(UCB2STAT&UCBUSY)=1);/等待發(fā)送完成標(biāo)志的產(chǎn)生j=UCB2RXBUF;UCB2TXBUF=0;while(UCB2STAT&UCBUSY)=1)
6、;/ 等待 SPI 不忙t=UCB2RXBUF;t<<=8;t|=j;FM_CS_1; / 不選中鐵電return t;/* 函數(shù)名稱: FM_write_char* 功能描述:向鐵電寫入一個 8 位的數(shù)據(jù)* 入口參數(shù): pab 鐵電的地址, date: 寫入的數(shù)據(jù)* 出口參數(shù):無*void FM_write_char(unsigned int pab,unsigned char date) unsigned char j; j=(unsigned char)pab; / _DINT();FM_CS_0;/ 選中鐵電 FM_WP_1;/ 不進(jìn)行寫保護(hù)UCB2TXBUF=0x06;w
7、hile(UCB2STAT&UCBUSY)=1);/ 等待 SPI 不忙 FM_CS_1; / 不選中鐵電FM_CS_0;/ 選中鐵電FM_WP_1;/ 不進(jìn)行寫保護(hù)UCB2TXBUF=0x02;while(UCB2STAT&UCBUSY)=1);/ 等待 SPI 不忙UCB2TXBUF=(unsigned char)(pab>>8);/i; while(UCB2IFG&UCTXIFG)=0);/ 等待發(fā)送完成標(biāo)志的產(chǎn)生 UCB2TXBUF=j;while(UCB2IFG&UCTXIFG)=0);/ 等待發(fā)送完成標(biāo)志的產(chǎn)生 UCB2TXBUF=dat
8、e;while(UCB2STAT&UCBUSY)=1);/ 等待 SPI 不忙FM_CS_1; / 不選中鐵電/ _EINT();/* 函數(shù)名稱: FM_write_int*功能描述:向鐵電寫入一個 16 位的數(shù)據(jù)* 入口參數(shù): pab 鐵電的地址, date: 寫入的數(shù)據(jù)* 出口參數(shù):無*/void FM_write_int(unsigned int pab,unsigned int date)unsigned char j;j=(unsigned char)pab;FM_CS_0;/ 選中鐵電FM_WP_1;/ 不進(jìn)行寫保護(hù)UCB2TXBUF=0x06;while(UCB2STAT
9、&UCBUSY)=1);/ 等待 SPI 不忙FM_CS_1; / 不選中鐵電FM_CS_0;/ 選中鐵電FM_WP_1;/ 不進(jìn)行寫保護(hù)UCB2TXBUF=0x02;while(UCB2STAT&UCBUSY)=1);/ 等待 SPI 不忙UCB2TXBUF=(unsigned char)(pab>>8);/i; while(UCB2IFG&UCTXIFG)=0);/ 等待發(fā)送完成標(biāo)志的產(chǎn)生 UCB2TXBUF=j;while(UCB2IFG&UCTXIFG)=0);/ 等待發(fā)送完成標(biāo)志的產(chǎn)生 j=(unsigned char)(date>&
10、gt;8);UCB2TXBUF=(unsigned char)date;/j;while(UCB2IFG&UCTXIFG)=0);/ 等待發(fā)送完成標(biāo)志的產(chǎn)生 UCB2TXBUF=j; while(UCB2STAT&UCBUSY)=1);/ 等待 SPI 不忙 FM_CS_1; / 不選中鐵電 /* 函數(shù)名稱: tx_write_int *功能描述:向鐵電寫入一個 8 位的數(shù)據(jù)* 入口參數(shù): pab 鐵電的地址, date: 寫入的數(shù)據(jù)* 出口參數(shù):無 */ void tx_write_int(unsigned int pab,unsigned int date)unsigned
11、 char j; j=(unsigned char)pab;FM_CS_0;/ 選中鐵電FM_WP_1;/ 不進(jìn)行寫保護(hù) UCB2TXBUF=0x06; while(UCB2STAT&UCBUSY)=1);/ 等待 SPI 不忙 FM_CS_1; / 不選中鐵電FM_CS_0;/ 選中鐵電FM_WP_1;/ 不進(jìn)行寫保護(hù) UCB2TXBUF=0x02; while(UCB2STAT&UCBUSY)=1);/ 等待 SPI 不忙 UCB2TXBUF=(unsigned char)(pab>>8);/i; while(UCB2IFG&UCTXIFG)=0);/
12、等待發(fā)送完成標(biāo)志的產(chǎn)生 UCB2TXBUF=j;while(UCB2IFG&UCTXIFG)=0);/ 等待發(fā)送完成標(biāo)志的產(chǎn)生 j=(unsigned char)(date>>8);UCB2TXBUF=(unsigned char)date;/j; while(UCB2IFG&UCTXIFG)=0);/ 等待發(fā)送完成標(biāo)志的產(chǎn)生 UCB2TXBUF=j;while(UCB2STAT&UCBUSY)=1);/ 等待 SPI 不忙 FM_CS_1; / 不選中鐵電'* 函數(shù)名稱: FM_write_jg_tou_gs*功能描述:向鐵電寫入結(jié)構(gòu)頭的個數(shù)* 入
13、口參數(shù):無* 出口參數(shù):無* void FM_write_jg_tou_gs(void)/ _DINT();FM_CS_0;/ 選中鐵電FM_WP_1;/ 不進(jìn)行寫保護(hù) UCB2TXBUF=0x06;while(UCB2STAT&UCBUSY)=1);/ 等待 SPI 不忙FM_CS_1; / 不選中鐵電FM_CS_0;/ 選中鐵電FM_WP_1;/ 不進(jìn)行寫保護(hù)UCB2TXBUF=0x02; while(UCB2STAT&UCBUSY)=1);/ 等待 SPI 不忙等待發(fā)送完成標(biāo)志的產(chǎn)生等待發(fā)送完成標(biāo)志的產(chǎn)生UCB2TXBUF=0;/i;while(UCB2IFG&U
14、CTXIFG)=0);/UCB2TXBUF=10;/10;while(UCB2IFG&UCTXIFG)=0);/UCB2TXBUF=0x5a; while(UCB2IFG&UCTXIFG)=0);UCB2TXBUF=id_jg.gs;while(UCB2STAT&UCBUSY)=1);/ 等待 SPI 不忙FM_CS_1; / 不選中鐵電/*函數(shù)名稱:FM_write_bt*功能描述:向鐵電寫入表頭,*入口參數(shù):pab:表頭的起始地址,djg :第幾個表頭,0表示第一個*出口參數(shù):無*void FM_write_bt(unsigned int pab,unsigned
15、int djg)unsigned char j; j=(unsigned char)pab;FM_CS_0;/ 選中鐵電FM_WP_1;/ 不進(jìn)行寫保護(hù)UCB2TXBUF=0x06; while(UCB2STAT&UCBUSY)=1);/ 等待 SPI 不忙 FM_CS_1; / 不選中鐵電FM_CS_0;/ 選中鐵電FM_WP_1;/ 不進(jìn)行寫保護(hù)UCB2TXBUF=0x02; while(UCB2STAT&UCBUSY)=1);/ 等待 SPI 不忙 UCB2TXBUF=(unsigned char)(pab>>8);/i;while(UCB2IFG&U
16、CTXIFG)=0);/ 等待發(fā)送完成標(biāo)志的產(chǎn)生 UCB2TXBUF=j;while(UCB2IFG&UCTXIFG)=0);/ 等待發(fā)送完成標(biāo)志的產(chǎn)生UCB2TXBUF=id_jg.lbtdjg.year;while(UCB2IFG&UCTXIFG)=0);/等待發(fā)送完成標(biāo)志的產(chǎn)生UCB2TXBUF=id_jg.lbtdjg.month; while(UCB2IFG&UCTXIFG)=0);/ UCB2TXBUF=id_jg.lbtdjg.day;while(UCB2IFG&UCTXIFG)=0);/等待發(fā)送完成標(biāo)志的產(chǎn)生等待發(fā)送完成標(biāo)志的產(chǎn)生UCB2TXBU
17、F=id_jg.lbtdjg.hour;while(UCB2IFG&UCTXIFG)=0);/等待發(fā)送完成標(biāo)志的產(chǎn)生UCB2TXBUF=(unsigned char)id_jg.lbtdjg.hour_id_gs; while(UCB2IFG&UCTXIFG)=0);/ 等待發(fā)送完成標(biāo)志的產(chǎn)生UCB2TXBUF=(unsigned char)(id_jg.lbtdjg.hour_id_gs>>8); while(UCB2IFG&UCTXIFG)=0);/ 等待發(fā)送完成標(biāo)志的產(chǎn)生UCB2TXBUF=(unsigned char)id_jg.lbtdjg.hou
18、r_td_begin; while(UCB2IFG&UCTXIFG)=0);/ 等待發(fā)送完成標(biāo)志的產(chǎn)生UCB2TXBUF=(unsigned char)(id_jg.lbtdjg.hour_td_begin>>8);while(UCB2IFG&UCTXIFG)=0);/ 等待發(fā)送完成標(biāo)志的產(chǎn)生UCB2TXBUF=(unsigned char)id_jg.lbtdjg.hour_tx_tran_ok_gs;while(UCB2IFG&UCTXIFG)=0);/ 等待發(fā)送完成標(biāo)志的產(chǎn)生UCB2TXBUF=(unsigned char)(id_jg.lbtdjg.
19、hour_tx_tran_ok_gs>>8);while(UCB2STAT&UCBUSY)=1);/ 等待 SPI 不忙FM_CS_1; / 不選中鐵電/* 函數(shù)名稱: FM_clr0_32768*功能描述:清除鐵電中的所有數(shù)據(jù)* 入口參數(shù):無* 出口參數(shù):無*/void FM_clr0_32768(void)unsigned int i;/ _DINT();FM_CS_0;/ 選中鐵電FM_WP_1;/ 不進(jìn)行寫保護(hù)UCB2TXBUF=0x06;while(UCB2STAT&UCBUSY)=1);/ 等待 SPI 不忙FM_CS_1; / 不選中鐵電/FM_CS_
20、0;/ 選中鐵電FM_WP_1;/ 不進(jìn)行寫保護(hù)UCB2TXBUF=0x02;while(UCB2STAT&UCBUSY)=1);/ 等待 SPI 不忙for(i=0;i<32768;i+)UCB2TXBUF=0;/(unsigned char)pab;while(UCB2IFG&UCTXIFG)=0);/ 等待發(fā)送完成標(biāo)志的產(chǎn)生while(UCB2STAT&UCBUSY)=1);/ 等待 SPI 不忙 FM_CS_1; / 不選中鐵電 /* 函數(shù)名稱: FM_read_bt *功能描述:讀取鐵電中的相關(guān)信息參數(shù)* 入口參數(shù):無* 出口參數(shù):無*/void FM_
21、read_bt(void)unsigned char i,j;/,k=0;FM_CS_0;/ 選中鐵電FM_WP_1;/ 不進(jìn)行寫保護(hù) UCB0TXBUF=0x03;while(UCB2IFG&UCTXIFG)=0); UCB2TXBUF=0;/while(UCB2IFG&UCTXIFG)=0);UCB2TXBUF=12;while(UCB2IFG&UCTXIFG)=0);for(i=0;i<24;i+)/macheng 連續(xù)性的把所有參數(shù)全部讀取出來 UCB2TXBUF=0; while(UCB2STAT&UCBUSY)=1);id_jg.lbt .ye
22、ar=UCB0RXBUF;UCB2TXBUF=0;while(UCB2STAT&UCBUSY)=1);id_jg.lbt.month=UCB0RXBUF;UCB2TXBUF=0;while(UCB2STAT&UCBUSY)=1);id_jg.lbt.day=UCB0RXBUF;UCB2TXBUF=0;while(UCB2STAT&UCBUSY)=1);id_jg.lbt.hour=UCB0RXBUF;UCB2TXBUF=0;while(UCB2STAT&UCBUSY)=1);j=UCB2RXBUF;UCB2TXBUF=0; while(UCB2STAT&
23、UCBUSY)=1); id_jg.lbt.hour_id_gs=UCB2RXBUF; id_jg.lbt.hour_id_gs<<=8; id_jg.lbt.hour_id_gs|=j;UCB2TXBUF=0;while(UCB0STAT&UCBUSY)=1);j=UCB2RXBUF;UCB2TXBUF=0;while(UCB0STAT&UCBUSY)=1); id_jg.lbt.hour_td_begin=UCB0RXBUF; id_jg.lbt.hour_td_begin<<=8; id_jg.lbt.hour_td_begin|=j;UCB0TX
24、BUF=0;while(UCB0STAT&UCBUSY)=1);j=UCB2RXBUF;UCB2TXBUF=0;while(UCB2STAT&UCBUSY)=1);id_jg.lbt.hour_tx_tran_ok_gs=UCB2RXBUF;id_jg.lbt.hour_tx_tran_ok_gs<<=8;FM_CS_1; / 不選中鐵電* 函數(shù)名稱: write_clr10_32768 *功能描述:把鐵電中從第十字節(jié)開始到 32768 字節(jié)結(jié)束的內(nèi)容清除 *入口參數(shù):無*出口參數(shù):無void write_clr10_32768(void)unsigned int
25、i;/ _DINT();FM_CS_0;/ 選中鐵電FM_WP_1;/ 不進(jìn)行寫保護(hù)UCB2TXBUF=0x06; while(UCB2IFG&UCTXIFG)=0);FM_CS_1;/ 不選中鐵電/FM_CS_0;/ 選中鐵電FM_WP_1;/ 不進(jìn)行寫保護(hù)UCB2TXBUF=0x02; while(UCB2STAT&UCBUSY)=1);UCB2TXBUF=0;/(unsigned char)(pab>>8); while(UCB2IFG&UCTXIFG)=0);UCB2TXBUF=10;/(unsigned char)pab;while(UCB2STA
26、T&UCBUSY)=1) WDTCTL=WDTPW+WDTCNTCL+WDTSSEL_1; for(i=10;i<32768;i+)UCB2TXBUF=0;/(unsigned char)pab; while(UCB2IFG&UCTXIFG)=0);WDTCTL=WDTPW+WDTCNTCL+WDTSSEL_1; while(UCB2STAT&UCBUSY)=1);FM_CS_1; / 不選中鐵電/* 函數(shù)名稱: read_td_id_hao_fen *功能描述:讀取鐵電中此地址下的卡號和對應(yīng)的分鐘數(shù)*入口參數(shù):鐵電地址*出口參數(shù):無*/void read_td_
27、id_hao_fen(unsigned int pab) unsigned char j;/,k=0; j=(unsigned char)pab;FM_CS_0;/ 選中鐵電FM_WP_1;/ 不進(jìn)行寫保護(hù)UCB2TXBUF=0x03; while(UCB2IFG&UCTXIFG)=0);UCB2TXBUF=(unsigned char)(pab>>8);/i; while(UCB2IFG&UCTXIFG)=0);UCB2TXBUF=j; while(UCB2IFG&UCTXIFG)=0);UCB2TXBUF=0; while(UCB2STAT&UC
28、BUSY)=1);rdtd.fen=UCB2RXBUF;UCB2TXBUF=0; while(UCB2STAT&UCBUSY)=1);j=UCB2RXBUF;UCB2TXBUF=0; while(UCB2STAT&UCBUSY)=1); rdtd.ID_HAO=UCB2RXBUF; rdtd.ID_HAO<<=8;rdtd.ID_HAO|=j;FM_CS_1; / 不選中鐵電void tx_read_td_id_hao_fen(unsigned int pab) unsigned char j;/,k=0; j=(unsigned char)pab;FM_CS_0;
29、/ 選中鐵電FM_WP_1;/ 不進(jìn)行寫保護(hù) UCB2TXBUF=0x03;while(UCB2IFG&UCTXIFG)=0);UCB2TXBUF=(unsigned char)(pab>>8);/i; while(UCB0IFG&UCTXIFG)=0); UCB2TXBUF=j;while(UCB2IFG&UCTXIFG)=0); UCB2TXBUF=0;while(UCB2STAT&UCBUSY)=1); txtd.fen=UCB2RXBUF;UCB2TXBUF=0; while(UCB2STAT&UCBUSY)=1);j=UCB2RXB
30、UF;UCB2TXBUF=0; while(UCB2STAT&UCBUSY)=1); txtd.ID_HAO=UCB2RXBUF;txtd.ID_HAO<<=8;txtd.ID_HAO|=j;FM_CS_1; / 不選中鐵電void add_td_id_hao_fen(unsigned int pab)unsigned char j;j=(unsigned char)pab;FM_CS_0;/ 選中鐵電FM_WP_1;/ 不進(jìn)行寫保護(hù)UCB2TXBUF=0x06; while(UCB2STAT&UCBUSY)=1);FM_CS_1;/ 不選中鐵電/FM_CS_0;/
31、 選中鐵電FM_WP_1;/ 不進(jìn)行寫保護(hù) UCB2TXBUF=0x02;while(UCB2STAT&UCBUSY)=1);UCB2TXBUF=(unsigned char)(pab>>8);while(UCB2IFG&UCTXIFG)=0);UCB2TXBUF=j; while(UCB2IFG&UCTXIFG)=0); UCB2TXBUF=lstemp_ka_hao_fen;/IDHAO_CHULI.dangqian_fen;/j; while(UCB2IFG&UCTXIFG)=0);j=(unsigned char)(lstemp_ka_hao
32、>>8);/(temp_id.id_haop>>8);/(IDHAO_CHULI.id_hao>>8);/(d ate>>8);UCB2TXBUF=(unsigned char)lstemp_ka_hao;/temp_id.id_haop;/IDHAO_CHULI.id_hao;/date;/j;while(UCB2IFG&UCTXIFG)=0);UCB2TXBUF=j; while(UCB2STAT&UCBUSY)=1);FM_CS_1; / 不選中鐵電void write_td_id_hao_fen(unsigned int
33、pab)/,unsigned int date) unsigned char j; j=(unsigned char)pab;FM_CS_0;/ 選中鐵電FM_WP_1;/ 不進(jìn)行寫保護(hù) UCB2TXBUF=0x06;while(UCB2STAT&UCBUSY)=1);FM_CS_1;/ 不選中鐵電/FM_CS_0;/ 選中鐵電FM_WP_1;/ 不進(jìn)行寫保護(hù)UCB2TXBUF=0x02;while(UCB2STAT&UCBUSY)=1);UCB2TXBUF=(unsigned char)(pab>>8);while(UCB2IFG&UCTXIFG)=0);
34、UCB2TXBUF=j;while(UCB2IFG&UCTXIFG)=0);UCB2TXBUF=rdtd.fen;/IDHAO_CHULI.dangqian_fen;/j; while(UCB2IFG&UCTXIFG)=0);j=(unsigned char)(rdtd.ID_HAO>>8);/(temp_id.id_haop>>8);/(IDHAO_CHULI.id_hao>>8);/(dat e>>8);UCB2TXBUF=(unsigned char)rdtd.ID_HAO;/temp_id.id_haop;/IDHAO_C
35、HULI.id_hao;/date;/j;while(UCB2IFG&UCTXIFG)=0);UCB2TXBUF=j; while(UCB2STAT&UCBUSY)=1);FM_CS_1; / 不選中鐵電SPI 驅(qū)動 24L01 發(fā)送端程序:#include "msp430x14x.h"#define uchar unsigned char#define uint unsigned int/POW_UP 通過配置子寫入#define CSN BIT0 / 每次 SPI 前一個下降沿, SPI 后上升沿#define MOSI BIT1#define MISO
36、 BIT2#define SCK BIT3#define CE BIT4#define IRQ BIT5/SPI Commands command word#define R_REGISTER 0x00 /0x00 + Register address#define W_REGISTER 0x20 /0x20 + Register address#define R_RX_PAYLOAD 0x61#define W_TX_PAYLOAD 0xA0#define FLUSH_TX 0xE1#define FLUSH_RX 0xE2#define REUSE_TX_PL 0xE3#define NO
37、P 0xFF/Register Definitions/ name address data what#define CONFIG 0x00 /0x7e:EN CRC、 PWR_U、P TX#define EN_AA 0x01 /0x00:Disabe Enhanced ShockBurst#define EN_RXADDR 0x02 /0X01: 使能 pipe 0#define SETUP_AW 0x03 /0X03: 默認(rèn) 5 字節(jié)的地址寬度 RX/TX Address width#define SETUP_RETR 0x04 /0X00: Auto Retransmit disable
38、d#define RF_CH 0x05 /0X00: Sets the frequency channel nRF24L01 operates on#define RF_SETUP 0x06 /0X06:1M 、0dBm、no LNA#define STATUS 0x07 /read and 中斷服務(wù)程序后清標(biāo)志#define OBSERVE_TX 0x08 /read only#define CD0x09 /用在 Enhanced ShockBurst#define RX_ADDR_P0 0x0A / 接收通道 0 的地址 (LSbuf is written first)#define RX
39、_ADDR_P1 0x0B /0x00: 不使用#define RX_ADDR_P2 0x0C /0x00: 不使用#define RX_ADDR_P3 0x0D /0x00: 不使用#define RX_ADDR_P4 0x0E /0x00: 不使用#define RX_ADDR_P5 0x0F /0x00: 不使用#define TX_ADDR 0x10 /0XE7E7E7E7E7: 默認(rèn)發(fā)送通道的地址 5 字節(jié)#define RX_PW_P0 0x11/0X03:接收通道 0 的數(shù)據(jù)寬度為 3 字節(jié)#define RX_PW_P1 0x12/0X00:該接收通道不使用#define RX
40、_PW_P2 0x13/0X00:該接收通道不使用#define RX_PW_P3 0x14/0X00:該接收通道不使用#define RX_PW_P4 0x15/0X00:該接收通道不使用#define RX_PW_P5 0x16/0X00:該接收通道不使用#define FIFO_STATUS 0x17/read onlyuchar Tx_Address5=0x09,0x87,0x65,0x43,0x21;/設(shè)置發(fā)送端的地址uchar Tx_date=0x10;/要發(fā)送的數(shù)據(jù)void clk_sys_init(); /MCLK = SMCLK = 4Mvoid io_nrf_init();
41、 /無線端口初始化( P2)void nrf24l01_on(); /nrf24l01 POWER ONvoid wr_spi_byte(uchar date);void wr_spi(uchar command_address,uchar config_date);void tx_nrf_init();void Set_Rx_Address(); /設(shè)置接收通道的地址的地址void Set_Tx_Address(); /設(shè)置發(fā)送端的地址void tx_payload(); /將要發(fā)送的數(shù)據(jù)寫入 FIFOvoid CE_pulse(); /CE不低于 10us 的上升沿,觸發(fā)數(shù)據(jù)發(fā)送void
42、Flush_TX_FIFO();/ 清空 FIFOvoid delay_us(); /進(jìn)入函數(shù)需 8 條指令的時間, 2 usvoid delay_1_5ms(); /1.5ms void delay(uint time);void delay_130us(); /需要 520 * ( 1/4M)=130us/*主程序 */void main( void )/ Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD;clk_sys_init(); /MCLK = SMCLK = 4Mio_nrf_init()
43、;nrf24l01_on(); /PWR_UP、 TX_DS、 IRQ、EN CRC、TXdelay_1_5ms(); /1.5ms 6000 *( 1/4M) = 1.5mstx_nrf_init(); /初始化配置字Set_Tx_Address(); /設(shè)置發(fā)送端的地址while(1)tx_payload(); /將要發(fā)送的數(shù)據(jù)寫入 FIF0CE_pulse(); /CE delay_130us();不低于 10us 的上升沿,觸發(fā)數(shù)據(jù)發(fā)送Flush_TX_FIFO(); /清空 FIF0P10UT A= BIT4; /指示燈delay(8000); /距下次發(fā)送的時間/*初始化程序 */
44、void clk_sys_init()uint i;BCSCTL1 &= XT2OFF;doIFG1 &=OFIFG;for(i=0;i<0xff;i+);while(!(IFG1 & OFIFG);BCSCTL2 |= SELM1 + SELS; /MCLK = SMCLK = 4Mvoid io_nrf_init()P2DIR |= CSN + MOSI + SCK + CE; /SOMI , IRQ INPUT P2OUT=0;下降沿置標(biāo)志位無線模塊程序 *P2OUT |= CSN; / P2IES |= IRQ; / / P2IE |= IRQ;P1DIR
45、 |= BIT4; /LED /* void nrf24l01_on()wr_spi(W_REGISTER + CONFIG,0x3e);/1e 中斷都不允許 void wr_spi(uchar command_address,uchar config_date)P2OUT |=CSN;P2OUT &=CSN; wr_spi_byte(command_address); wr_spi_byte(config_date);P2OUT |= CSN;void tx_nrf_init()wr_spi(W_REGISTER + EN_AA,0x00); /NO ack wr_spi(W_REG
46、ISTER + EN_RXADDR,0x01);wr_spi(W_REGISTER + SETUP_AW,0x03);wr_spi(W_REGISTER + SETUP_RETR,0x00); wr_spi(W_REGISTER + RF_CH,0x00); /2.4G wr_spi(W_REGISTER + RF_SETUP,0x06);/wr_spi(W_REGISTER + RX_PW_P0,0x08);void Set_Tx_Address() /設(shè)置發(fā)送端的地址uchar i=0;P2OUT |= CSN;P2OUT &= CSN;wr_spi_byte(W_REGISTER
47、 + TX_ADDR); for(i=0;i<5;i+)wr_spi_byte(Tx_Address );P2OUT |= CSN;void tx_payload() / 將要發(fā)送的數(shù)據(jù)寫入 FIFO P2OUT |= CSN;P2OUT &= CSN; wr_spi_byte(W_TX_PAYLOAD);wr_spi_byte(Tx_date);P2OUT |= CSN;void CE_pulse() /CE 不低于 10us 的上升沿,觸發(fā)數(shù)據(jù)發(fā)送 delay(8);P2OUT |= CE;delay(8);P2OUT &= CE;void Flush_TX_FIFO
48、() / 清空 FIFOP2OUT |= CSN;P2OUT &= CSN;wr_spi_byte(FLUSH_TX);P2OUT |= CSN;void wr_spi_byte(uchar date)uchar bit;P2OUT &= SCK; / 時鐘低電平/delay(1); / 建議測試時先加上延時,測試通了再去掉 for(bit=0;bit<8;bit+) / 先高位,后低位if(date & BIT7)P2OUT |= MOSI;elseP2OUT &= MOSI;/ _NOP();_NOP();_NOP(); / 數(shù)據(jù)建立時間 1usP2O
49、UT |= SCK;/ delay(2);date <<= 1; / 一條指令的時間P2OUT &= SCK;/ delay(2);/ delay(1);/*void delay_us()Jvoid delay_1_5ms()uint i=0,j=0;for(i=0;i<30;i+)for(j=0;j<38;j+)延時程序 *void delay(uint time)uint i;for(i=0;i<time;i+)void delay_130us()uint i=0;for(i=0;i<100;i+);/*中斷程序/*#pragma vector=
50、PORT2_VECTOR_interrupt void p2(void)P10UT A= BIT4; /LEDP2IFG =0;*/SPI 驅(qū)動 24L01 接收端程序:#include "msp430x14x.h"#define uchar unsigned char#define uint unsigned int/POW_UP 通過配置子寫入#define CSN BIT0 / 每次 SPI 前一個下降沿, SPI 后上升沿#define MOSI BIT1#define MISO BIT2#define SCK BIT3#define CE BIT4#define IRQ BIT5/SPI Commands command word#define R_REGISTER 0x00 /R_REGISTER + Register address#define W_REGISTER 0x20 /W_REGISTER + Register address#define R_RX_PAYLOAD 0x61#define W_TX_PAYLOAD 0xA0#define FLUSH_T
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025“陰陽合同”的處理原則
- 2025翡翠首飾買賣合同模板
- 2025國際石油工程建設(shè)項目合同(中英文對照)
- 2025食品采購合同
- 2025關(guān)于軟件升級的服務(wù)合同范本
- 2025實習(xí)生合同協(xié)議書
- 2025保險公司擔(dān)保合同樣本2
- 2025年商業(yè)地產(chǎn)租賃合同
- 2025年增亮膜項目合作計劃書
- 2025年地質(zhì)勘查專用設(shè)備項目建議書
- 期中模擬卷(新疆專用)-2024-2025學(xué)年八年級英語下學(xué)期核心素養(yǎng)素質(zhì)調(diào)研模擬練習(xí)試題(考試版)A4
- 甲狀旁腺切除術(shù)后的護(hù)理措施
- 2024慢性鼻竇炎診斷和治療指南解讀課件
- (T8聯(lián)考)2025屆高三部分重點中學(xué)3月聯(lián)合測評生物試卷(含答案詳解)河北版
- 員工入職申請表(完整版)
- T-GDEIIA 56-2024 垂直起降低空航空器起降場基礎(chǔ)設(shè)施配置技術(shù)要求
- 整本書閱讀《林海雪原》【知識精研】六年級語文下冊 (統(tǒng)編版五四制2024)
- 9《我的戰(zhàn)友邱少云》說課稿-2024-2025學(xué)年六年級語文上冊統(tǒng)編版
- 亞朵酒店前臺培訓(xùn)
- 大學(xué)假期安全主題班會課件
- 創(chuàng)業(yè)培訓(xùn)講師手冊
評論
0/150
提交評論