自收自发文件清单.doc_第1页
自收自发文件清单.doc_第2页
自收自发文件清单.doc_第3页
自收自发文件清单.doc_第4页
自收自发文件清单.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

头文件:can_selfdef.h/对管脚分配进行了定义/对子函数进行了声明# define uchar unsigned char# define uint unsigned int# define NOP5_nop_();_nop_();_nop_();_nop_();_nop_();/*延时5us*/#define N_can 13/一帧字节数bit TXD_flag = 0;/ 若为1,要求发送处理bit RXD_flag = 0; /有无数据可以接收;无,有uchar code led=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00;/ 0, 1, 2, 3, 4, 5uchar RX_buffer13; /接收的数据uchar TX_buffer13; /接收的数据uchar Txd_data = 0;/CAN总线要发送的数据,也是要在数码管1-2位置显示的数据uchar Rxd_data= 0;/CAN总线要接收的数据,也是要在数码管3-4位置显示的数据/*P2 口分配*/sbit LED_RED = P21;sbit LED_GRE = P22;sbit SJA_RST = P23;/SJA1000复位管脚sbit SJA_CS = P20;/SJA1000片选管脚/*CAN总线SJA1000寄存器地址定义(用的是PeliCAN模式,扩展帧EFF模式)*/#define MODR (*(unsigned char volatile xdata *)0xFE00) / 模式寄存器#define CMR (*(unsigned char volatile xdata *)0xFE01) / 命令寄存器#define SR (*(unsigned char volatile xdata *)0xFE02) / 状态寄存器#define IR (*(unsigned char volatile xdata *)0xFE03) / 中断寄存器#define IER (*(unsigned char volatile xdata *)0xFE04) / 中断使能寄存器#define BTR0 (*(unsigned char volatile xdata *)0xFE06) / 总线定时寄存器0 ;总线波特率的选择#define BTR1 (*(unsigned char volatile xdata *)0xFE07) / 总线定时寄存器1 ;总线波特率的选择#define OCR (*(unsigned char volatile xdata *)0xFE08) / 输出控制寄存器#define ACR (*(unsigned char volatile xdata *)0xFE10) / #define ACR1 (*(unsigned char volatile xdata *)0xFE11) / #define ACR2 (*(unsigned char volatile xdata *)0xFE12) / #define ACR3 (*(unsigned char volatile xdata *)0xFE13) /接收代码(0x16_0x19);接收过滤位的选择*复位模式#define AMR (*(unsigned char volatile xdata *)0xFE14) / #define AMR1 (*(unsigned char volatile xdata *)0xFE15) / #define AMR2 (*(unsigned char volatile xdata *)0xFE16) / #define AMR3 (*(unsigned char volatile xdata *)0xFE17) / 掩码(0x20_0x23); 接收过滤位的选择*复位模式#define CDR (*(unsigned char volatile xdata *)0xFE1F) / 时钟分频器#define ALC (*(unsigned char volatile xdata *)0xFE0B) / 仲裁丢失捕捉寄存器#define ECC (*(unsigned char volatile xdata *)0xFE0C) / 误码捕捉寄存器#define TBSR (*(unsigned char volatile xdata *)0xFE10) /发送缓冲器地址(0x16_0x28)#define TBSR1 (*(unsigned char volatile xdata *)0xFE11) / #define TBSR2 (*(unsigned char volatile xdata *)0xFE12) / #define TBSR3 (*(unsigned char volatile xdata *)0xFE13) /#define TBSR4 (*(unsigned char volatile xdata *)0xFE14) / #define TBSR5 (*(unsigned char volatile xdata *)0xFE15) /#define TBSR6 (*(unsigned char volatile xdata *)0xFE16) /#define TBSR7 (*(unsigned char volatile xdata *)0xFE17) /#define TBSR8 (*(unsigned char volatile xdata *)0xFE18) /#define TBSR9 (*(unsigned char volatile xdata *)0xFE19) /#define TBSR10 (*(unsigned char volatile xdata *)0xFE1A) /#define TBSR11 (*(unsigned char volatile xdata *)0xFE1B) /#define TBSR12 (*(unsigned char volatile xdata *)0xFE1C) /#define RBSR (*(unsigned char volatile xdata *)0xFE10) /接收缓冲器首地址(0x16_0x28)#define RBSR1 (*(unsigned char volatile xdata *)0xFE11) / #define RBSR2 (*(unsigned char volatile xdata *)0xFE12) / #define RBSR3 (*(unsigned char volatile xdata *)0xFE13) /#define RBSR4 (*(unsigned char volatile xdata *)0xFE14) / #define RBSR5 (*(unsigned char volatile xdata *)0xFE15) /#define RBSR6 (*(unsigned char volatile xdata *)0xFE16) /#define RBSR7 (*(unsigned char volatile xdata *)0xFE17) /#define RBSR8 (*(unsigned char volatile xdata *)0xFE18) /#define RBSR9 (*(unsigned char volatile xdata *)0xFE19) /#define RBSR10 (*(unsigned char volatile xdata *)0xFE1A) /#define RBSR11 (*(unsigned char volatile xdata *)0xFE1B) /#define RBSR12 (*(unsigned char volatile xdata *)0xFE1C) /void CPU_init(void);/CPU初始化子函数void CAN_init( void ); /初始化CAN总线芯片void CAN_TXD( void ); /CAN发送子函数void Rxd_deal(void);/接收处理函数void Txd_deal(void);/发送处理函数void Delay(uchar delay_time);/延时子函数void led_seg8();/显示子函数头文件:reg52.h#ifndef _REG52_H_#define _REG52_H_/* BYTE Registers */sfr P0 = 0x80;sfr P1 = 0x90;sfr P2 = 0xA0;sfr P3 = 0xB0;sfr PSW = 0xD0;sfr ACC = 0xE0;sfr B = 0xF0;sfr SP = 0x81;sfr DPL = 0x82;sfr DPH = 0x83;sfr PCON = 0x87;sfr TCON = 0x88;sfr TMOD = 0x89;sfr TL0 = 0x8A;sfr TL1 = 0x8B;sfr TH0 = 0x8C;sfr TH1 = 0x8D;sfr IE = 0xA8;sfr IP = 0xB8;sfr SCON = 0x98;sfr SBUF = 0x99;/* 8052 Extensions */sfr T2CON = 0xC8;sfr RCAP2L = 0xCA;sfr RCAP2H = 0xCB;sfr TL2 = 0xCC;sfr TH2 = 0xCD;/* BIT Registers */* PSW */sbit CY = PSW7;sbit AC = PSW6;sbit F0 = PSW5;sbit RS1 = PSW4;sbit RS0 = PSW3;sbit OV = PSW2;sbit P = PSW0; /8052 only/* TCON */sbit TF1 = TCON7;sbit TR1 = TCON6;sbit TF0 = TCON5;sbit TR0 = TCON4;sbit IE1 = TCON3;sbit IT1 = TCON2;sbit IE0 = TCON1;sbit IT0 = TCON0;/* IE */sbit EA = IE7;sbit ET2 = IE5; /8052 onlysbit ES = IE4;sbit ET1 = IE3;sbit EX1 = IE2;sbit ET0 = IE1;sbit EX0 = IE0;/* IP */sbit PT2 = IP5;sbit PS = IP4;sbit PT1 = IP3;sbit PX1 = IP2;sbit PT0 = IP1;sbit PX0 = IP0;/* P3 */sbit RD = P37;sbit WR = P36;sbit T1 = P35;sbit T0 = P34;sbit INT1 = P33;sbit INT0 = P32;sbit TXD = P31;sbit RXD = P30;/* SCON */sbit SM0 = SCON7;sbit SM1 = SCON6;sbit SM2 = SCON5;sbit REN = SCON4;sbit TB8 = SCON3;sbit RB8 = SCON2;sbit TI = SCON1;sbit RI = SCON0;/* P1 */sbit T2EX = P11; / 8052 onlysbit T2 = P10; / 8052 only /* T2CON */sbit TF2 = T2CON7;sbit EXF2 = T2CON6;sbit RCLK = T2CON5;sbit TCLK = T2CON4;sbit EXEN2 = T2CON3;sbit TR2 = T2CON2;sbit C_T2 = T2CON1;sbit CP_RL2 = T2CON0;#endif/功能描述:/ INT0按键程序+显示程序+CAN自收发程序 /数码管1-2(从右至左)显示(十进制)本节点计数结果,数码管3-4显示(十进制)接收到的数据 /CAN主要参数: /PeliCAN模式,扩展帧EFF模式 / 29位标示码结构: / 发送数据结构:计数结果 / 接收数据结构: 待显示数据 / 本节点的地址: 0x01,0x02,0x03,0xff;(ACR03) /验收屏蔽寄存器:0xff,0xff,0xff,0xff;(AMR03)可以接收全部节点的数据 / 报文标识符:0x01,0x02,0x03,0xff;C语言文件:Can_self.c#include #include #include sfr LedPort = 0x80; /段选段P0sfr LedCtrl = 0xa0; /位选段P2uchar DisBuff4;void INT0_Counter( void ) interrupt 0 using 1/INT0按键为计数按键 EA = 0; Txd_data+; /存储计数结果,并为待发送的数据 TXD_flag = 1;/要发送数据标志位 EA = 1;void CAN_RXD( void ) interrupt 2/接收数据函数,在中断服务程序中调用 uchar data Judge;uchar data CanDataLength;/报文数据长度变量unsigned char volatile xdata *p;/外部寄存器指针uchar i; EA = 0;/关CPU中断 IE0 = 0; Judge = IR; if( Judge & 0x01) /IR.0 = 1 接收中断CanDataLength = RBSR & 0x0f;/CAN数据报文的数据长度p = &RBSR;for( i=0; i = (CanDataLength + 5); i+ ) RX_bufferi = *p+; RXD_flag = 1;/置有接收标志 CMR = 0X04; Judge = ALC;/释放仲裁随时捕捉寄存器 Judge = ECC;/释放错误代码捕捉寄存器 IER = 0x01;/ .0=1-接收中断使能; EA = 1;/打开CPU中断void main(void)CPU_init();/CPU初始化 CAN_init( ); /SJA1000初始化,对 SJA1000寄存器的读写是采用外部寄存器寻址方式,所以不需要程序单独控制片选有效无效 _nop_(); _nop_(); while(1) _nop_(); _nop_(); Rxd_deal();/接收处理程序 Txd_deal();/发送处理程序 led_seg8(); / led_seg7(3,Rxd_data); /*CPU初始化函数*void CPU_init(void)/初始化CPU SJA_RST = 0;/CAN总线复位管脚有效Delay(20 ); SJA_RST = 1;/CAN总线复位管脚无效 SJA_CS = 0;/CAN总线片选有效 EX1 = 1; IT1 = 0;/CAN总线接收中断 IT0 = 1;/外部中断0负边沿触发 EX0 = 1;/打开外部中断0 EA = 1; /打开总中断 /SJA_CS = 1;/CAN总线片选无效,使对数据总线的操作不会影响SJA1000。/*处理函数*void Rxd_deal(void)/ 接收处理程序/ if( RXD_flag ) EA = 0;/关闭CPU中断 RXD_flag = 0; Rxd_data = RX_buffer5;if (RX_buffer5=0x25) LED_GRE=0;if (RX_buffer5=0x26) LED_GRE=1; EA = 1; / 接收处理程序/void Txd_deal(void)/发送处理函数,主要是准备数据,并且调用发送函数 if( TXD_flag = 1 ) _nop_(); TXD_flag = 0; TX_buffer5 = Txd_data;/ CAN_TXD(); _nop_(); _nop_(); /*处理函数*/*CAN子函数*void CAN_init( void )/SJA1000 的初始化 uchar bdata Judge; uchar ACRR4; uchar AMRR4; ACRR0 = 0x01; ACRR1 = 0x02; ACRR2 = 0x03; ACRR3 = 0xff;/接收代码寄存器 AMRR0 = 0x00; AMRR1 = 0X00; AMRR2 = 0x00; AMRR3 = 0xff;/接收屏蔽寄存器,接收任何标识符的报文 do / .0=1-reset MODRe,进入复位模式,以便设置相应的寄存器 /防止未进入复位模式,重复写入 MODR = 0x09;Judge = MODR ; while( !(Judge & 0x01) ); CDR = 0x88;/ CDR.3=1-时钟关闭, .7=0-basic CAN, .7=1-Peli CAN BTR0 = 0x31; BTR1 = 0x1c;/总线波特率设定 IER = 0x01;/ .0=1-接收中断使能; .1=0-关闭发送中断使能 OCR = 0xaa;/ 配置输出控制寄存器 CMR = 0x04;/释放接收缓冲器 ACR = ACRR0; ACR1 = ACRR1; ACR2 = ACRR2; ACR3 = ACRR3;/初始化标示码 AMR = AMRR0; AMR1 = AMRR1; AMR2 = AMRR2; AMR3 = AMRR3;/初始化掩码MODR=0x04; do /确保进入自接收模式MODR = 0x04;Judge = MODR; while( !(Judge & 0x04) );/SJA1000 的初始化void CAN_TXD( void ) uchar data Judge; uchar data TX_buffer N_can ;/初始化标识符头信息 TX_buffer0 = 0x81;/报文信息;.7=0扩展帧;.6=0数据帧; .30=1数据长度 TX_buffer1 = 0x01;/报文标识符 TX_buffer2 = 0x02;/ TX_buffer3 = 0x03;/ TX_buffer4 = 0xff;/初始化标识符头信息/初始化发送数据单元 TX_buffer5 = Txd_data;/初始化数据信息 EA = 0; /关中断 do Judge = SR; LED_RED = 0;/ while( Judge & 0x10 ); /SR.4=1 正在接收,等待 do Judge = SR; LED_RED = 0;/ while(!(Judge & 0x08); /SR.3=0,发送请求未处理完,等待 do Judge = SR; LED_RED = 0;/ while(!(Judge & 0x04); /SR.2=0,发送缓冲器被锁。等待 LED_RED = !LED_RED; / LED_GRE = !LED_GRE;/灯闪烁 TBSR = TX_buffer0; TBSR1 = TX_b

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论