?? main.c
字號:
/*------------------------------------------------------------------------------
;CAN總線大壩監測系統
;底層節點
;文件名稱: main.c
;函數功能:接收上層命令,采集返回數據
;MCU支持: C8051F040
;上海富方軟件合肥自動化分公司
;-----------------------------------------------------------------------------*/
#include "c8051F040.h"
#include "wdt_port_clk_init.h"
#include "can.h"
////////////////////////////////////////////////////////////////////////////////
// 變量定義
////////////////////////////////////////////////////////////////////////////////
unsigned char SFRPAGE_SAVE; // SFR頁面保存
unsigned char Wang_Data[6] = {0xc1,0xc2,0xc3,0xc4,0xc5,0xc6}; // 下層測量數據
unsigned char Can_sdata[8]; // CAN發送數組
unsigned char Can_rdata[8]; // CAN接收數組
unsigned char Answer_Data[6] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; // 底層應答數組
bit Rec_From_CAN; // 標志從CAN收到命令
////////////////////////////////////////////////////////////////////////////////
//主函數
////////////////////////////////////////////////////////////////////////////////
void main(){
/* 關看門狗,端口及時鐘初始化 */
Watchdog_Close ();
Port_Config ();
Sysclk_Init ();
/* CAN消息塊初始化 */
Can_Msg_Init();
/* 開中斷 */
EA = 1;
/* 正常運行 */
while(1){
Rec_From_CAN = 0;
while(!Rec_From_CAN);
/* 如果是所有模塊復位 */
if( (Can_rdata[0]&0xE0) == 0x60 ){
SFRPAGE = LEGACY_PAGE; // 跳至復位寄存器頁0x00
RSTSRC |= 0x10; // 軟件復位
}
/* 如果是全體測量 */
else if( (Can_rdata[0]&0xE0) == 0xE0 ){
/*以下為實際測量操作
*/
}
/* 如果是單個模塊復位 */
else if( (Can_rdata[0]&0xE0) == 0x80){
SFRPAGE = CAN0_PAGE;
CAN0STA &= 0xf7; // TxOk置零,未傳送完報文
Can_Tx_Back(Answer_Data); // 應答
while( ! (CAN0STA & 0x08) );
SFRPAGE = LEGACY_PAGE; // 跳至復位寄存器頁0x00
RSTSRC |= 0x10; // 軟件復位
}
/* 如果是單個模塊測量 */
else if( (Can_rdata[0]&0xE0) == 0xC0 ){
Can_Tx_Back(Answer_Data); // 應答
/*以下為實際測量操作
*/
}
/* 如果是單個模塊取數 */
else if( (Can_rdata[0]&0xE0) == 0xA0 ){
/*此處應修改為實際數據 */
Can_Tx_Back(Wang_Data); // 應答
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -