久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2312|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

AVR mega16單片機(jī)MCP2510發(fā)送程序可行,接收不可行請高手指教。

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:215525 發(fā)表于 2019-3-23 12:37 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
如下代碼部分只能發(fā)送,不能接收,還請高手指點(diǎn)。

  1. void Spi_MasterTransmit(void)
  2. {
  3. #if 1
  4.                 char i;
  5.                         
  6.                         //是為了等待串行數(shù)據(jù)發(fā)送,發(fā)送結(jié)束前始終在循環(huán),結(jié)束后跳出循環(huán),執(zhí)行后續(xù)代碼。
  7.                         if (SpiSending!=0)//有數(shù)據(jù)需要發(fā)送
  8.                         {
  9.                                 if (McpFisrtCmm==0)//第1次發(fā)送
  10.                                 {
  11.                                         CLRCS;//SPI口基本在PB口 開啟
  12.                                         NOP();
  13.                                         NOP();
  14.                                         SPDR = SpiTransData[0];
  15.                                         SpiSendNum=1;//指向下一地址                                 
  16.                                         McpFisrtCmm=1;
  17.                                 }
  18.                                 else
  19.                                 {
  20.                                         if (SPSR & (1<<SPIF))//串行發(fā)送結(jié)束后,SPIF置位,中斷//是為了等待串行數(shù)據(jù)發(fā)送,發(fā)送結(jié)束前始終在循環(huán),結(jié)束后跳出循環(huán),執(zhí)行后續(xù)代碼。
  21.                                         {
  22.                                                 if(SpiSendNum<SpiMaxSend)//SpiMaxSend應(yīng)比量小1        ,SpiMaxSend = 5
  23.                                                 {
  24.                                        
  25.                                                         SpiReceiveData[SpiSendNum-1]=SPDR;//讀數(shù)據(jù)               
  26.                                                         SPDR = SpiTransData[SpiSendNum];//寫數(shù)據(jù)                                       
  27.                                                         SpiSendNum++;                                                //下一筆數(shù)據(jù)
  28.                
  29.                                                         //SpiRcvNum = 0;//讀的時(shí)候?qū)懙臄?shù)據(jù)筆數(shù)為0
  30.                                                 }
  31.                                                 else
  32.                                                 {

  33.                                                 SpiReceiveData[SpiSendNum-1]=SPDR;//讀數(shù)據(jù)         //SpiSendNum  需要一個(gè)初始值才行。
  34.                 //                                          SpiReceiveData1[SpiRcvNum++]=SPDR;
  35.                                                         //相應(yīng)指示
  36.                                                         SpiMaxSend=0;//傳輸完成
  37.                                                         SpiSending=0;                        
  38.                                                         McpFisrtCmm=0;//清除標(biāo)示        
  39.                                                         SETCS;//停止數(shù)據(jù)發(fā)送        
  40.                                                 }
  41.                                         }                                       
  42.                                 }                        
  43.                         }else
  44.                         {
  45.                                 CLRCS;//SPI口基本在PB口 開啟
  46.                                 if ((SPSR & (1<<SPIF)))//串行發(fā)送結(jié)束后,SPIF置位,中斷//是為了等待串行數(shù)據(jù)發(fā)送,發(fā)送結(jié)束前始終在循環(huán),結(jié)束后跳出循環(huán),執(zhí)行后續(xù)代碼。
  47.                                         {
  48.                                                         //Set_Bit(PORTB, 3);
  49.                                                         ImitShootFlag = 1;
  50.                                                         //SPDR = 0XFF;
  51.                                                         MCP2510Read(RXB0DLC,20);
  52.                                                         for(i=0;i< 20;i++)
  53.                                                         SpiReceiveData1[i]=SpiTransData[i];//SPDR;
  54. //                                                        if(SpiRcvNum > 20)
  55. //                                                                SpiRcvNum = 0;
  56.                                                         
  57.                                         }
  58.                                         SETCS;//停止數(shù)據(jù)發(fā)送        

  59.                         }
  60.                
  61.         #endif


  62. #if 0
  63.                 //是為了等待串行數(shù)據(jù)發(fā)送,發(fā)送結(jié)束前始終在循環(huán),結(jié)束后跳出循環(huán),執(zhí)行后續(xù)代碼。
  64.                 if (SpiSending!=0)//有數(shù)據(jù)需要發(fā)送
  65.                 {
  66.                         if (McpFisrtCmm==0)//第1次發(fā)送
  67.                         {
  68.                                 CLRCS;//SPI口基本在PB口 開啟
  69.                                 NOP();
  70.                                 NOP();
  71.                                 SPDR = SpiTransData[0];
  72.                                 SpiSendNum=1;//指向下一地址                                 
  73.                                 McpFisrtCmm=1;
  74.                         }
  75.                         else
  76.                         {
  77.                                 //          對 SPI 數(shù)據(jù)寄存器寫入數(shù)據(jù)即啟動(dòng)SPI 時(shí)鐘,將8 比特的數(shù)據(jù)移入從機(jī)。
  78.                                 if (SPSR & (1<<SPIF))//串行發(fā)送結(jié)束后,SPIF置位,中斷//是為了等待串行數(shù)據(jù)發(fā)送,發(fā)送結(jié)束前始終在循環(huán),結(jié)束后跳出循環(huán),執(zhí)行后續(xù)代碼。
  79.                                 {
  80.                                         if(SpiSendNum<SpiMaxSend)//SpiMaxSend應(yīng)比量小1        ,SpiMaxSend = 5
  81.                                         {
  82.                                                 ImitShootFlag = 1;
  83.                                 
  84.         //                                        SpiReceiveData[SpiSendNum++]=SPDR;//test
  85.                                                 SpiReceiveData[SpiSendNum-1]=SPDR;//讀數(shù)據(jù)                //應(yīng)該去掉wanwan                //一去掉,SPI就不能初始化        
  86.                                                 SPDR = SpiTransData[SpiSendNum];//寫數(shù)據(jù)                                       
  87.                                                 SpiSendNum++;                                                //下一筆數(shù)據(jù)
  88.         
  89.                                                 SpiRcvNum = 0;//讀的時(shí)候?qū)懙臄?shù)據(jù)筆數(shù)為0
  90.                                         }
  91.                                         else
  92.                                         {
  93.         ////////////////////////////////////////////////////////////        
  94.                                                 SETCS;//停止數(shù)據(jù)發(fā)送        
  95.         //                                        NOP();
  96.         //                                        SPCR = (1<<SPE) | (0<<MSTR) | (1<<SPR0);//清零SPCR 的MSTR 位,使SPI 成為從機(jī)
  97.         //                                        NOP();
  98.                                         SpiReceiveData[SpiSendNum-1]=SPDR;//讀數(shù)據(jù)         //SpiSendNum  需要一個(gè)初始值才行。wanwan
  99.         //                                          SpiReceiveData1[SpiRcvNum++]=SPDR;
  100.         
  101.         
  102.         //                                        SpiReceiveData[SpiSendNum++]=SPDR;//讀數(shù)據(jù)         //SpiSendNum  需要一個(gè)初始值才行。wanwan
  103.         //                                        SpiReceiveData[SpiSendNum++]=0x55;//test
  104.                                                 //相應(yīng)指示
  105.                                                 SpiMaxSend=0;//傳輸完成
  106.                                                 SpiSending=0;                        
  107.                                                 McpFisrtCmm=0;//清除標(biāo)示        
  108.                                         }
  109.                                 }                                       
  110.                         }                        
  111.                 }else
  112.                 {
  113.                         //SETCS;//停止數(shù)據(jù)發(fā)送
  114.                         //DDR_SPI = (1<<DD_MISO);
  115.                         if (!(SPSR & (1<<SPIF)))//串行發(fā)送結(jié)束后,SPIF置位,中斷//是為了等待串行數(shù)據(jù)發(fā)送,發(fā)送結(jié)束前始終在循環(huán),結(jié)束后跳出循環(huán),執(zhí)行后續(xù)代碼。
  116.                                 {
  117.                                                 //Set_Bit(PORTB, 3);
  118.                                                 ImitShootFlag = 1;
  119.                                                 SPDR = 0XFF;
  120.                                                 SpiReceiveData1[SpiRcvNum++]=SPDR;
  121.                                                 if(SpiRcvNum > 20)
  122.                                                         SpiRcvNum = 0;
  123.                                                 
  124.                                 }

  125.                 }
  126.         
  127.         #endif



  128. #if 0
  129. //SPDR = cData;//啟動(dòng)數(shù)據(jù)傳輸
  130.         //while(!(SPSR&(1<<SPIF)));//等待傳輸結(jié)束,SPSR&(1<<SPIF)即1,循環(huán)內(nèi)
  131.         //是為了等待串行數(shù)據(jù)發(fā)送,發(fā)送結(jié)束前始終在循環(huán),結(jié)束后跳出循環(huán),執(zhí)行后續(xù)代碼。
  132.         if (SpiSending!=0)//有數(shù)據(jù)需要發(fā)送
  133.         {
  134.                 if (McpFisrtCmm==0)//第1次發(fā)送
  135.                 {
  136.                         CLRCS;//SPI口基本在PB口 開啟
  137.                     NOP();
  138.                     NOP();
  139.                         SPDR = SpiTransData[0];
  140.                     SpiSendNum=1;//指向下一地址                                       
  141.                         McpFisrtCmm=1;
  142.                 }
  143.                 else
  144.                 {
  145.             //    對 SPI 數(shù)據(jù)寄存器寫入數(shù)據(jù)即啟動(dòng)SPI 時(shí)鐘,將8 比特的數(shù)據(jù)移入從機(jī)。
  146.                     if (SPSR & (1<<SPIF))//串行發(fā)送結(jié)束后,SPIF置位,中斷//是為了等待串行數(shù)據(jù)發(fā)送,發(fā)送結(jié)束前始終在循環(huán),結(jié)束后跳出循環(huán),執(zhí)行后續(xù)代碼。
  147.                     {
  148.                         if(SpiSendNum<SpiMaxSend)//SpiMaxSend應(yīng)比量小1  ,SpiMaxSend = 5
  149.                         {
  150. //                                        CLRCS;//數(shù)據(jù)發(fā)送   
  151. //                                        NOP();
  152. //                                        SPCR = (1<<SPE) | (1<<MSTR) | (1<<SPR0);
  153. //                                        NOP();
  154.                                 
  155. //                                SpiReceiveData[SpiSendNum++]=SPDR;//test
  156.                                 SpiReceiveData[SpiSendNum-1]=SPDR;//讀數(shù)據(jù)                //應(yīng)該去掉wanwan                //一去掉,SPI就不能初始化        
  157.                                 SPDR = SpiTransData[SpiSendNum];//寫數(shù)據(jù)                                       
  158.                                 SpiSendNum++;                                                //下一筆數(shù)據(jù)

  159.                                         SpiRcvNum = 0;//讀的時(shí)候?qū)懙臄?shù)據(jù)筆數(shù)為0
  160.                                 }
  161.                         else
  162.                                {
  163. ////////////////////////////////////////////////////////////        
  164.                                 SETCS;//停止數(shù)據(jù)發(fā)送        
  165. //                                NOP();
  166. //                                SPCR = (1<<SPE) | (0<<MSTR) | (1<<SPR0);//清零SPCR 的MSTR 位,使SPI 成為從機(jī)
  167. //                                        NOP();
  168.                                 SpiReceiveData[SpiSendNum-1]=SPDR;//讀數(shù)據(jù)   //SpiSendNum  需要一個(gè)初始值才行。wanwan
  169. //                    SpiReceiveData1[SpiRcvNum++]=SPDR;


  170. //                                SpiReceiveData[SpiSendNum++]=SPDR;//讀數(shù)據(jù)   //SpiSendNum  需要一個(gè)初始值才行。wanwan
  171. //                                SpiReceiveData[SpiSendNum++]=0x55;//test
  172.                                         //相應(yīng)指示
  173.                                 SpiMaxSend=0;//傳輸完成
  174.                                 SpiSending=0;                        
  175.                                 McpFisrtCmm=0;//清除標(biāo)示        
  176.                                }
  177.                     }                                       
  178.                 }                        
  179.         }

  180.         #endif
  181.         //                                SETCS;//停止數(shù)據(jù)發(fā)送        
  182.         //                                NOP();
  183.         //                                SPCR = (1<<SPE) | (0<<MSTR) | (1<<SPR0);//清零SPCR 的MSTR 位,使SPI 成為從機(jī)
  184.         //                                NOP();
  185.         
  186.         
  187.         //                                if (SPSR & (1<<SPIF))//串行發(fā)送結(jié)束后,SPIF置位,中斷//是為了等待串行數(shù)據(jù)發(fā)送,發(fā)送結(jié)束前始終在循環(huán),結(jié)束后跳出循環(huán),執(zhí)行后續(xù)代碼。
  188.         //                                {
  189.         
  190.         //                                                SpiReceiveData1[SpiRcvNum++]=SPDR;
  191.         //                                                if(SpiRcvNum > 5)
  192.         //                                                        SpiRcvNum = 0;
  193.         //                                                
  194.         //                                }
  195.         
  196. }
