您的位置 首页 开关

CAN总线学习笔记二:CAN自收发程序解读

花了一整个下午的时间,彻头彻尾的把 PIAE小组提供的CAN自收发源程序解读了一遍。解读别人的程序是一件挺费时费力的一件事,但是在对某项技术或者说某个芯片的入门阶段参考别人的程序又是一项必不可少的

  花了一整个下午的时刻,彻里彻外的把 PIAE小组供给的CAN自收发源程序解读了一遍。解读他人的程序是一件挺费时吃力的一件事,可是在对某项技能或者说某个芯片的入门阶段参阅他人的程序又是一项必不可少的使命。

  关于这个程序,头一个使命当然是把头文件先阅读一遍,能弄理解的仍是先弄理解,对后边程序的解读有优点。C文件里给出了三个头文件:

  #include

  #include

  #include

  第一个reg52.h我就不废话了,下一个intrins.h我在上一篇日志里也具体的作了阐明,这儿也不提了。can_selfdef.h是程序员自己界说的一个头文件,在这个头文件里除了一些宏界说和管脚的一些阐明外,最重要的便是要弄理解“CAN总线SJA1000寄存器地址界说”。这个我开端也没弄理解,后来重复揣摩,才发现作者在这个程序里吧SJA1000的寄存器作为单片机的外部扩展RAM寻址了,然后省去了编写一些底层的驱动程序,这就让我们连SJA1000的datasheet的时序图都不必看了(不过下一步我想用驱动程序来操控SJA1000)。

  看完头文件,可不能从第一个程序顺次往下看。应该直接找到主程序main()解读:

  void main(void)

  {

  //MCU初始化(主要是各中止寄存器的初始化)

  SJA_RST = 1; //CAN总线复位管脚复位无效

  SJA_CS = 0; //CAN总线片选有用

  EX1 = 1; //开MCU外部中止INT1

  IT1 = 0; //MCU外部中止INT1为电平触发,也是CAN总线接纳中止口

  IT0 = 1; //MCU外部中止INT0为下降沿触发

  EX0 = 1; //开MCU外部中止INT0

  EA = 1; //开MCU总中止

  SJA_CS = 1; //CAN总线片选无效,使得对数据总线的操作不会影响SJA1000。

  //SJA1000初始化

  CAN_init(); //对SJA1000寄存器的读写是选用外部寄存器寻址方法,

  //所以不需要程序独自操控片选有用无效

  _nop_();

  _nop_();

  //主循环

  while(1)

  {

  _nop_();

  _nop_();

  Rxd_deal(); //接纳处理程序

  Txd_deal(); //发送处理程序

  led_seg7(0,Txd_data); //数码管1-2显现发送数据子程序

  led_seg7(1,Rxd_data+3); //数码管3-4显现接纳数据子程序

  }

  }

  上面的注释是自己具体做了加工的,先是单片机中止寄存器的初始化,打开了单片机的INT0和INT1两个外部中止。INT0是外接按键的,所以是下降沿触发。这个按键每按下一次,待发送的数据的第一个字节就会加一,这个数据同时会显现在数码管上。而INT1是外界着SJA1000的发送数据中止端口的,选用电平触发,也便是说当SJA1000发送数据时,就会触发中端口INT1,然后让单片机进行数据的接纳作业。

  接下来是SJA1000的各个寄存器的初始化,主要是在CAN_init();这个程序里完结的,主要是设置一些寄存器使得满意本次实验的要求。

  最终就进入了主循环中。不断的进行接纳数据处理、发送数据处理以及将数据的头一个字节的数值显现在数码管上。每逢按键被按下后就会置位发送数据状况标志位,这时就进入发送状况,无非便是把ID码和数据等13个字节送入SJA1000的相应寄存器里,其它的工作就交给SJA1000来完结就可以了。由所以进行自传送,所以SJA1000在接纳到数据后会给单片机一个中止,此刻也就进入了接纳数据状况下,相同只要把SJA1000里相应的寄存器读出来就可以了。为了调查发送和接纳的数据是否共同,这个程序里就把发送的数据的头一个字节经过数码管显现出来。发送数据正常显现,而接纳数据为了便于调查,我把它+3,便是说显现的接纳数据会比发送数据大3。最终很好的得到验证了。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/kaiguan/117372.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部