⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 CAN通讯底层节点
💻 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 + -