復(fù)制代碼


AVR mega16 MCP2510發(fā)送程序.rar

444.47 KB, 下載次數(shù): 7

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:123289 發(fā)表于 2019-3-24 08:22 | 只看該作者
再細(xì)讀2510手冊。
回復(fù)

使用道具 舉報(bào)

板凳
ID:123289 發(fā)表于 2019-3-24 08:25 | 只看該作者
要點(diǎn)1:是弄清楚,它的128個(gè)寄存器作用分別是什么?
要點(diǎn)2:如何時(shí)正確的配制通訊波特率。
回復(fù)

使用道具 舉報(bào)

地板
ID:215525 發(fā)表于 2019-3-30 11:55 | 只看該作者
謝謝。
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 九色在线视频 | 久久久女女女女999久久 | 中文字幕电影在线观看 | 亚洲婷婷六月天 | 欧美aⅴ在线观看 | 一区二区成人在线 | 亚洲精品1 | 日韩欧美精品一区 | 青青草一区二区 | 亚洲精品一区二区三区四区高清 | 91精品国产91久久综合桃花 | 中文字幕第7页 | 九色 在线 | 国产精品欧美一区二区三区 | 在线免费观看日本视频 | 99精品网站 | 国产三区在线观看视频 | 91亚洲精选 | 亚洲成人免费在线观看 | 成人av一区 | 色久五月| 日韩免费高清视频 | 国产精品日韩欧美一区二区三区 | 三级免费毛片 | 亚洲性网 | 天堂成人国产精品一区 | 中文字幕国产视频 | 欧美精品国产精品 | 成人精品在线视频 | 成人亚洲视频 | 天天爽网站 | 偷拍亚洲色图 | 蜜桃精品噜噜噜成人av | 91av在线电影 | 免费在线一区二区三区 | 久久久久久久电影 | 91精品国产色综合久久 | 中文字幕丁香5月 | 欧洲一级毛片 | 亚洲精品国产电影 | 精品久久久久久久 |