pic18单片机的can通信怎么发送和接收16字节数据?怎么分包?具体代码实现。

pic18单片机的can通信怎么发送和接收16字节数据?怎么分包?具体代码实现。,第1张

……之前问这森唯个问题的也是你吧。

CAN 2.0A/B的扩展知肆帧最多可携带8字节数据。所以你应当合理设计通讯协议,在ID域中体现出包序号和拼包要求,16字节数据拆分为两个8字节的块,用两个帧分别传输。搭春轿接收端根据ID判定是否需要拼包、这是第几包,在应用层或协议层自行完成拼包。

//请参考以下程序片段

//----------------------------低优先级中断入口-----------------------------------

#pragma code InterruptVectorLow = 0x18

void InterruptVectorLow (void) //低衫滑优先级中断向量函数

{

_asm

goto ISR_Low //内嵌汇编指令

_endasm

}

#pragma code

#pragma interruptlow ISR_Low

void ISR_Low (void)

{

if (INTCONbits.TMR0IF)

{ //check for TMR0 overflow

INTCONbits.TMR0IF = 0 //clear interrupt flag

TMR0H = 0XCF

TMR0L = 0X2B

_100ms_num++

}

}

//-------------------------高优先级中断入口--------------------------------

#pragma code InterruptVectorHigh = 0x08

void InterruptVectorHigh (void)

{

_asm

goto ISR_High //内嵌汇编贺信指令

_endasm

}

#pragma code

#pragma interrupt ISR_High

void ISR_High (void)

{

if(INTCONbits.INT0IF == 1)

{

INTCONbits.INT0IF = 0 //清除INT0中断标志位 INT0下降沿说明禅塌轮外部供电掉电

Bit.Start=0

T0CONbits.TMR0ON = 0 //关闭定时器

_100ms_num=0

Write_eeprom_uint(tl_data_add,tl)//保存tl数据

Write_eeprom_uint(th_data_add,th) //保存th数据

Write_eeprom_uint(out_num_data_add,(out_num)) //保存out_num数据

Write_eeprom_uint(input_num_data_add,input_num)//保存out_num数据

Delay10KTCYx(100)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12516974.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存