#include "uart.h"

void Uart_Init()

{

TMOD=0X20;

SCON=0X50;

TH1=253; //9600bit/s-->11.0592MHZ

TR1=1;

}

void Send_Byte(u8 dat)

{

SBUF=dat;

while(TI==0);

TI=0;

}

void Isr_uart() interrupt 4 //串口中断处理

{

u8 t;

if(RI==1)

{

RI=0;

t=SBUF;

//....

}

}uart.h

#ifndef _uart_

#define _uart_

#include "reg51.h"

#define u8 unsigned char

#define u16 unsigned int

void Uart_Init();

void Send_Byte(u8 dat);

#endif

timer.c

#include "timer.h"

TMS ms; //

void Timer0_Init() //1ms

{

TMOD|=0X01;

TH0=64614/256;

TL0=64614%256;

TR0=1;

}

void Timer0_Isr() interrupt 1 //t0 1ms

{

TH0=64614/256;

TL0=64614%256;

ms.ms1++;

ms.ms2++;

ms.ms3++;

ms.ms4++;

//...

}timer.h

#ifndef _TIMER_

#define _TIMER_

#include "reg51.h"

#define u8 unsigned char

#define u16 unsigned int

typedef struct

{

u16 ms1;

u16 ms2;

u16 ms3;

u16 ms4;

//...

}TMS;

extern TMS ms; //

void Timer0_Init();

#endif

另外12864和stc-adc的程序和前面一讲是一模一样的,这里就不再给出。

RS485从机代码

main.c

#include "12864.h"

#include "uart.h"

#include "timer.h"

#include "rs485.h"

u16 ad; //当前数字量

void Isr_Init()

{

EA=1;

ES=1;

ET0=1;

}

void main()

{

LCD_Init();

Timer0_Init();

RS485_Init();

Isr_Init();

Show_String(0x80,"RS485 从机");

while(1)

{

Show_Number(0x88,ad);

//...

}

}rs485.c

#include"rs485.h"

#include "uart.h"

#include "timer.h"

u8 Rs485buf[4]; //Rs485接收缓冲区

sbit RT485=P1^0;//MAX485的发送接收状态控制位定义

/*

0XAA ADH ADL SUM%256

*/

void RS485_Init()

{

Uart_Init();

RT485=0; //初始化MAX485为接收状态

}rs485.h

#ifndef _485_

#define _485_

#include "reg51.h"

#define u8 unsigned char

#define u16 unsigned int

void RS485_Init();

#endif

uart.c

#include "uart.h"

void Uart_Init()

{

TMOD=0X20;

SCON=0X50;

TH1=253; //9600bit/s-->11.0592MHZ

TR1=1;

}

void Send_Byte(u8 dat)

{

SBUF=dat;

while(TI==0);

TI=0;

}

void Isr_uart() interrupt 4 //串口中断处理

{

u8 t;

static u8 i;

if(RI==1)

{

RI=0;

t=SBUF;

Rs485buf[i++]=t;

if(Rs485buf[0]==0xaa)

{

if(i>=4)

{

if((Rs485buf[1] + Rs485buf[2])%256 == Rs485buf[3])

{

ad=Rs485buf[1]*256+Rs485buf[2];

}

i=0;

}

}

else

{

i=0;

}

}

}

uart.h

#ifndef _uart_

#define _uart_

#include "reg51.h"

#define u8 unsigned char

#define u16 unsigned int

extern u8 Rs485buf[4]; //Rs485½ÓÊÕ»º³åÇø

void Uart_Init();

void Send_Byte(u8 dat);

#endif另外的12864和timer就不列出了,复制主机里面的代码即可。

RS485多机通信

如图给出了主从机的框图,图中主机每100ms轮询一个从机。主机发送的寻址命令帧包含:

(1)本次轮询的从机地址

(2)本次轮询该从机的目的

(3)本次轮询该从机的附加信息

(4)本寻址帧的校验信息

从机收到寻址帧后:

(1)校验数据包的正确性

(2)检验数据包中地址部分是否与自己的地址相等

(3)对数据包进行处理

(4)对主机发回响应数据包

主机寻址帧的结构:

从机发回数据包结构:

