/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC15F4K60S4 系列 定时器1用作串口1的波特率发生器------------*/
//本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
//若无特别说明,工作频率一般为11.0592MHz
#include "reg51.h"
#include "intrins.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
#define FOSC 11059200L //系统频率
#define BAUD 115200 //串口波特率
#define NONE_PARITY 0 //无校验
#define ODD_PARITY 1 //奇校验
#define EVEN_PARITY 2 //偶校验
#define MARK_PARITY 3 //标记校验
#define SPACE_PARITY 4 //空白校验
#define PARITYBIT EVEN_PARITY //定义校验位
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xC9;
sfr P5M0 = 0xCA;
sfr P6M1 = 0xCB;
sfr P6M0 = 0xCC;
sfr P7M1 = 0xE1;
sfr P7M0 = 0xE2;
sfr AUXR = 0x8e; //辅助寄存器
sfr P_SW1 = 0xA2; //外设功能切换寄存器1
#define S1_S0 0x40 //P_SW1.6
#define S1_S1 0x80 //P_SW1.7
sbit P22 = P2^2;
bit busy;
void SendData(BYTE dat);
void SendString(char *s);
void main()
{
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
P6M0 = 0x00;
P6M1 = 0x00;
P7M0 = 0x00;
P7M1 = 0x00;
ACC = P_SW1;
ACC &= ~(S1_S0 | S1_S1); //S1_S0=0 S1_S1=0
P_SW1 = ACC; //(P3.0/RxD, P3.1/TxD)
// ACC = P_SW1;
// ACC &= ~(S1_S0 | S1_S1); //S1_S0=1 S1_S1=0
// ACC |= S1_S0; //(P3.6/RxD_2, P3.7/TxD_2)
// P_SW1 = ACC;
//
// ACC = P_SW1;
// ACC &= ~(S1_S0 | S1_S1); //S1_S0=0 S1_S1=1
// ACC |= S1_S1; //(P1.6/RxD_3, P1.7/TxD_3)
// P_SW1 = ACC;
#if (PARITYBIT == NONE_PARITY)
SCON = 0x50; //8位可变波特率
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
SCON = 0xda; //9位可变波特率,校验位初始为1
#elif (PARITYBIT == SPACE_PARITY)
SCON = 0xd2; //9位可变波特率,校验位初始为0
#endif
AUXR = 0x40; //定时器1为1T模式
TMOD = 0x00; //定时器1为模式0(16位自动重载)
TL1 = (65536 - (FOSC/4/BAUD)); //设置波特率重装值
TH1 = (65536 - (FOSC/4/BAUD))>>8;
TR1 = 1; //定时器1开始启动
ES = 1; //使能串口中断
EA = 1;
SendString("STC15F2K60S2\r\nUart Test !\r\n");
while(1);
}
/*----------------------------
UART 中断服务程序
-----------------------------*/
void Uart() interrupt 4 using 1
{
if (RI)
{
RI = 0; //清除RI位
P0 = SBUF; //P0显示串口数据
P22 = RB8; //P2.2显示校验位
}
if (TI)
{
TI = 0; //清除TI位
busy = 0; //清忙标志
}
}
/*----------------------------
发送串口数据
----------------------------*/
void SendData(BYTE dat)
{
while (busy); //等待前面的数据发送完成
ACC = dat; //获取校验位P (PSW.0)
if (P) //根据P来设置校验位
{
#if (PARITYBIT == ODD_PARITY)
TB8 = 0; //设置校验位为0
#elif (PARITYBIT == EVEN_PARITY)
TB8 = 1; //设置校验位为1
#endif
}
else
{
#if (PARITYBIT == ODD_PARITY)
TB8 = 1; //设置校验位为1
#elif (PARITYBIT == EVEN_PARITY)
TB8 = 0; //设置校验位为0
#endif
}
busy = 1;
SBUF = ACC; //写数据到UART数据寄存器
}
/*----------------------------
发送字符串
----------------------------*/
void SendString(char *s)
{
while (*s) //检测字符串结束标志
{
SendData(*s++); //发送当前字符
}
}
如何实现串口转CAN的通信?
电脑装的是什么上位机软件?如果支持modbus协议,,那么用一个CAN转modbus的网关就可以解决。上海泗博有这样的产品MCA-240就可以:
产品特点:
支持Modbus主站设备访问带有CAN接口的设备;
配置简单,可在短期内完成网络通信;
具有CAN帧双向缓存功能;
技术特性:
带Modbus从站接口,支持功能码:03、04、16;
串口波特率:300、600、1200、2400、9600、19.2K、38.4K、57.6K、115.2Kbps可选;防人体静电
15KV,防浪涌400W;
CAN接口支持双向数据传输,也可只用作CAN接收或发送;
支持CAN2.0A和CAN2.0B;1.5KV光电隔离;波特率支持1M、500K、250K、125K、100K、62.5K、
31.25K、20K、10Kbps;
用户不必了解CAN和Modbus技术细节,即可通过免费软件MC-123 进行配置
如果只是电脑的232串口通信,那么就用上海泗博的SCA-102就可以,:
能够实现在PC或者带有RS232/RS485接口设备之间进行数据交换和双向传
输,数据交换可以采用透明传输和透明带ID传输两种传输模式,并可以通
过软件配置CAN和RS232/RS485的参数,操作简单,使用方便
技术特性:
支持CAN2.0A和CAN2.0B两种CAN总线协议;
可以实现从RS232/RS485到CAN的透明传输和透明带ID传输两种方式;
RS232/RS485支持波特率范围:1200 ~ 115200bps;
CAN支持波特率范围:5K ~ 1000K;
可设置断帧超时时间:2 ~ 20字符时间;
串口接收缓存:4.5KB(15*300Byte);
CAN接收缓存:1.6KB (200*8Byte);
最多可设置13个CAN滤波器;
哪个型号51单片机的内置模块最全?
STC12C5A60S2/AD/PWM系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。
1.增强型8051 CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051;
2.工作电压:STC12C5A60S2系列工作电压:5.5V-3.3V(5V单片机)STC12LE5A60S2系列工作电压:3.6V-2.2V(3V单片机);
3.工作频率范围:0 - 35MHz,相当于普通8051的 0~420MHz;
4.用户应用程序空间8K /16K / 20K / 32K / 40K / 48K / 52K / 60K / 62K字节;
5.片上集成1280字节RAM;
6.通用I/O口(36/40/44个),复位后为:准双向口/弱上拉(普通8051传统I/O口),可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏,每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过120ma;
7. ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器 可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片;
8.有EEPROM功能(STC12C5A62S2/AD/PWM无内部EEPROM);
9. 看门狗;
10.内部集成MAX810专用复位电路(外部晶体12M以下时,复位脚可直接1K电阻到地);
11.外部掉电检测电路:在P4.6口有一个低压门槛比较器,5V单片机为1.32V,误差为+/-5%,3.3V单片机为1.30V,误差为+/-3%;
12.时钟源:外部高精度晶体/时钟,内部R/C振荡器(温漂为+/-5%到+/-10%以内) 1用户在下载用户程序时,可选择是使用内部R/C振荡器还是外部晶体/时钟,常温下内部R/C振荡器频率为:5.0V单片机为:11MHz~15.5MHz,3.3V单片机为:8MHz~12MHz,精度要求不高时,可选择使用内部时钟,但因为有制造误差和温漂,以实际测试为准;
13.共4个16位定时器 两个与传统8051兼容的定时器/计数器,16位定时器T0和T1,没有定时器2,但有独立波特率发生器 做串行通讯的波特率发生器 再加上2路PCA模块可再实现2个16位定时器;
14. 2个时钟输出口,可由T0的溢出在P3.4/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟;
15.外部中断I/O口7路,传统的下降沿中断或低电平触发中断,并新增支持上升沿中断的PCA模块, Power Down模式可由外部中断唤醒,INT0/P3.2,INT1/P3.3,T0/P3.4, T1/P3.5, RxD/P3.0,CCP0/P1.3(也可通过寄存器设置到P4.2 ), CCP1/P1.4 (也可通过寄存器设置到P4.3);
16. PWM(2路)/PCA(可编程计数器阵列,2路):
STC12C5A60S2管脚图
——也可用来当2路D/A使用
——也可用来再实现2个定时器
——也可用来再实现2个外部中断(上升沿中断/下降沿中断均可分别或同时支持);
17.A/D转换, 10位精度ADC,共8路,转换速度可达250K/S(每秒钟25万次)18.通用全双工异步串行口(UART),由于STC12系列是高速的8051,可再用定时器或PCA软件实现多串口;
19. STC12C5A60S2系列有双串口,后缀有S2标志的才有双串口,RxD2/P1.2(可通过寄存器设置到P4.2),TxD2/P1.3(可通过寄存器设置到P4.3);
20.工作温度范围:-40 - +85℃(工业级) / 0 - 75℃(商业级)21.封装:PDIP-40,LQFP-44,LQFP-48 I/O口不够时,可用2到3根普通I/O口线外接 74HC164/165/595(均可级联)来扩展I/O口, 还可用A/D做按键扫描来节省I/O口,或用双CPU,三线通信,还多了串口。
这个没有c8051f系列单片机模块多啊,还有比这款单片机多的么?
HART modbus profibus 这三种协议有什么区别?这几种协议都是干什么用的?
这是三种不同的通信协议。
HART是结合模拟与数据信号的混合协议来表现控制系统的信息。
通过使用HART,传统的4-20 mA(模拟)信号被用来代表过程变量或控制输出信号。次要的变量,设备状态和设备配置数据都在该4-20 mA信号上通过使用HART数据协议得以传输。
modbus和profibus 都是应用是工业现场的总线协议,主站控制系统合现场设备用的都比较多, HART在过程控制中用的比较多,比如一些流量计,变送器,传感器等,要把它们的数据采集到主控系统中就需要用的一些转换产品。
比如上位机是modbus协议的DCS或者PLC之类,就要用到HART转modbus的网关模块转换协议采集数据,上海泗博自动化有一款是可以满足这个需求的 型号是 HTM-611 ,当需要连接profibus主站的时候,就要用到另一个转换模块。
HPM-610 上海泗博HART转modbus 和 HART转profibus网关,都可以连接多个HART,将多台HART仪表的数据集中采集上传的上位机。
一、本质类别不同:
1、HART是结合模拟与数据信号的混合协议来表现控制系统的信息。通过使用HART,传统的4-20 mA(模拟)信号被用来代表过程变量或控制输出信号,HART不是真正的现场总线。
2、Modbus 是一个请求/应答协议。
3、PROFIBUS是一个用在自动化技术的现场总线标准。
二、用法不同:
1、HART次要的变量,设备状态和设备配置数据都在该4-20 mA信号上通过使用HART数据协议得以传输。
2、若上位机是modbus协议的DCS或者PLC之类,就要用到HART转modbus的网关模块转换协议采集数据。
3、modbus更多的具有开放式。
三、传输方式不同:
1、HART通信采用的是半双工的通信方式,属于模拟系统向数字系统转变过程中过渡性产品,因而在当前的过渡时期具有较强的市场竞争能力,得到了较快发展。
2、PROFIBUS依据EIA-485规范的电气传输方式会使用阻抗150欧姆的双绞线,比特率范围可以从9.6 kbit/s到12 Mbit/s。两台中继器之间的网络线长也有限制,随比特率的不同,上限从100米到1200米。这种传输方式主要配合PROFIBUS DP使用。
3、Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。
PROFIBUS是一个用在自动化技术的现场总线标准。
HART在过程控制中用的比较多,比如一些流量计,变送器,传感器等,要把它们的数据采集到主控系统中就需要用的一些转换产品。
若上位机是modbus协议的DCS或者PLC之类,就要用到HART转modbus的网关模块转换协议采集数据,上海泗博自动化有一款是可以满足这个需求的 型号是 HTM-611,当需要连接profibus主站的时候,就要用到另一个转换模块, HPM-610。
支持1个HART通道,多点模式下使用网关内置电阻支持连接13台仪表,使用外部电阻(250Ω)支持连接15台仪表。
HART侧可配置为第一主站或第二主站,支持突发模式,支持长短帧格式,支持所有HART命令,HART输入数据缓冲区达1600byte,输出数据缓冲区达1000byte,每通道最多可配置128条命令。
modbus和profibus 都是应用是工业现场的总线协议,主站控制系统合现场设备用的都比较多。
后来在1993年提出了架构较简单,速度也提升许多的PROFIBUS DP(DP代表Decentralized Peripherals)。
PROFIBUS FMS是用在PROFIBUS主站之间的非确定性通信。PROFIBUS DP主要是用在PROFIBUS主站和其远程从站之间的确定性通信,但仍允许主站及主站之间的通信。
扩展资料:
PROFIBUS的历史可追溯到1987年联邦德国开始的一个合作计划,此计划有十四家公司及五个研究机构参与,目标是要推动一种串列现场总线,可满足现场设备接口的基本需求。为了这个目的,参与的成员同意支持有关工厂生产及程序自动化的共通技术研究。
PROFIBUS中最早提出的是PROFIBUS FMS(FMS代表Field bus Message Specification),是一个复杂的通信协议,为要求严苛的通信任务所设计,适用在车间级通用性通信任务。
后来在1993年提出了架构较简单,速度也提升许多的PROFIBUS DP(DP代表Decentralized Peripherals)。PROFIBUS FMS是用在PROFIBUS主站之间的非确定性通信。PROFIBUS DP主要是用在PROFIBUS主站和其远程从站之间的确定性通信,但仍允许主站及主站之间的通信。
Modbus协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。
大多数Modbus设备通信通过串口EIA-485物理层进行。
对于串行连接,存在两个变种,它们在数值数据表示不同和协议细节上略有不同。Modbus RTU是一种紧凑的,采用二进制表示数据的方式,Modbus ASCII是一种人类可读的,冗长的表示方式。这两个变种都使用串行通信(serial communication)方式。RTU格式后续的命令/数据带有循环冗余校验的校验和,而ASCII格式采用纵向冗余校验的校验和。被配置为RTU变种的节点不会和设置为ASCII变种的节点通信,反之亦然。
对于通过TCP/IP(例如以太网)的连接,存在多个Modbus/TCP变种,这种方式不需要校验和计算。
对于所有的这三种通信协议在数据模型和功能调用上都是相同的,只有封装方式是不同的。
Modbus有一个扩展版本Modbus Plus(Modbus+或者MB+),不过此协议是Modicon专有的,和Modbus不同。它需要一个专门的协处理器来处理类似HDLC的高速令牌旋转。
它使用1Mbit/s的双绞线,并且每个节点都有转换隔离装置,是一种采用转换/边缘触发而不是电压/水平触发的装置。连接Modbus Plus到计算机需要特别的接口,通常是支持ISA(SA85),PCI或者PCMCIA总线的板卡。
HART(Highway Addressable Remote Transducer),可寻址远程传感器高速通道的开放通信协议,是美国ROSEMOUNT公司于1985年推出的一种用于现场智能仪表和控制室设备之间的通信协议。
HART装置提供具有相对低的带宽,适度响应时间的通信,经过10多年的发展,HART技术在国外已经十分成熟,并已成为全球智能仪表的工业标准。
参考资料来源:百度百科-PROFIBUS
关于波特率,用电脑串口和USB转串口(IC是CH340T)是否有区别?
1、CH340是一个USB总线的转接芯片,实现USB转串口、USB转IrDA红外或者USB转打印口。 在串口方式下,CH340提供常用的MODEM联络信号,用于为计算机扩展异步串口,或者将普通的串口设备直接升级到USB总线。有关USB转打印口的说明请参考手册( 在红外方式下,CH340外加红外收发器即可构成USB红外线适配器,实现SIR红外线通讯。
2、特点
● 全速USB设备接口,兼容USB V2.0,外围元器件只需要晶体和电容。
● 仿真标准串口,用于升级原串口外围设备,或者通过USB增加额外串口。
● 计算机端Windows操作系统下的串口应用程序完全兼容,无需修改。
● 硬件全双工串口,内置收发缓冲区,支持通讯波特率50bps~2Mbps。
● 支持常用的MODEM联络信号RTS、DTR、DCD、RI、DSR、CTS。
● 通过外加电平转换器件,提供RS232、RS485、RS422等接口。
● 支持IrDA规范SIR红外线通讯,支持波特率2400bps到115200bps。
● 软件兼容CH341,可以直接使用CH341的驱动程序。
● 支持5V电源电压和3.3V电源电压。
● 提供SSOP-20和SOP-16无铅封装,兼容RoHS。
CH340G串口模块,接在M4上,通过软件发送到串口上的数据都是乱码,请问怎么配置波特率寄存器
这个不是乱不乱码的问题,而是你发送的数据为10进制,计算机显示的只能为二进制形式或者16进制。你在上位机上选择用16进制显示,然后自己换算成十进制,这个数据就对了
转载请注明出处51数据库 » 串口软件250k STC15W4K48S4串口程序