按关键词阅读: 论文 课程设计 设计 装置 控制 总线 can 基于
26、控制程序 系统控制程序如下: #include #include CANCOM.h unsigned char UART_TX_Data8 = 0,1,2,3,4,5,6,7;
unsigned char CAN_TX_Data8 = 0,1,2,3,4,5,6,7;
unsigned char xdata UART_RX_Data255;
/串口接收到的串行帧 unsigned char xdata CAN_TX_Data255;
/待发送的数据缓冲区 unsigned char code ACR_ID4 = 0,0,0,0;
/CAN 初始设置验收滤波值 unsigned char cod 。
27、e AMR_ID4 = 0 xff,0 xff,0 xff,0 xff;
unsigned char CAN_TX_ID4 = 0,0,0,0;
/待发送的目标的 ID unsigned char CAN_RX_ID4 = 0,0,0,0;
/接收到的信息来自何 ID unsigned char CAN_RX_Data8 = 7,6,5,4,3,2,1,0;
/接受到的数据缓冲 unsigned char code CAN_BTR010 =0 xdf,0 xcf,0 xc7,0 xc3,0 x43,0 xc1,0 xc1, xc0,0 xc0,0 x80;
unsigned char code 。
28、 CAN_BTR110 = 0 x7f,0 x7f,0 x7f,0 x7f,0 x2f,0 x7f,0 x4d,0 x 3e,0 x3a,0 x23;
/ 5K 10K 20K 40K 50K 80K 100K 200K 250K 500K unsigned char code UART_BTR4 = 0 xe8,0 xf4,0 xfa;
/ 1.2K,2.4K,4.8K unsigned char CAN_flag;
/CAN 发送标志位 unsigned char UART_flag;
/ unsigned char CAN_ERROR_flag = NOT;
/ unsigned cha 。
29、r CAN_DataLength = 8;
/CAN 信息的报文长度 unsigned char UART_DataLength = 0;
/串口接收时的当前指示 unsigned char UART_Length = 0;
/串口接收区的长度指示 /sbit AAA = P14;
void main(void) EA = 0;
System_init();
/系统初始化 Timer_init();
/定时器初始化 Interrupt_init();
/中断 UART_ini();
CAN_init();
Delay(1);
W_WDT();
EA = 1;
/Delay(1);
/UART_ 。
30、Length = 8;
/CAN_Transmit(0);
/UART_Transmit();
void Interrupt_init(void) /IP = 0 x00;
IT0 = 0 x01;
/外部 0 中断沿触发 ET0 = 1;
/定时器 0 中断使能 EX0 = 1;
/外部中断使能 ES = 1;
/串行中断使能 / 定时中断程序 / 一旦中断 , 说明一帧的接收已经结束 , 开始启动 CAN 发送程序 / 把串口接收到的数据准备好给 CAN 总线发送 / 初始化定时器程序 / -定时器 0 方式 1 , 定时器 1 方式 2 留给串口 /void Timer_init(void) TMO 。
31、D |= 0 x01;
/使用定时器 0方式 1 TH0 = temp_TH0;
TL0 = temp_TL0;
/TR0 = 1;
/这里不打开定时器 void CAN_init(void) EA = 0;
MOD_CAN1 |= 0 x08;
/单滤波方式 do MOD_CAN1 |= 0 x01;
/request to reset mode while (MOD_CAN1 CDR_CAN1 = 0 xc8;
/选择 PeliCAN 模式 , 使用输入比较器 , clk_out 关闭 IER_CAN1 = 0 x01;
/允许发送中断 , 其他中断禁能 ACR0_CAN1 = ACR_ID0;
AC 。
32、R1_CAN1 = ACR_ID1;
ACR2_CAN1 = ACR_ID2;
ACR3_CAN1 = ACR_ID3;
AMR0_CAN1 = AMR_ID0;
AMR1_CAN1 = AMR_ID1;
AMR2_CAN1 = AMR_ID2;
AMR3_CAN1 = AMR_ID3;
/ECC_CAN1 = 0;
/TXERR_CAN1 = 0;
/RBSA_CAN1 = 0;
BTR0_CAN1 = CAN_BTR00;
BTR1_CAN1 = CAN_BTR10;
OCR_CAN1 = 0 xaa;
/normal output W_WDT();
do MOD_CAN1 while ( 。
33、MOD_CAN1 EA = 1;
/ CAN 发送接受到的一帧串口数据 / -最大长度 255 , 根据接收到的串口信息的 / 个数来确定 / -按每依次 8 个数据作为一个 CAN 帧的报文部分 / 不足 8 个或超过 8 的倍数的部分按实际个数作 / 为 CAN 报文 / -FarmeType = 1 为扩展帧 , FarmeType = 0 为 / 标准帧 while (can_status TXFrameInfo1 = 0 x80 + UART_Length%8;
pointer = for (i=0;
i4;
i+) *(pointer+) = CAN_TX_IDi;
pointer = for 。
34、 (i=0;
i(UART_Length%8);
i+) *(pointer+) = CAN_TX_Datai+8*(UART_Length/8);
CMR_CAN1 = Request_TX;
W_WDT();
/ CAN 接收中断服务程序 void CAN_ISR(void) interrupt 0 using 1 unsigned char can_int;
EA = 0;
can_int = IR_CAN1;
if (can_int CMR_CAN1 |= ReleaseRXBuf;
else CAN_ERROR_flag = YES;
/其他中断 , 暂时未用 /UART_flag = YE 。
35、S;
/CAN_flag = YES;
UART_Transmit();
EA = 1;
/ CAN 接收数据函数 #define YES 1 /4800bps 5bits 1.04mS #define TIME_MS 1 #define temp_TH0 (0 - 922*TIME_MS)/256 #define temp_TL0 (0 - 922*TIME_MS)%256 sbit LED1 = P12;
sbit LED2 = P13;
sbit LED3 = P15;
sbit LED4 = P14;
sbit WDT = P34;
void System_init(void);
vo 。
36、id Delay(unsigned char time);
void W_WDT(void);
void Interrupt_init(void);
void CAN_init(void);
/void CAN_Transmit(unsigned char Farmeinfo);
void CAN_Transmit(bit FarmeType);
void CAN_Receive(void);
void Timer_init(void);
void UART_ini(void);
void UART_Send_Byte(unsigned char Data);
void UART_Transm 。
37、it(void);
void Clear_Buffer(unsigned char *pointer,unsigned char length);
#endif 第 5 章 课程设计总结 本设计目前完成了基于 CAN 总线的液位控制的设计 。
测试结果表明 , 该液位 智能控制具有动态响应好 , 控制准确度高 , 抗干扰能力强 , 开放性好等特点 。
稿源:(未知)
【傻大方】网址:/a/2021/0621/0022537562.html
标题:基于|基于CAN总线的液位控制装置的设计课程设计论文( 四 )