久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
AVR mega16單片機MCP2510發送程序可行,接收不可行請高手指教。
[打印本頁]
作者:
active12
時間:
2019-3-23 12:37
標題:
AVR mega16單片機MCP2510發送程序可行,接收不可行請高手指教。
如下代碼部分只能發送,不能接收,還請高手指點。
void Spi_MasterTransmit(void)
{
#if 1
char i;
//是為了等待串行數據發送,發送結束前始終在循環,結束后跳出循環,執行后續代碼。
if (SpiSending!=0)//有數據需要發送
{
if (McpFisrtCmm==0)//第1次發送
{
CLRCS;//SPI口基本在PB口 開啟
NOP();
NOP();
SPDR = SpiTransData[0];
SpiSendNum=1;//指向下一地址
McpFisrtCmm=1;
}
else
{
if (SPSR & (1<<SPIF))//串行發送結束后,SPIF置位,中斷//是為了等待串行數據發送,發送結束前始終在循環,結束后跳出循環,執行后續代碼。
{
if(SpiSendNum<SpiMaxSend)//SpiMaxSend應比量小1 ,SpiMaxSend = 5
{
SpiReceiveData[SpiSendNum-1]=SPDR;//讀數據
SPDR = SpiTransData[SpiSendNum];//寫數據
SpiSendNum++; //下一筆數據
//SpiRcvNum = 0;//讀的時候寫的數據筆數為0
}
else
{
SpiReceiveData[SpiSendNum-1]=SPDR;//讀數據 //SpiSendNum 需要一個初始值才行。
// SpiReceiveData1[SpiRcvNum++]=SPDR;
//相應指示
SpiMaxSend=0;//傳輸完成
SpiSending=0;
McpFisrtCmm=0;//清除標示
SETCS;//停止數據發送
}
}
}
}else
{
CLRCS;//SPI口基本在PB口 開啟
if ((SPSR & (1<<SPIF)))//串行發送結束后,SPIF置位,中斷//是為了等待串行數據發送,發送結束前始終在循環,結束后跳出循環,執行后續代碼。
{
//Set_Bit(PORTB, 3);
ImitShootFlag = 1;
//SPDR = 0XFF;
MCP2510Read(RXB0DLC,20);
for(i=0;i< 20;i++)
SpiReceiveData1[i]=SpiTransData[i];//SPDR;
// if(SpiRcvNum > 20)
// SpiRcvNum = 0;
}
SETCS;//停止數據發送
}
#endif
#if 0
//是為了等待串行數據發送,發送結束前始終在循環,結束后跳出循環,執行后續代碼。
if (SpiSending!=0)//有數據需要發送
{
if (McpFisrtCmm==0)//第1次發送
{
CLRCS;//SPI口基本在PB口 開啟
NOP();
NOP();
SPDR = SpiTransData[0];
SpiSendNum=1;//指向下一地址
McpFisrtCmm=1;
}
else
{
// 對 SPI 數據寄存器寫入數據即啟動SPI 時鐘,將8 比特的數據移入從機。
if (SPSR & (1<<SPIF))//串行發送結束后,SPIF置位,中斷//是為了等待串行數據發送,發送結束前始終在循環,結束后跳出循環,執行后續代碼。
{
if(SpiSendNum<SpiMaxSend)//SpiMaxSend應比量小1 ,SpiMaxSend = 5
{
ImitShootFlag = 1;
// SpiReceiveData[SpiSendNum++]=SPDR;//test
SpiReceiveData[SpiSendNum-1]=SPDR;//讀數據 //應該去掉wanwan //一去掉,SPI就不能初始化
SPDR = SpiTransData[SpiSendNum];//寫數據
SpiSendNum++; //下一筆數據
SpiRcvNum = 0;//讀的時候寫的數據筆數為0
}
else
{
////////////////////////////////////////////////////////////
SETCS;//停止數據發送
// NOP();
// SPCR = (1<<SPE) | (0<<MSTR) | (1<<SPR0);//清零SPCR 的MSTR 位,使SPI 成為從機
// NOP();
SpiReceiveData[SpiSendNum-1]=SPDR;//讀數據 //SpiSendNum 需要一個初始值才行。wanwan
// SpiReceiveData1[SpiRcvNum++]=SPDR;
// SpiReceiveData[SpiSendNum++]=SPDR;//讀數據 //SpiSendNum 需要一個初始值才行。wanwan
// SpiReceiveData[SpiSendNum++]=0x55;//test
//相應指示
SpiMaxSend=0;//傳輸完成
SpiSending=0;
McpFisrtCmm=0;//清除標示
}
}
}
}else
{
//SETCS;//停止數據發送
//DDR_SPI = (1<<DD_MISO);
if (!(SPSR & (1<<SPIF)))//串行發送結束后,SPIF置位,中斷//是為了等待串行數據發送,發送結束前始終在循環,結束后跳出循環,執行后續代碼。
{
//Set_Bit(PORTB, 3);
ImitShootFlag = 1;
SPDR = 0XFF;
SpiReceiveData1[SpiRcvNum++]=SPDR;
if(SpiRcvNum > 20)
SpiRcvNum = 0;
}
}
#endif
#if 0
//SPDR = cData;//啟動數據傳輸
//while(!(SPSR&(1<<SPIF)));//等待傳輸結束,SPSR&(1<<SPIF)即1,循環內
//是為了等待串行數據發送,發送結束前始終在循環,結束后跳出循環,執行后續代碼。
if (SpiSending!=0)//有數據需要發送
{
if (McpFisrtCmm==0)//第1次發送
{
CLRCS;//SPI口基本在PB口 開啟
NOP();
NOP();
SPDR = SpiTransData[0];
SpiSendNum=1;//指向下一地址
McpFisrtCmm=1;
}
else
{
// 對 SPI 數據寄存器寫入數據即啟動SPI 時鐘,將8 比特的數據移入從機。
if (SPSR & (1<<SPIF))//串行發送結束后,SPIF置位,中斷//是為了等待串行數據發送,發送結束前始終在循環,結束后跳出循環,執行后續代碼。
{
if(SpiSendNum<SpiMaxSend)//SpiMaxSend應比量小1 ,SpiMaxSend = 5
{
// CLRCS;//數據發送
// NOP();
// SPCR = (1<<SPE) | (1<<MSTR) | (1<<SPR0);
// NOP();
// SpiReceiveData[SpiSendNum++]=SPDR;//test
SpiReceiveData[SpiSendNum-1]=SPDR;//讀數據 //應該去掉wanwan //一去掉,SPI就不能初始化
SPDR = SpiTransData[SpiSendNum];//寫數據
SpiSendNum++; //下一筆數據
SpiRcvNum = 0;//讀的時候寫的數據筆數為0
}
else
{
////////////////////////////////////////////////////////////
SETCS;//停止數據發送
// NOP();
// SPCR = (1<<SPE) | (0<<MSTR) | (1<<SPR0);//清零SPCR 的MSTR 位,使SPI 成為從機
// NOP();
SpiReceiveData[SpiSendNum-1]=SPDR;//讀數據 //SpiSendNum 需要一個初始值才行。wanwan
// SpiReceiveData1[SpiRcvNum++]=SPDR;
// SpiReceiveData[SpiSendNum++]=SPDR;//讀數據 //SpiSendNum 需要一個初始值才行。wanwan
// SpiReceiveData[SpiSendNum++]=0x55;//test
//相應指示
SpiMaxSend=0;//傳輸完成
SpiSending=0;
McpFisrtCmm=0;//清除標示
}
}
}
}
#endif
// SETCS;//停止數據發送
// NOP();
// SPCR = (1<<SPE) | (0<<MSTR) | (1<<SPR0);//清零SPCR 的MSTR 位,使SPI 成為從機
// NOP();
// if (SPSR & (1<<SPIF))//串行發送結束后,SPIF置位,中斷//是為了等待串行數據發送,發送結束前始終在循環,結束后跳出循環,執行后續代碼。
// {
// SpiReceiveData1[SpiRcvNum++]=SPDR;
// if(SpiRcvNum > 5)
// SpiRcvNum = 0;
//
// }
}
復制代碼
AVR mega16 MCP2510發送程序.rar
2019-3-23 12:37 上傳
點擊文件名下載附件
444.47 KB, 下載次數: 7
作者:
yzwzfyz
時間:
2019-3-24 08:22
再細讀2510手冊。
作者:
yzwzfyz
時間:
2019-3-24 08:25
要點1:是弄清楚,它的128個寄存器作用分別是什么?
要點2:如何時正確的配制通訊波特率。
作者:
active12
時間:
2019-3-30 11:55
謝謝。
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
欧美日韩在线精品
|
久久视频一区二区
|
免费久久久
|
中文亚洲字幕
|
不卡中文字幕
|
国产黄色精品视频
|
国产伦精品一区二区三毛
|
久久亚洲综合
|
亚洲小视频
|
天天搞天天干
|
久久精品观看
|
黄色成人毛片
|
97精品
|
97在线播放
|
美女在线播放
|
特级西西444www大胆免费看
|
欧美日本在线
|
免费视频久久久
|
亚洲欧美在线播放
|
玖玖伊人
|
黄色成人在线
|
精品国产91
|
欧美精品三区
|
国产a久久麻豆入口
|
日韩不卡在线
|
黄色一级在线观看
|
欧美日韩免费在线观看
|
国产xxx
|
在线观看av的网站
|
久久青草视频
|
成人黄色在线视频
|
一级淫片观看
|
成人综合婷婷国产精品久久
|
久久免费视频观看
|
成人欧美一区二区三区白人
|
亚洲天堂网在线观看
|
精品免费视频
|
国产美女网站
|
日韩av在线影院
|
日韩免费成人
|
正在播放国产精品
|