于RS485的多机通信程序主机端_第1页
于RS485的多机通信程序主机端_第2页
于RS485的多机通信程序主机端_第3页
于RS485的多机通信程序主机端_第4页
于RS485的多机通信程序主机端_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、于 RS-485 的多机通信程序 ( 主机端 )/ 函数声明,变量定义#include ;sbit RE_DE=PMO;#define COUNT 10 / 定义接收缓冲区大小#define Slaver_NUM 10unsigned char bdata flag; / 在可位寻址去定义一个标 志变量sbit time_over_flag =flagA0; /接收超时标志unsigned char bufferCOUNT; / 定义缓冲区 unsigned char point; / 定义缓冲区位置指示unsigned char Slave_ADSlaver_NUM; / 定义有效地址 存放

2、区unsigned char ADD_num; / 有效地址个数unsigned char idata count_10ms; / 用于表示有多少次 10ms中断unsigned char idata send_data7=0x31,0x32,0x33,0x34,0x35,0x36,0x37; / 与定义发送 数据,共 7 位void UART_init(); / 串口初始化函数void COM_send(void); /串口接收函数unsigned char CLU_checkdata(void); / 计算校验位函 数/ / 函数名称: UART_init() 串口初始化函数/函数功能:在

3、系统时钟为11.059MHZ时,设定串口波特率为 9600bit/s/ 串口接收中断允许,发送中断禁止,设定定时器中断 允许/ void UART_init()/ 初始化串行设置SCON =0x58; / 选择串口工作方式为 1,打开接收允许,TB8=1TMOD =0x21; / 定时器 1 工作在方式 2,定时器 0工作在 方式 1TR1 =1; / 启动定时器 T1ES=1; / 允许串行口中断PS=1; / 设计串行口中断优先级/ 初始化定时器 1TH1 =0xfd; / 实现波特率 9600(系统时钟 11.0592MHZ)ET1 =0; / 定时器 1中断禁止/ / 函数名称: ti

4、mer0_init() 初始化定时器 0/ 函数功能: 设置 timer0 工作模式/ void timer0_init() time_over_flag=0;count_10ms=0;ADD_num=0;TLO=OxOFO; /TO 用于产生10ms的中断TH0=0x0D8; /50 次 T0 中断产生 1 次超时溢出ET0=1; / 允许定时器 0中断/ / 函数名称: system_init() 系统初始化/ 函数功能: 调用串口、定时器初始化函数,完成系统初始化/ void system_init(void)/ 系统总设置UART_init();timer0_init();EA =1;

5、 / 单片机中断允许/ / 函数名称: com_interrup() 串口接收中断处理函数/ 函数功能: 接收包括起始位 "S" 在内的十 位数据到数据缓冲区/ com_interrupt(void) interrupt 4 using 3 unsigned char RECEIVR_buffer; if(RI) / 处理接收中断RI=0; / 清除中断标志位RECEIVR_buffer=SBUF; / 接收串口数据 if(point=0) / 如果还没有接收到起始位if(RECEIVR_buffer=0xFE) / 判断是否起始标志位bufferpoint

6、+=RECEIVR_buffer;/ 把接收到的数据放 入接收缓存区elsepoint=0; / 不是,继续等待起始位else if(point>0&&point<10) / 判断是否接收够十位数 据bufferpoint+=RECEIVR_buffer; /不够,把接收到的数据放入接收缓存区else if(point=10)if(RECEIVR_buffer=0xEF) / 判断结束标志位是否正确 bufferpoint=RECEIVR_buffer; / 把接收到的数据放 入接收缓存区Slave_ADADD_num+=buffer2; /把接收到的地址放到地址存

7、储器/ 表示该地址有有效设备elsepoint=0; / 不是,继续等待起始位else point=0; / 缓冲区已满,清除缓存区内数据重新接 收if(TI) / 串口发送中断TI=0; / 清除发送中断/ / 函数名称: timer0_interrup()/ 函数功能:定时器 T0 中断服务程序/函数说明:TO枚10ms中断一次,连续中断 50次置time_over_flag=1 ;/timer0_interrupt(void) interrupt 1 using 2 count_10ms+;if(count_10ms=50)ET0=0; / 关闭定时器 T0 中断TR0=0; / 停止定

8、时器 T0 time_over_flag=1;/ 设置接收超时标志 count_10ms=0x00; /10ms 计数器复位 elseTL0=0x0F0; / 重装定时器初始值TH0=0x0D8;/ / 函数名称: COM_send() 串口发送函数/ 函数功能: 把数据缓冲区的十位数据发送出去/void COM_send(void)RE_DE=1; /设置 MAX483进入发送状态连续发送十for(point=0;point<=10,TI=1;point+) / 位数据/ 把缓存区的数据都发送到串口SBUF=bufferpoint;TI=0;RE_DE=0; II设置 MAX483进入

9、接收状态IIII 函数名称: write_buffer()II 函数功能: 写发送缓冲区十位数据II void write_buffer(unsigned char slaver_add) unsigned char i;TB8=1; / 打开多机通信方式 buffer0=0xFE; buffer1=slaver_add;for(i=2;i<9;i+) / 连续发送十位数据/ 把缓存区的数据都发送到串口bufferi=send_datai-2;buffer9=0xEF;/ / 函数名称: 主函数/ 函数功能: 调度个子函数,完成通信过程/ void main(void)unsigned char i=0;system_init(); / 系统初始化do / 查旬 0 到 10 好地址有没有对应

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论