我有些問題要請教各位,程式為修改範例程式,並使用貴公司發展板
//////////////////////////////////////////////////////////////////
貼出來是CAN1負責接收CAN2傳過來的資料,我把CAN初始化跟UART初始化個別包在一個函士
CAN2傳到CAN1是傳'B',當CAN1成功收到後燈會暗掉並把資料存放在Array[0],
若再按下CAN1按鈕則會開啟UART並把Array[0]送到電腦
以上測試都符合自己預期,但是我把Outchar0(Array[0])寫在while(1)迴圈裡
卻只有第一筆成功傳出'B'
//////////////////////////////////////////////////////////////////
unsigned char xdata Array[1]; //Array[]存收到的資料 宣告在全域變數
void main (void) {
Init_CAN(); //初始化CAN
if (BUTTON == 0) //當按鈕按下,UART初始化並把Array[0] 傳到電腦
{
Init_Device(); //UART 初始化
while(1)
{
Outchar0(Array[0]);
delay(20); //延遲函士
}
}
}
void receive_data (char MsgNum) //接收端我用'B'判斷是否與CAN2傳過來的'B'一樣
{
char virtual_button;
SFRPAGE = CAN0_PAGE; // IF1 already set up for RX
CAN0ADR = IF2CMDRQST;// Point to Command Request Reg.
CAN0DATL = MsgNum; // Move new data for RX from Msg Obj "MsgNum"
// Move new data to a
CAN0ADR = IF2DATA1; // Point to 1st byte of Data Field
virtual_button = CAN0DATL;
if (virtual_button == 'B') //Ones is signal from other node to turn LED ON
{
LED = 0; //virtual_button=0x11(ON)
Array[0]=virtual_button; //把virtual_button資料存到Array[0]
}
else LED = 1; //virtual_button=0x00(OFF) //Otherwise turn LED OFF (message was one's)
}
問題整理:
(1)為什麼我把Array[0]放在While迴圈,卻只有第一筆正確傳出'B',後面都一直傳"......................."
是否程式有哪裡重置時洗掉了,我用單部執行看確實在剛收到時是'B',但後面就都錯的
(2)存放的Array[]是否只能用Xdata宣告?或是宣告在idata也可以?
(3)我初始化UART會把CAN功能關掉,請問可以兩個功能一起存在嗎?也就是CAN收到資料就直接用UART傳到電腦!
謝謝過位板友觀看及答覆