C语言rs485编程,- 第六讲 单片机之c语言RS485通信
#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通信相关推荐
- c语言之判断电压最大值最小值,《单片机和C语言编程》..ppt
<单片机和C语言编程>..ppt 6.1.2 DAC0832芯片及其与单片机接口 DAC0832是使用非常普遍的8位D/A转换器,由于其片内有输入数据寄存器,故可以直接与单片机接口.DAC ...
- C语言面向对象编程(六):配置文件解析
在实际项目中,经常会把软件的某些选项写入配置文件. Windows 平台上的 INI 文件格式简单易用,本篇文章利用<C语言面向对象编程(五):单链表实现>中实现的单链表,设计了一个&qu ...
- 006-高级语言程序设计C 第六章,高级语言程序设计_C语言(第六章 数组.ppt
<高级语言程序设计_C语言(第六章 数组.ppt>由会员分享,可在线阅读,更多相关<高级语言程序设计_C语言(第六章 数组.ppt(30页珍藏版)>请在人人文库网上搜索. 1. ...
- 单片机c语言中延时函数的作用,单片机中C语言延时函数
单片机C语言延时程序计算2009-11-02 22:15单片机C语言延时程序用C语言写出来程序非常的简练,它是一种模块化的语言,一种比汇编更高级的语言,但是就是这样一种语言也还是有它不足之处:它的延时 ...
- 用c语言设计红绿灯程序,[转载]51单片机用C语言实现交通灯(红绿灯)源程
51单片机用C语言实现交通灯(红绿灯)源程序 交通灯,红黄绿灯交替亮,怎样实现呢?其实就是根据单片机定时器及倒计时的程序修改. 源程序如下: #include bit red,green,yellow ...
- 手机c语言mini,一、应广单片机的Mini-C语言基础
一.概述 项目需要性价比高一点的芯片,在澄海这边,台湾的芯片占了很大的市场.台湾芯片的特点是便宜,没办法,玩具出口生产量太大,1分钱的差价都有可能累积出大价钱.选型时选了应广单片机.对于用惯了C开发的 ...
- stc15系列c语言pwm编程,分享一下stc15单片机的PWM波程序
#include "include.h" /*------------------pwm功能初始化-------------------*/ void PWM_GO(void) ...
- 传热学c语言节点编程题_哈工大苏小红C语言编程题目第二周的答案第一二题12...
本人亲自测试过,答案完全正确!!! 1输出逆序数(3分) 题目内容:从键盘任意输入一个3位整数,编程计算并输出它的逆序数(忽略整数前的正负号).例如,输入-123,则忽略负号,由123分离出其百位1. ...
- python语言的编程模式_一种基于Python语言的EDA开发平台及其使用方法与流程
本发明涉及EDA开发的技术领域,尤其是指一种基于Python语言的EDA开发平台及其使用方法. 背景技术: 目前,主流的EDA设计语言Verilog HDL能实现完整的芯片硬件逻辑电路开发,但是其代码 ...
- 51单片机c语言常用语句详解,51单片机之C语言-4.5基本语句之条件选择语句
1. 条件选择语句之if 语句 前面我们讲了数据类型,运算符及表达式.C语言也是一种语言,既然是语言,一定有连接词.这些连接词可以用来表示假设,循环等等.我们先来看看假设if语句.这些连接词有一定的规 ...
最新文章
- 一个云原生双活架构方案
- 数据备份_「Cassandra实战」Cassandra数据备份
- DC学院爬虫学习笔记(六):浏览器抓包及headers设置
- 基于consul实现微服务的服务发现和负载均衡
- Android通过使用系统广播监听网络状态的改变
- AFNetworking 对数据进行https ssl加密
- 【文末有福利】炒鸡蛋竟然与无人驾驶有关?
- 编辑了基因,就能成为人生赢家?5本书给你答案
- Windows 发布本地提权0day,可以系统权限执行任意代码
- kibana安装与基础用法
- Mongodb 3.2 Manual阅读笔记:CH9 存储
- C# 如何将Excel表格复制到Word中并保留格式
- python音频识别_音频识别和比较
- 《神经网络与深度学习》——邱锡鹏(读书笔记_C2_1)
- u盘和计算机捆绑,不要再使用乱七八糟的捆绑PE了——教你制作最纯净的PE系统维护U盘!...
- 【android学习笔记:Webview与Js交互】网页生成的excel/pdf等文件通过webview下载保存
- web端接入QQ第三方登陆获取本地QQ登陆信息流程
- 如何快速批量建网站?
- buctoj2021年ACM竞赛班训练(七)题解
- 教师资格证上传照片时显示内部服务器错误怎么解决
热门文章
- python3.5安装PyHook3
- oracle修改执行计划,调整执行计划的三种方法
- bsod错误代码。_如何解决BSOD(蓝屏死机)和Windows Stop错误?
- 食品进销存十大品牌排行榜新鲜出炉,来看看哪个最适合你
- WIN10专业版64位21H2正式版19044.1826
- 大学四年总结与感悟及给刚上大学的同学的一些建议
- CentOS查找redis配置文件及防火墙相关命令
- 必须收藏!没有经验的程序员该怎么找工作?
- HTML网页设计制作大作业 - 绿色环境保护HTML5网站模板(4个页面)
- 疫情在家办公,向日葵突然卡死,无法远程电脑的解决办法(局域网远程强制重启windows)