新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > PIC单片机的RS-232串口转工业现场总线通信适配卡设计

PIC单片机的RS-232串口转工业现场总线通信适配卡设计

作者:时间:2011-11-30来源:网络收藏
1.3 A/D转换模块

16F877A自带有8路模拟通道,转换精度为10位。本卡选择RA0为模拟通道。板卡将A/D转换后的数据通过CAN上传给上位机。

1.4 数据流

CAN-的数据流图见图4。

2、系统软件

软件分为两大块:板卡底层软件和PC机上操作软件设计。板卡底层软件设计主要是对16F877A编程,用于把从PC机通过输人给的数据按照CAN协议帧结构进行打包处理,并操作CAN控制器把数据发送到CAN;把从CAN上输入的数据转换成串行数据输出给PC机:PC机上操作软件设计主要是对串口的操作和通过串口收发数据。

2.1编程

开发工具使用的是MPLAB集成开发环境(IDE),它是综合的编辑器、项目管理器和设计平台,适用于使用Microchip的micro系列单片机进行嵌入式设计的应用开发;编程语言用的是C语言,将HITECH 公司的PICC编译器直接挂接在MPLAB-IDE集成开发平台下,实现一体化的编译连接和原代码调试。

CAN控制器SJA1000T片内有模式寄存器MOD、命令寄存器CMR、状态寄存器SR、中断寄存器IR、中断使能寄存器IER、接收缓冲器RXB、发送缓冲器TXB、仲裁丢失捕捉寄存器ALC、错误代码捕捉寄存器ECC、错误报警限额寄存器EWLR、错误计数寄存器ERR、验收代码寄存器ACR、验收屏蔽寄存器AMR、总线时序寄存器BTR、输出控制寄存器OCR和时钟分频寄存器CDR等,单片机就是通过读写这些寄存器来实现对SJA1000T的控制,从而实现CAN报文的接收和发送。文后给出CAN控制器SJA1000T初始化和接收子程序的流程图。下面给出CAN初始化程序,其中WRCAN是自定义的一段对SJAIO00T写数据的子程序。

C程序

void CANINI()

{

WRCAN(MODE,0x09); //进入复位模式,选择单向滤波方式,对SJA1000T进行初始化

WRCAN(CDR,0x88); //选择PeliCAN模式,关闭CLKOUT

WRCAN(IER,0x0D); //中断允许寄存器

//以下根据需要对屏蔽寄存器赋初值,将位设为1表示DON'T CARE,设为0表示CARE

WRCAN(AMR0,0x00);

WRCAN(AMR1,0x00);

WRCAN(AMR2,0xFF);

WRCAN(AMR3.0xFF); //因为AMR3的最低两位是不用的,必须置“1”

//以下根据情况为验收代码寄存器赋初值

WRCAN(ACR0,0x00);

WRCAN(ACR1,0x00);

WRCAN(ACR2,0xFF);

WRCAN(ACR3,0xFF); //ACR,AMR各位设为1,是为了允许任何数据通过滤波器的验收

WRCAN(BTR0,0x03); //总线定时寄存器

WRCAN(BTR1,0xFF); //设置波特率为50kbps

B=fXT/[2*BRP*(1+Tseg1+Tseg2)]

WRCAN(OCR,0xAA); //输出控制寄存器

WRCAN(RBSA,0x00); //接收缓存寄存器FIFO的起始地址为0

WRCAN(TXERR,0x00); //清除发送错误寄存器

RDCAN(ECC); //清除ECC,因为ECC是只读不能写的,当被读出时,其相应位即被清除

WRCAN(MODE,0x08); //设为单滤波方式,并返回工作状态

return

}

void WRCAN(address,data) //向SJA1000T的寄存器写入数据

unsigned char address;

unsigned char data

{

PORTC=0x0D; //RC3=1;RC2=1;Rc1=0;RC0=1;即ALE置1,则锁存地址,其余端口参考时序图

PORTD=address;

PORTC=0x04; //RC0=0;RC1=0;RC2=1;RC3=0;即ALE置0,则传输据.进入写方式,其余端口参考时序图

PORTD=data//将数据写入端口D

PORTC=0x0E; //RC3=1;RC2=1;RC1=1;RC0=0;各端口还原

}


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