字號:
#include <mega48.h>
#include <delay.h>
#define amount 10 //設定通訊數據量(包括1個地址幀,n個數據幀,1個校驗幀)
#include <usart.h>
#include <1wire.h>
#define address 2 //請在這里設定本機地址
unsigned char send[amount]; //發件箱
unsigned char inbox[amount]; //收件箱
unsigned char n=0; //記憶中斷次數
//--------------------------------------------------------------------
interrupt[19] Rxd_isr(void) //接收中斷
{
unsigned char ERROR=0;
if( UCSR0A&4 || UCSR0A&16 ) ERROR=1; //記錄奇偶效驗錯誤或者幀錯誤
inbox[n]=UDR0; //把接收到的數據保存到收件箱
n++; //記憶接收的次數
if(ERROR) //如果通訊有錯....
{
n=0; //接收計數清0
inbox[0]=0; //把地址改為無效地址0
UCSR0A|=0x01; //重新打開接收器的地址幀篩選功能
}
//如果地址匹配本機或者是廣播地址就關閉地址篩選(多機通訊)功能
if(inbox[0]==address ||inbox[0]==255) UCSR0A&=254;
if(n==amount) //接收到amount個數據以后...
{
n=0; //接收計數清0
UCSR0A|=0x01; //重新打開接收器的地址幀篩選功能
if(inbox[amount-1]==w1_dow_crc8(inbox,amount-1)) //如果crc8校驗正確就...
{
if(inbox[0]==address) //如果地址匹配本機就回復數據
{
send[0]=1; //發件箱地址指向主機
send[amount-1]=w1_dow_crc8(send,amount-1); //產生發件箱的crc8校驗碼
TXD(send); //發送發件箱的數據包send[]
//請在這里備份你的收件箱信息
}
if(inbox[0]==255) //如果是廣播地址就...
{
//請在這里添加你的代碼
//收到廣播數據請不要回復
}
}
}
}
//---------------------------------------------------------------------
void main(void)
{
USARTinit(); //串口初始化
UCSR0A=0x01; //從機打開地址幀篩選功能(多機通訊模式)
#asm("sei") //打開全局中斷
while(1)
{
//請在這里添加你的代碼
}
} //end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -