-
单片机TTL电平软件模拟串口通讯
2021-01-29 10:39:47单片机TTL电平软件模拟串口通讯 利用单片机TTL电平模拟串口通信收发数据,字符串,模拟波特率9600模拟成功稳定有效,19200波特率不稳定,更高波特率模拟失败;以下为模拟9600波特率程序 定时器0定时100us模拟9600...单片机TTL电平软件模拟串口通讯
利用单片机TTL电平模拟串口通信收发数据,字符串,模拟波特率9600模拟成功稳定有效,19200波特率不稳定,更高波特率模拟失败;以下为模拟9600波特率程序
定时器0定时100us模拟9600波特率;定时器1定时1ms用于接收判断,收到第一个数据后定时器1开始累加,10ms后接收完毕处理接收数据,10ms一次性可接收10个字符左右,若需要一次性接收更多字符,累加设置长一点即可
程序实现了自发自收,单片机收到数据后再原样发出来
#include <STC12C5A60S2.H> #include <intrins.h> /*-------------------------------------------------------------------------------------------- 函数定义 -----------------------------------------------------------------------------------------------*/ void delayms(unsigned int time); void uart_initialize(); void SimulateSendData(char dat); void SimulateStringSendData(char *s); void SimulateReceiveData(); /*-------------------------------------------------------------------------------------------- 位定义 -----------------------------------------------------------------------------------------------*/ sbit send=P2^0; //发送引脚 sbit receive=P2^1; //接收引脚 bit simulate_flag,over_flag; /*-------------------------------------------------------------------------------------------- 变量定义 -----------------------------------------------------------------------------------------------*/ int i; char rec=0; int number=0; //接收数组下标 char receivestring[50]="\0"; //接收数组 int over_count; /*-------------------------------------------------------------------------------------------- 主函数 -----------------------------------------------------------------------------------------------*/ void main() { uart_initialize(); while(1) { SimulateReceiveData(); //接收数据 if(over_flag) //接收完成 { receivestring[number]='\0'; SimulateStringSendData(receivestring); rec=0; number=0; receivestring[0]='\0'; over_flag=0; } } } /*-------------------------------------------------------------------------------------------- 接收函数 -----------------------------------------------------------------------------------------------*/ void SimulateReceiveData() { if(!receive) { simulate_flag=1; TR0=1; while(simulate_flag); simulate_flag=1; while(simulate_flag); for(i=0;i<8;i++) { if(receive) {rec=rec | 0x80;} else {rec=rec & 0x7f;} if(i<7) {rec=rec>>1;} simulate_flag=1; while(simulate_flag); } receivestring[number++]=rec; TR0=0; } } /*-------------------------------------------------------------------------------------------- 发送字符串 -----------------------------------------------------------------------------------------------*/ void SimulateStringSendData(char *s) { while(*s!='\0') { SimulateSendData(*s); s++; } } /*-------------------------------------------------------------------------------------------- 发送单字节 -----------------------------------------------------------------------------------------------*/ void SimulateSendData(char dat) { send=0; simulate_flag=1; TR0=1; while(simulate_flag); for(i=0;i<8;i++) { send=dat & 0x01; simulate_flag=1; dat=dat>>1; while(simulate_flag); } send=1; simulate_flag=1; while(simulate_flag); TR0=0; } /*-------------------------------------------------------------------------------------------- 定时器初始化 -----------------------------------------------------------------------------------------------*/ void uart_initialize() { AUXR |= 0xC0; //定时器0,1为1T模式 TMOD = 0x11; TL1 = 0xCD; //定时器1定时1ms TH1 = 0xD4; ET1 = 1; TR1 = 1; TL0 = 0xAE; //定时器0定时100us,模拟9600波特率 TH0 = 0xFB; TR0 = 0; ET0 = 1; PT0 = 1; EA = 1; } /*-------------------------------------------------------------------------------------------- 延时函数,毫秒单位 -----------------------------------------------------------------------------------------------*/ void delayms(unsigned int time) { unsigned char i, j; while(time--) { i = 9; j = 143; do { while (--j); } while (--i); } } /*-------------------------------------------------------------------------------------------- 定时器0中断 -----------------------------------------------------------------------------------------------*/ void timer_to() interrupt 1 { TL0 = 0XAE; TH0 = 0xFB; if(simulate_flag) simulate_flag=0; } /*-------------------------------------------------------------------------------------------- 定时器1中断 -----------------------------------------------------------------------------------------------*/ void timer_t1() interrupt 3 { TL1 = 0xCD; TH1 = 0xD4; if(receivestring[0]!='\0' & !over_flag) { over_count++; if(over_count==10) { over_flag=1; over_count=0; } } }
-
教训-单片机TTL串口电平不稳定
2017-04-12 15:43:40目前的一个项目中,需要使用单片机的串口通讯,由于外部设备的串口电平为TTL电平,故在应用中,将单片机的串口IO与外部设备上直接相连的。 但是在后来的调试中,暂时不需要连接外部设备,发现单片机总是会莫名的...目前的一个项目中,需要使用单片机的串口通讯,由于外部设备的串口电平为TTL电平,故在应用中,将单片机的串口IO与外部设备上直接相连的。
但是在后来的调试中,暂时不需要连接外部设备,发现单片机总是会莫名的进入串口中断,仔细检查后才发现单片机的串口IO直接从单片机中引出来,由于没有接设备,连接线直接悬空,也没有进行任何上拉或下拉的处理,从而导致电平信号不稳定,频繁进入中断。
-
什么是RS232电平?什么是TTL电平?
2020-06-23 18:34:48首先来说串口通讯协议,串口通讯协议包括物理部分与协议部分嘛,物理部分既硬件部分,协议部分既软件部分。形象店来说就是物理层决定人们用嘴巴还是肢体交流,协议层决定...由上图可以看出RS232电平与TTL电平逻辑刚.首先来说串口通讯协议,串口通讯协议包括物理部分与协议部分嘛,物理部分既硬件部分,协议部分既软件部分。形象店来说就是物理层决定人们用嘴巴还是肢体交流,协议层决定人们用英语还是汉语交流。
RS323是一种通讯标准,因为高电平+15V低电平--15V电位差30V容错空间大,抗干扰能力强,一般用于工业设备直接通信电平转换芯片一般有MAX3232,SP3232
TTL一般是从单片机或者芯片中发出的电平,高电平为5V(51单片机)或者3.3V(stm32)
由上图可以看出RS232电平与TTL电平逻辑刚好相反。TTL1为高电平,0为低电平.RS232相反。
下面介绍三种通讯方式
1 两设备通过232标准通讯
控制器发出的是TTL电平,经过电平转换芯片转换成232电平. 其中DB9是一种通讯线如图。其中有用的是RXD,TXD。
USB转串口与电脑进行通讯
电平转换芯片一般用CH340,同时电脑还需要安装CH340驱动
TTL电平之间的直接通讯
原生的串口通信主要是控制器跟串口的设备或者传感器通信,不需要经过电平转换芯片来转换电平,直接就用TTL电平通信。例如GPS模块、GSM模块、串口转WIFI模块、HC04蓝牙模块等与控制器之间的通讯。
作者:sdkj_ck2_qys
链接:https://www.jianshu.com/p/a942e8090e01
来源:简书 -
TTL、CMOS、RS232、RS485、RS422、CAN、USB电平说明 与通讯芯片
2018-11-06 17:09:08单片机串口输出的是TTL电平,电脑串口输出的是RS232电平,需要芯片转换。 (一)、TTL电平标准 输出 L: <0.8V ; H:>2.4V。 输入 L: <1.2V ; H:>2.0V TTL器件输出低电平要小于...单片机串口输出的TXD、RXD引脚是TTL电平,电脑串口输出的是RS232电平,需要芯片转换成TTL电平,只有这样给单片机下载程序才有可能成功。
(一)、TTL电平标准(Transistor-Transistor Logic,晶体管-晶体管逻辑电平)
输出 L: <0.8V ; H:>2.4V。
输入 L: <1.2V ; H:>2.0V
TTL器件输出低电平要小于0.8V,高电平要大于2.4V。输入,低于1.2V就认为是0,高于2.0就认为是1。于是TTL电平的输入低电平的噪声容限就只有(0.8-0)/2=0.4V,高电平的噪声容限为(5-2.4)/2=1.3V。电流控制器件。
(二)、CMOS电平标准(Complementary metal-oxide-semiconductor,互补金属氧化物半导体)
输出 L: <0.1*Vcc ; H:>0.9*Vcc。
输入 L: <0.3*Vcc ; H:>0.7*Vcc.
由于CMOS电源采用12V,则输入低于3.6V为低电平,噪声容限为1.8V,高于3.5V为高电平,噪声容限高为1.8V。比TTL有更高的噪声容限。 电压控制器件。TTL与CMOS电平使用起来有什么区别:
1,电平的上限和下限定义不一样,CMOS具有更大的抗噪区域,即有着更高的噪声容限。
2,电流驱动能力不一样,TTL一般提供25毫安的驱动能力,而CMOS一般在10毫安左右。
3,需要的电流输入大小也不一样,一般TTL需要2.5毫安左右,CMOS几乎不需要电流输入。
4,很多器件都是兼容TTL和CMOS的,datasheet会有说明。如果不考虑速度和性能,一般器件可以互换。但是需要注意有时候负载效应可能引起电路工作不正常,因为有些TTL电路需要下一级的输入阻抗作为负载才能正常工作。
5,CMOS电平能驱动TTL电平,TTL电平不能驱动CMOS电平,需加上拉电阻。常用逻辑芯片特点:
74LS系列: TTL 输入: TTL 输出: TTL
74HC系列: CMOS 输入: CMOS 输出: CMOS
74HCT系列: CMOS 输入: TTL 输出: CMOS
CD4000系列:CMOS 输入: CMOS 输出: CMOS
(三)、RS232电平标准:
注意电平的定义反相了一次。电平为逻辑“0”时:+3V~+15V;
电平为逻辑“1”时:-3V~-15V;发送端驱动器输出: 正电平在 +5~+15V,负电平在-5~-15V 电平。
接收器典型的:工作电平在 +3~+12V 与 -3~-12V。
由于发送电平与接收电平的差仅为2V至3V 左右,所以其共模抑制能力差,再加上双绞线上的分布电容,其传送距离最大为约15
米,最高速率为20kb/s。当无数据传输时,线上为TTL,从开始传送数据到结束,线上电平从TTL 电平到RS-232 电平再返回TTL 电平。RS232电平或者说串口电平指的都是计算机9针串口的电平。
(四)、RS485 和 RS422 电平标准:
由于两者都采用差分传输(平行传输)的方式,所以他们的电平方式,一般都有两个A,B引脚。
发送端:A,B间的电势差U为: UB-UA: +2 ~ +6V : 为1 -2 ~-6:为0
接收端:A,B间的电势差U为:UB-UA: > +200mV : 为1 < -200mV: 为0
(五)、CAN电平标准:
CAN网络使用符合ISO11898-2标准的电平信号(差分信号),他们的电平方式,一般都有两个 CANH 和 CANL 引脚。
CAN总线为“隐性”(逻辑 1 )时:CAN_H和CAN_L的电平为2.5V(电位差为0V);
CAN总线为“显性”(逻辑 0 )时:CAN_H和CAN_L的电平分别是3.5V和1.5V(电位差为 2.5V)。
(六)、USB电平标准:
电源线是5V,为USB设备提供最大500mA的电流,它与数据线上的电平无关。
数据线是差分信号,通常D+和D-在 -400mV ~ +400mV间变化。
输出电压为正:1 输出电压为负:0 输出电压0:无意义
(七)、LVDS电平标准:(Low Voltage Differential Signal,低压差分信号)
可以达到600M以上,PCB要求较高,差分线要求严格等长,差最好不超过10mil(0.254).100Ω电阻离接收端不能超过500mil,最好控制在300mil以内。
(八)、Vby1电平标准:
计算机和MCU通信的方法:
(1) 电脑串口接口(DB9) >>> 交叉串口线(对应的RX和TX交叉接) >>> MAX232芯片(RS232--TTL) >>> MCU(单片机)(TTL)
(2) 电脑USB接口 (USB) >>> USB转串口线(USB--RS232)>>>MAX232芯片(RS232--TTL)>>>MCU(单片机)(TTL)
(3) 电脑USB接口(USB) >>> PL2303或CH340或FT232RL(USB--TTL,里面的RX和TX连接交叉)>>>MCU(单片机)(TTL)
信号分析:
电脑串口接口>>>电脑输出232电平信号>>>MAX232芯片>>>TTL电平
电脑USB接口>>>电脑输出USB电平信号>>>USB转串口线>>>232电平信号>>>MAX232芯片>>>TTL电平
电脑USB接口>>>电脑输出USB电平信号>>>PL2303或CH340芯片>>>TTL电平USB转TTL芯片:
FT232RL:USB转TTL
CP2102 :USB转TTL
PL2303 :水货多不稳定,外围电路复杂,成本低。Prolific 公司生产的一种高度集成的RS232-USB接口转换器,可提供一个RS232 全双工异步串行通信装置与USB 功能接口便利连接的解决方案。
CH340 :稳定,外围电路简单,成本相对高,支持常用的MODEM 联络信号RTS、DTR、DCD、RI、DSR、CTS。通过外加电平转换器件,提供RS232、RS485、RS422 等接口。软件兼容CH341,可以直接使用CH341的驱动程序。支持5V 电源电压和3.3V电源电压甚至3V 电源电压
CH341 :USB转TTL
RS232转TTL芯片:
MAX232:外围电路简单,但是占用pcb面积大,不美观
-
用分立元件实现串口通讯TTL/RS232电平转换
2015-11-05 11:33:002.单片机串口通信的TTL电平:输出高电平>2.4V,输出低电平<0.4V。在室温下,一般输出高电平是3.5V,输出低电平 是0.2V。最小输入高电平和低电平:输入高电平>=2.0V,输入低电平<=0.8V,噪声容限是0.4V。... -
TTL转RS232电平转换电路及工作原理
2020-02-25 10:00:05TTL转RS232电平转换电路及工作原理 1、先介绍电脑上与单片机进行通讯的接口的名称 (1)一般是用电脑串口来进行通讯的,平常大家说的电脑的串口是指台式电脑主机后面的九针接口,如下图 这个接口有个专业的名称,叫... -
基础篇 -- TTL与CMOS电平
2020-02-11 14:45:46从电源、单片机、晶体管、驱动电路、显示电路、有线通讯、无线通信、传感器、原理图设计、PCB设计、软件设计、上位机等,给新手综合学习的平台,给老司机交流的平台。所有文章来源于项目实战,属于原创。 一、电平... -
## 关于各类接口,电平特性,通讯协议的一些看法
2020-06-27 20:30:31常见的电平特性有rs232,rs485,TTL电平特性等。 常见的通讯协议有usb总线协议,串口协议,can,spi,tcp,udp等。 特别说明的是usb是一种协议,不是单纯的硬件接口,所以在pc和单片机通讯时,pc端是usb协议,单片机... -
手记----labview和单片机串口通讯部分
2020-03-24 10:58:56labview和单片机的通讯协议是RS-232协议,但51开发板内部有MAX232芯片,MAX232芯片的作用是将单片机输出的TTL电平转换成PC机能接收的232电平或将PC机输出的232电平转换成单片机能接收的TTL电平。所以只需要一... -
电平转换芯片_飞凌干货丨芯片在不同电平电路中的应用
2020-12-14 09:36:29逻辑电路中电平匹配是指逻辑电路前后两级输入输出的电平...TTL电平一般为单片机I/O口直接输入输出,分3.3V和5V两种电平,CMOS电平一般为12V供电,产生+15V到-15V的逻辑电压,若想 TTL 和 CMOS 之间通讯,必须增加... -
简叙单片机通讯
2020-03-08 22:32:52USART,RS232,RS485,IIC,SPI基本概念:串口、COM口是指的物理接口形式(硬件)。而TTL、RS-232、RS-485是指的电平标准(电信号)TTL:TTL电平信号之所以被... -
芯片在不同电平电路中的应用
2019-07-31 15:08:00逻辑电路中电平匹配是指逻辑电路前后两级输入输出的电平相同...TTL电平一般为单片机I/O口直接输入输出,分3.3V和5V两种电平,CMOS电平一般为12V供电,产生+15V到-15V的逻辑电压,若想 TTL 和 CMOS 之间通讯,必须增... -
单片机双机通讯 非常详细的UART串口异步通讯 C源代码 仿真源码
2020-02-15 17:10:3951单片机双机通讯 UART异步通讯 带详细注释版 ...发送方的数据由串行口TXD段输出,经过电平转换芯片MAX232将TTL电平转换为RS232电平输出,经过传输线将信号传送到接收端。接收方也使用MAX232芯片进行电平... -
max232管脚讲解 单片机与PC通讯
2011-12-22 08:57:01在接口电路和计算机接口芯片中大都为TTL或CMOS电平,所以在通信时,必须进行电平转换,以便与RS-232C标准的电平匹配 MAX232芯片可以完成电平转换这一工作。 2.7.1 MAX232芯片简介 MAX23 -
单片机与DSP中的单片机和PC机串口通讯试验
2020-12-13 16:57:42进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用... -
单片机(TTL)与电脑RS232接口
2014-03-08 18:10:001.先介绍电脑上与单片机进行通讯的接口的名称 (1)一般是用电脑串口来进行通讯的,平常大家说的电脑的串口是指台式电脑主机后面的九针接口,如下图 这个接口有个专业的名称,叫RS23接口,而RS232接口是串口通讯... -
单片机和PC机串口通讯试验
2008-01-17 15:59:00进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转 -
51单片机入门了解
2017-05-05 21:25:36高和低(本课程中)定义单片机为TTL电平:高+5V、低0V。 RS232电平:计算机的串口,高-12V、低+12V。 所以单片机与计算机之间进行通讯时需要加电平转换芯片max232。(2)单片机的进制单片机的内部进制:二进制 ... -
STM32_USART 串口通讯详解
2019-01-04 21:52:01对51单片机有了解的都知道51单片机的串口通讯工作原理,我们单片机使用的电平TTL电平,为了使我们的的单片机与PC进行通信,就需要一个电平转换芯片,把TTL电平转换为USB电平(使用的USB接口,如果使用的DB9接口,... -
51单片机的自学笔记
2020-07-14 21:21:14电子电路基础 ...所以计算机与单片机之间通讯时需要加电 平转换芯片max232(实验板上左下角)。 TTL电平信号被利用的最多。且数据采用二进制, 5v=逻辑“1” 0v=逻辑“0” 2.I/O口* 即input口和out -
单片机初步学习
2018-04-28 14:28:00单片机为TTL电平: 高 +5V 低 0V 计算机串口 高 -12V 低 +12V (计算机与单片机之间通讯要电平转换芯片 max232) B:表示二进制 (0001B) H:表示十六进制(1H) ^:“异或”运算:相同就为 0 ,不同就为 1 ... -
单片机预备知识
2020-01-11 23:45:00单片机为TTL电平:高 +5V 低 0V RS232电平为计算机的串口 高 -12V 低 +12V 注意:所以计算机与单片机之间通讯是需要加电平转换芯片max232。 二进制数的逻辑运算 与运算 符号:" · " 例子:0·0=0, 0·1=1·0=0, 1... -
【通讯】MAX232和PL2303、CH340的区别
2018-05-21 19:31:01单片机的TXD、RXD是TTL电平,所以你得万变不离其宗的将其它信号转成TTL电平,只有这样给单片机下载程序才有可能成功!其中CH340、PL2303等芯片是直接将USB信号转换为TTL电平或者TTL电平转换为USB信号,而MAX232等... -
单片机学习
2019-11-13 18:44:35定义单片机为TTL电平:高+5V 低:0V 定义计算机串口RS232电平:高:-12V 低+12V 所以计算机与单片机之间通讯需要加电平转换芯片max232(试验班上左下角)。 STC89c52中的2*4=8k的意思就是指内部存储空间是8k 两... -
cc2530串口通讯-收发字符串_一文教你分清楚串口与电平标准
2020-12-28 02:11:54而TTL、RS-232、RS-485是指电平标准(电信号)。 串口:串口是一个泛称,UART,TTL,RS232,RS485都遵循类似的通信时序协议,因此都被通称为串口。 UART接口:又叫通用异步收发器,UART是串口收发的逻辑电路,这部分... -
51学习第一天--单片机预备知识
2020-03-29 10:20:13本课程:定义单片机为TTL电平: 高+5V 低0V RS232电平:计算机的串口 高-12V 低12V 所以计算机与单片机之间通讯时需要加电平转换芯片max232 2.二进制 2.1为什么二进制? 数字电路中的两种电平特性决定它使用二...
-
【区块链基础】1——密码学
-
色散管理孤子传输特性分析
-
Sublime Text3常用快捷键
-
敏捷项目管理
-
鸿蒙系统Harmonyos源码架构分析-第1期第2课
-
Mysql数据库面试直通车
-
华为1+X认证——网络系统建设与运维(初级)
-
MHA 高可用 MySQL 架构与 Altas 读写分离
-
SecureCRT 连接 GNS3/Linux 的安全精密工具
-
在线拍卖系统后台,主界面&布局,逻辑
-
【MyBatis】架构分层及主要对象
-
MySQL Router 实现高可用、负载均衡、读写分离
-
Unix系统编程总结_wjh_qv911823
-
access应用的3个开发实例
-
【Python-随到随学】FLask第二周
-
高中地理湘教版必修一锋和天气.docx
-
【布道者】Linux极速入门
-
ipv6有状态获取地址及其他参数小实验
-
Linked Stack in Python
-
Java NIO之通道Channel详解