-
/* ****************************************
************************
**
功能描述
:
接收到来自
PC
机串口通信发来的数据后
,
将所有接收数据用
CAN
转发到从实验板
(
从
CAN)
******
**************************************************
******* */
#include
系列的头文件
*/
char
CAN_TX_Adress_H,CAN_TX_Adress_L;
/* CAN
发送邮箱标识符高低字
节
*/
char
CAN_RX_Adress_H,CAN_RX_Adress_L;
/* CAN
接收邮箱标识符高低字
节
*/
int CAN_FLAG; /*
=1
接收到
CAN
数据
,=0
未接收到数据
*/
unsigned char receive_count=0; /*
232
串口接收数据个数寄存器
*/
unsigned char send_count=0; /*
232
串口发送数据个数寄存器
*/
unsigned char *pointer; /*
232
串口发送指针
*/
unsigned char SciReceiveFlag; /*=1
串口收到
8
个数据
,
p>
=
0
未收到
8
p>
个数据
*/
unsigned char
receive232[20]; /*
232
串口接收数据数组
*/
unsigned char send232[20]; /*
232
串口发送数据数组
*/
/* ************************************
****************************
**
函
数
名
: initial()
**
功能描述
:
系统初始化子程序,放在程序首部
*
**************************************************
************ */
void initial()
{
INTCON=0x00; /*
bit7-bit0:
关总中断
*/
ADCON1=0X07; /*
设置数字输入输出口
*/
PIE1=0; /* PIE1
的中断不使能
*/
PIE2=0; /* PIE2
的中断不使能
*/
PIE3=0; /* PIE3
的中断不使能
*/
}
/* ************************
****************************************
**
函
数
名
:
sciinitial()
**
功能描述
:
串行通讯初始化子程序
******
**************************************************
******* */
void sciinitial()
{
SPBRG=25; /* 4M,
波特率
9600
时为
SPBRG
p>
=
25 */
TXSTA=0x04;
/*
选择异步高速方式传输
8
位数据
*/
RCSTA=0x80; /*
允许串行口工作使能
*/
TRISC=TRISC|0X80; /*
RC7(RX)
设置为输入方式
*/
TRISC=TRISC&0Xbf; /*
RC6(TX)
设置为输出
*/
PIE1=PIE1|0x20; /*
允许串行通讯接口接收中断使能
*/
RCIP=0; /*
设置
SCI<
/p>
接收中断为低优先级中断
*/
PIE1=PIE1|0x10; /*
允许中断发送
*/
TXIP=0;
/*
低优先级中断
*/
CREN=1; /*
允许串口接收数据
*/
//
TXEN=1; /*
允许串口发送数据
*/
}
/* ***********
**************************************************
***
**
函
数
名
:
initcan()
**
功能描述
:
CAN
初始化子程序,采用标准标识符,正常工作模式
******************************************
********************* */
void initcan()
{
/* ************
设置对
CAN
进行配置
*******
******** */
TRISB=(TRISB|0X08)&0XFB; /
*
设置
CANRX/RB3
输入
,CANTX/RB2
输出
*/
CANCON=0X80; /* CANCON
,
bit7-5:1XX
请求配置
*/
while((CANSTAT&0X80)==0) /* CAN
< br>状态寄存器。
bit7-5:100
配置方式
*/
{
;
}
/*
等待进入
CAN
配置模式
OPMODE=100 */
/* ************
p>
设置对
CAN
进行配置
*************** */
/*
***********
波特率设置
************************** */
BRGCON1=0X01; /* Sync_Seg(bit7-6)=1TQ,B
RP(bit5-0)=1
,
则
p>
TQ=((2*(BRP+1))/Fosc=4/4M=1us */
BRGCON2=0X90; /*bit7=1
自由编程
p>
,bit6=0
总线在采样点采样
1
p>
次
;phase_Seg1(bit5-3)=3TQ;Prog_
Seg(bit2-0)=1TQ*/
BRGCON3=0X42; /*
设置
Phase_Seg2(bit2-0)=3TQ */
/*
标称位时间=
TQ*(Sync_Seg+
Prop_Seg+ Phase_seg1+ Phase_seg2)
=(1+1+3+3)TQ
=
8TQ,
位率
=1/(8*1U)=0.125MHz */
/*
设置发送邮箱
0
标识符
:=0x019F */
CAN_TX_Adress_H=0x33;
//CAN
高地址标识符,应与发送方标识符相同
CAN_TX_Adress_L=0xe0;
//CAN
低地址标识符
CAN_TX_Adress_L=CAN_TX_Adress_L&0xe0;
/*
设置接收邮箱
0
标识符
:1=0x04CA */
CAN_RX_Adress_H=0x99;
//CAN
高地址标识符
CAN_RX_Adress_L=0x55;
//CAN
低地址标识符,应与发送方标识符相同
CAN_RX_Adress_L=CAN_RX_Adress_L&0xe0;
/* ******
设置发送邮箱
0
和初始发送的数据
*****
*/
TXB0CON=0X03; /* bit1-0:
发
送优先级
,
设置
TXB0
为最高优先级
3 */
TXB0SIDL=CAN_TX_Adress_L&0xe0;/* bit3=0
标准标识符
,bit7-5:
标准标识
符
2-0
位
*/
TXB0SIDH=CAN_TX_Adress_H; /*
标准标识符的
10-3
位
*/
TXB0DLC=0X08; /*
设置数据长度为
8
个字节
*/
TXB0D0=0X00; /*
写发送缓冲器数据区数据初值
*/
TXB0D1=0X01; /*
写发送缓冲器数据区数据初值
*/
TXB0D2=0X02;
TXB0D3=0X03;
TXB0D4=0X04;
TXB0D5=0X05;
TXB0D6=0X06;
TXB0D7=0X07;
RXB0SIDL=CAN_RX_Adress_L&0xe0;/* bit3=0
标准标识符
,bit7-5:
标准标识
符
2-0
位
*/
RXB0SIDH=CAN_RX_Adress_H; /*
标准标识符的
10-3
位
*/
RXB0CON=0X20; /*
bit6-5=01
只接收有效的标准标识符信息
*/
RXB0DLC=0X08; /*
设置接收缓冲器
0
数据区长度
8
个字节
*/
RXB0D0=0X02; /*
< br>初始化接收缓冲器
0
的数据区数据
*/
RXB0D1=0X03; /*
初始化接收缓冲
器
0
的数据区数据
*/
RXB0D2=0X04;
RXB0D3=0X05;
RXB0D4=0X00;
RXB0D5=0X00;
RXB0D6=0X00;
RXB0D7=0X00;
/* *******
初始化接收滤
波器
0
和接收屏蔽
*********
******* */
RXF0SIDH=CAN_RX_Adress_H;
-
-
-
-
-
-
-
-
-
上一篇:巧用单片机的奇偶校验位
下一篇:从美国大选看中国特色社会主义优越性.