(通信企业管理)第章单片机远距离通信模块

上传人:管****问 文档编号:128092249 上传时间:2020-04-08 格式:DOC 页数:6 大小:54.07KB
返回 下载 相关 举报
(通信企业管理)第章单片机远距离通信模块_第1页
第1页 / 共6页
(通信企业管理)第章单片机远距离通信模块_第2页
第2页 / 共6页
(通信企业管理)第章单片机远距离通信模块_第3页
第3页 / 共6页
(通信企业管理)第章单片机远距离通信模块_第4页
第4页 / 共6页
(通信企业管理)第章单片机远距离通信模块_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《(通信企业管理)第章单片机远距离通信模块》由会员分享,可在线阅读,更多相关《(通信企业管理)第章单片机远距离通信模块(6页珍藏版)》请在金锄头文库上搜索。

1、21.2.3 单片机与PC机通信模块的的程序设计sbit RE_DE=P10;unsigned char d_rightframe; /正确数据帧标志unsigned char P_RS485; /RS485中断接收数据帧的位置unsigned char idata d_addresscode; /数据帧的地址信息unsigned char idata d_commandcode2; /数据帧命令码unsigned char idata d_databuffi; /数据帧数据序列unsigned char idata d_checkdata; /数据帧累加和校验码unsigned char i

2、data d_end; /数据帧结束符unsigned char idata d_syscheck; /中断接收程序计算所得到的累加和校验码sys_initial() TMOD=0x21; /定时器1定义为方式2,定时器0定义为工作方式1 PCON=0x00; /数据传输速率选择 SCON=0x88; /串行口为方式2 ES=1; /允许串行口中断 PS=1; /设置串口中断优先级 TL1=0xE6; TH1=0xE6; /置初值,对应于2400bit/s的波特率 TR1=1; EA=1; /打开单片机中断允许receive_isp(void)interrupt4 using3 if(RI)

3、/处理接收中断 RI=0; /清除中断标志 if(P_RS485=0) /串口接收中断处于接收帧起始字节阶段 if(SBUF!=0x02) /是否为有效的帧起始字节 P_RS485=0; else P_RS485=1; /串口接收状态标志更新 else if(P_RS485=1) d_addresscode=SBUF; /保存接收的单片机地址信息 P_RS485=2; d_syscheck=0x00; /准备进行数据和校验 else if(P_RS485=2) for(i=0;i2;i+) d_commandcode=SBUF; /保存命令码信息 d_syscheck+= d_commandc

4、ode; /更新累加和校验信息 P_RS485=3; else if(P_RS485=3) for(i=0;i d_datalength;i+) d_databuffi=SBUF; /保存数据序列信息 d_syscheck+=d_databuffi; /更新和校验码 P_RS485=4; else if(P_RS485=4) d_checkdata=SBUF; /保存校验码 if(d_syscheck!=d_checkdata) /累加和校验和错误 d_rightframe=0; /置数据无效标志 P_RS485=0; /复位RS485接收中断程序状态 else P_RS485=5; else

5、 if(P_RS485=5) d_end=SBUF; /保存结束码 if(d_end!=0x16) /错误的帧结束标志 d_rightframe=0; /置数据无效标志 P_RS485=0; /复位RS485接收中断程序状态 else if(d_end=0x16) d_rightframe=1; /置数据有效标志 P_RS485=0; /置RS485接收中断程序状态为0 if(TI) TI=0; /处理发送中断 /延时函数void delay() unsigned int i; for(i=0;i125;i+) /串口数据发送程序void send_data() d_checkdata=0x0

6、0; /累加和校验码清零 RE_DE=1; /设置MAX485发送状态 SBUF=0x02; /发送帧起始标志 delay(); /延时 SBUF=d_addresscode; /发送单片机地址信息 delay(); /延时 for(i=0;i2;i+) SBUF=d_commandcode; /发送命令码 d_checkdata+= d_commandcode; /更新累加和校验信息 delay(); /延时 for(i=0;idatalength;i+) SBUF=d_databuffi; /发送数据序列 d_checkdata+=d_databuffi; /更新累加和校验信息 delay

7、(); /延时 SBUF=d_checkdata; /发送累加和校验码 delay(); /延时 SBUF=0x16; /发送帧结束标志 delay(); /延时 RE_DE=0; /设置MAX485接收状态21.3.3 基于SJA1000的CAN总线通信模块的程序的设计/SJA1000的各寄存器的地址定义#define Can_CR 0xE800 /定义控制寄存器地址#define Can_CMR 0xE801 /定义命令寄存器地址#define Can_SR 0xE802 /定义状态寄存器地址#define Can_IR 0xE803 /定义中断寄存器地址#define Can_ACR 0

8、xE804 /定义验收码寄存器地址#define Can_AMR 0xE805 /定义验收屏蔽寄存器地址#define Can_BT0 0xE806 /定义总线定时寄存器0地址#define Can_BT1 0xE807 /定义总线定时寄存器1地址#define Can_OCR 0xE808 /定义输出控制寄存器地址#define Send_Start 0xE80A /定义发送缓冲器的起始地址#define Receive_Start 0xE814 /定义接收缓冲器的起始地址#define Can_CLOCK 0xE81F /定义时钟分频寄存器的地址 #define Data_Storeadr 0xE850 /单片机暂存报文的起始地址/SJA1000的初始化函数void SJA_Intial() XBYTECan_CR=0x01; /关闭所有中断源,置复位状态 if(XBYTECan_CR&0xFF=1) XBYTECan_CLOCK=0x08; /设置为Basic_CAN模式,CLOCKOFF不输出 XBYTECan_ACR=0x01; /设置验收码为00000001b XBYTECan_AMR=0xFE; /设置验收屏蔽码,仅最低位为相关位 XBYTECan_BT0=0x00; /设置系统时钟为振荡器时钟的两倍,同步跳转宽度等于系统时钟 XBYTECan_BT1=0x80;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号