C语言rs485编程,- 第六讲 单片机之c语言RS485通信相关推荐

  1. c语言之判断电压最大值最小值,《单片机和C语言编程》..ppt

    <单片机和C语言编程>..ppt 6.1.2 DAC0832芯片及其与单片机接口 DAC0832是使用非常普遍的8位D/A转换器,由于其片内有输入数据寄存器,故可以直接与单片机接口.DAC ...

  2. C语言面向对象编程(六):配置文件解析

    在实际项目中,经常会把软件的某些选项写入配置文件. Windows 平台上的 INI 文件格式简单易用,本篇文章利用<C语言面向对象编程(五):单链表实现>中实现的单链表,设计了一个&qu ...

  3. 006-高级语言程序设计C 第六章,高级语言程序设计_C语言(第六章 数组.ppt

    <高级语言程序设计_C语言(第六章 数组.ppt>由会员分享,可在线阅读,更多相关<高级语言程序设计_C语言(第六章 数组.ppt(30页珍藏版)>请在人人文库网上搜索. 1. ...

  4. 单片机c语言中延时函数的作用,单片机中C语言延时函数

    单片机C语言延时程序计算2009-11-02 22:15单片机C语言延时程序用C语言写出来程序非常的简练,它是一种模块化的语言,一种比汇编更高级的语言,但是就是这样一种语言也还是有它不足之处:它的延时 ...

  5. 用c语言设计红绿灯程序,[转载]51单片机用C语言实现交通灯(红绿灯)源程

    51单片机用C语言实现交通灯(红绿灯)源程序 交通灯,红黄绿灯交替亮,怎样实现呢?其实就是根据单片机定时器及倒计时的程序修改. 源程序如下: #include bit red,green,yellow ...

  6. 手机c语言mini,一、应广单片机的Mini-C语言基础

    一.概述 项目需要性价比高一点的芯片,在澄海这边,台湾的芯片占了很大的市场.台湾芯片的特点是便宜,没办法,玩具出口生产量太大,1分钱的差价都有可能累积出大价钱.选型时选了应广单片机.对于用惯了C开发的 ...

  7. stc15系列c语言pwm编程,分享一下stc15单片机的PWM波程序

    #include  "include.h" /*------------------pwm功能初始化-------------------*/ void PWM_GO(void) ...

  8. 传热学c语言节点编程题_哈工大苏小红C语言编程题目第二周的答案第一二题12...

    本人亲自测试过,答案完全正确!!! 1输出逆序数(3分) 题目内容:从键盘任意输入一个3位整数,编程计算并输出它的逆序数(忽略整数前的正负号).例如,输入-123,则忽略负号,由123分离出其百位1. ...

  9. python语言的编程模式_一种基于Python语言的EDA开发平台及其使用方法与流程

    本发明涉及EDA开发的技术领域,尤其是指一种基于Python语言的EDA开发平台及其使用方法. 背景技术: 目前,主流的EDA设计语言Verilog HDL能实现完整的芯片硬件逻辑电路开发,但是其代码 ...

  10. 51单片机c语言常用语句详解,51单片机之C语言-4.5基本语句之条件选择语句

    1. 条件选择语句之if 语句 前面我们讲了数据类型,运算符及表达式.C语言也是一种语言,既然是语言,一定有连接词.这些连接词可以用来表示假设,循环等等.我们先来看看假设if语句.这些连接词有一定的规 ...

最新文章

  1. 一个云原生双活架构方案
  2. 数据备份_「Cassandra实战」Cassandra数据备份
  3. DC学院爬虫学习笔记(六):浏览器抓包及headers设置
  4. 基于consul实现微服务的服务发现和负载均衡
  5. Android通过使用系统广播监听网络状态的改变
  6. AFNetworking 对数据进行https ssl加密
  7. 【文末有福利】炒鸡蛋竟然与无人驾驶有关?
  8. 编辑了基因,就能成为人生赢家?5本书给你答案
  9. Windows 发布本地提权0day,可以系统权限执行任意代码
  10. kibana安装与基础用法
  11. Mongodb 3.2 Manual阅读笔记:CH9 存储
  12. C# 如何将Excel表格复制到Word中并保留格式
  13. python音频识别_音频识别和比较
  14. 《神经网络与深度学习》——邱锡鹏(读书笔记_C2_1)
  15. u盘和计算机捆绑,不要再使用乱七八糟的捆绑PE了——教你制作最纯净的PE系统维护U盘!...
  16. 【android学习笔记:Webview与Js交互】网页生成的excel/pdf等文件通过webview下载保存
  17. web端接入QQ第三方登陆获取本地QQ登陆信息流程
  18. 如何快速批量建网站?
  19. buctoj2021年ACM竞赛班训练(七)题解
  20. 教师资格证上传照片时显示内部服务器错误怎么解决

热门文章

  1. python3.5安装PyHook3
  2. oracle修改执行计划,调整执行计划的三种方法
  3. bsod错误代码。_如何解决BSOD(蓝屏死机)和Windows Stop错误?
  4. 食品进销存十大品牌排行榜新鲜出炉,来看看哪个最适合你
  5. WIN10专业版64位21H2正式版19044.1826
  6. 大学四年总结与感悟及给刚上大学的同学的一些建议
  7. CentOS查找redis配置文件及防火墙相关命令
  8. 必须收藏!没有经验的程序员该怎么找工作?
  9. HTML网页设计制作大作业 - 绿色环境保护HTML5网站模板(4个页面)
  10. 疫情在家办公,向日葵突然卡死,无法远程电脑的解决办法(局域网远程强制重启windows)