cancase lin管脚_基于PIC的LIN总线设计

简介:

1.主节点

主节点资源:4个按键,采用9600波特率的UART,在发送同步间隔场时用4800!收发芯片:MCP201

2.从节点

从节点资源:UART,CCP捕捉 首先用接收引脚状态判断是否同步间隔场,用定时器1进行计时判断同步间隔场是否合格,判断合格后,用CCP模块捕捉同步头55H,同时计算波特率,之后打开UART进行数据接收!

程序如下:

1.MASTER

//           LIN 总线设计

//---------------------------------------------

// 文件名:   MASTER.c

// 版本:     V1.0

// 日期:     25/12/06

// 功能:     LIN总线主节点

// 编译环境: HiTech PIC C compiler v.8.05

// 使用MCU:   PIC16F877

// 通信速率: 9600

//---------------协议说明---------------------

//数据发送按照USART方式发送

//Lin协议说明:

//1.电平定义:

//  显性电平:逻辑0

//  隐性电平:逻辑1

//2.数据组成

//  同步间隔场:至少13位的显性电平,以及1个位的界定符(隐性电平)

//  同步场:0x55主机发送,从机通过定时器捕捉方式来计时计算波特率

//  数据场:

//     a.标识符场:定义了报文的内容和长度,最高两位是奇偶校验位

//                  位5和6是数据长度标识,低四位是地址标识符

//     b.命令场:由2.4.8个数据字节组成,外加一个数据校验场

//  保留标识符:(广播标识符)

//     "0x3c"主机请求,用于主机广播命令,所有从机都接收

//     "0x3d"从机响应,触发所有从机节点顺序向主机传送数据

//     第一个数据场的00-7F保留,其余自由分配(程序里没有遵循,实验嘛呵呵)

//---------------------------------------------

#include  //---------------------------------------------

//--------------常量定义----------------------

#define Key1    RA0

#define Key2    RA1

#define Key3    RA2

#define Key4    RA3

#define CS      RB1

#define STATUSIT(avr,s) ((unsigned)(&avr)*8+(s))  //绝对寻址定义

static bit C @ STATUSIT(STATUS,0);                //对进位位进行定义

//----------------内存定义--------------------

unsigned char send[10];                      //定义数据数组

unsigned char Counter;                       //发送个数计数

//--------------函数定义----------------------

void Picint(void);                           //初始化

void KeyScan(void);                          //键盘扫描

void Work1(void);                            //事件处理1

void Work2(void);                            //事件处理2

void Work3(void);                            //事件处理3

void Work4(void);                            //事件处理4

void interrupt SDI(void);                    //中断函数

void Delay(unsigned int m);                  //延时函数

void Send(void);                             //数据发送

void SendSync(void);                         //同步间隔场和同步头发送

void SendData(unsigned char asd);            //发送数据场

unsigned char CheckSum(unsigned char as);    //校验和计算

void qushu();

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

//主函数

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

void main()

{

Picint();

while(1)

{

KeyScan();                                 //键盘扫描等待处理

}

}

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

//初始化函数

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

void Picint()

{

INTCON=0;                       //中断定义

ADCON1=0x07;                //定义A口为数字ioput模式

TRISA0=1;                       //键盘接口定义

TRISA1=1;

TRISA2=1;

TRISA3=1;

TRISB0=1;                      //中断定义端口

TRISB1=0;                      //片选引脚

TXSTA=0x04;                    //USART模块设置,使用高速波特率设置

RCSTA=0x80;                    //使能串口,并没有开启接收和发送

TRISC7=1;                      //数据输入

TRISC6=0;                      //数据发送

CS=1;                          //片选

RC6=1;

}

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

//数据发送  USART

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

void Send()

{

//TXEN=1;                      //发送使能

SendSync();                    //发送同步间隔场和同步头

SendData(Counter);             //发送的字节的数量

TXEN=0;                        //发送禁止

}

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

//同步间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值