AVR单片机Can总线通信控制程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//================================================== =================================

// 工程名称:汽车041项目目标板3-6程序

// 功能描述:CAN通信,继电器控制,AD采集

// IDE环境: ICCAVR

// Init2515: 2515初始化程序

//================================================== =================================

#include "iom16v.h"

#include "bit.h"

#include "macros.h"

#include "stdio.h" //标准输入输出头文件

#include "2515.h"

#include "SPI_Ctrl.h"

#include "Function.h"

#include "CAN0.h"

#include "MAX518.h"

#include "AD.h"

#pragma interrupt_handler Extint0:2

#pragma interrupt_handler timer1_isr:9

#define uint unsigned int

#define uchar unsigned char

/******************外部中断常量******************/

#define GLOBAL 7 //全局中断位宏定义

#define EXTINT0 6 //外部中断0位宏定义

#define H_SRCLK PORTD|=(1<<6) //上升沿移位

#define L_SRCLK PORTD&=~(1<<6) //下降沿不移位

#define H_SER PORTD|=(1<<7) //595串行数据输

#define L_SER PORTD&=~(1<<7) //595串行数据输

#define H_RCLK PORTD|=(1<<5) //595数据锁存放开

#define L_RCLK PORTD&=~(1<<5) //595数据锁存

uchar Flag=0,Flag1=0,pp=0;

uchar Receive_Data=0,Start_Data=0;

uchar CAN_TX_Buf[8],CAN_RX_Buf[8];

//************************************************************* //* 函数说明:MCU端口初始化

//* 输入:无

//* 输出:无

//* 调用函数:

//************************************************************* void port_init(void) //IO端口初始化

{

DDRA=0x00;

PORTA=0x00;

DDRB=0xff;

PORTB=0xff;

DDRC=0xff;

PORTC=0xff;

DDRD=0xff;

PORTD=0xff;

}

/*******************************************

函数名称: Int_init

功能: 中断初始化

参数: 无

返回值 : 无

/********************************************/ void Int_init(void)

{

SREG|=BIT(GLOBAL); //使能全局中断

MCUCR|=0x02; //外部中断0采用下降沿触发 GICR|=BIT(EXTINT0);//使能外部中断0

DDRD&=~(BIT(PD2)); //配置中断管脚为输入

PORTD|=BIT(PD2); //使能中断管脚的上拉

}

void timer1_init(void)

{

TCCR1B=0x04;//256分频

TCNT1H=0Xff;//赋初值

TCNT1L=0Xfe;//赋初值

TIMSK|=0x04;//中断使能

SREG|=0x80;//总中断开关

}

/*******************************************

函数名称: WR_74ls595(uchar data)

功能: 控制继电器

/********************************************/

void WR_74ls595(uchar data)

{

uchar i,dat;

L_RCLK;

for(i=0;i<8;i++)

{ L_SRCLK;

if(data&0x80) H_SER;

else L_SER;

H_SRCLK;

data<<=1;

}

H_RCLK;

L_RCLK;

}

/*******************************************

函数名称: Data_get()

功能:对上位机发过来的数据分析后返回需要设置的故障代码

/********************************************/

void Data_get()

{

if(CAN_RX_Buf[0]==0x01) Start_Data=Start_Data|0x01;

if(CAN_RX_Buf[0]==0x00) Start_Data=Start_Data&0xfe;

if(CAN_RX_Buf[1]==0x01) Start_Data=Start_Data|0x02;

相关文档
最新文档