精华内容
下载资源
问答
  • 单片机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电平逻辑刚.

    首先来说串口通讯协议,串口通讯协议包括物理部分与协议部分嘛,物理部分既硬件部分,协议部分既软件部分。形象店来说就是物理层决定人们用嘴巴还是肢体交流,协议层决定人们用英语还是汉语交流。

    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电平,电脑串口输出的是RS232电平,需要芯片转换。 (一)、TTL电平标准 输出 L: &lt;0.8V ; H:&gt;2.4V。 输入 L: &lt;1.2V ; H:&gt;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面积大,不美观

     

    展开全文
  • 2.单片机串口通信的TTL电平:输出高电平>2.4V,输出低电平<0.4V。在室温下,一般输出高电平是3.5V,输出低电平 是0.2V。最小输入高电平和低电平:输入高电平>=2.0V,输入低电平<=0.8V,噪声容限是0.4V。...
  • TTL转RS232电平转换电路及工作原理

    千次阅读 2020-02-25 10:00:05
    TTL转RS232电平转换电路及工作原理 1、先介绍电脑上与单片机进行通讯的接口的名称 (1)一般是用电脑串口来进行通讯的,平常大家说的电脑的串口是指台式电脑主机后面的九针接口,如下图 这个接口有个专业的名称,叫...
  • 从电源、单片机、晶体管、驱动电路、显示电路、有线通讯、无线通信、传感器、原理图设计、PCB设计、软件设计、上位机等,给新手综合学习的平台,给老司机交流的平台。所有文章来源于项目实战,属于原创。 一、电平...
  • 常见的电平特性有rs232,rs485,TTL电平特性等。 常见的通讯协议有usb总线协议,串口协议,can,spi,tcp,udp等。 特别说明的是usb是一种协议,不是单纯的硬件接口,所以在pc和单片机通讯时,pc端是usb协议,单片机...
  • labview和单片机通讯协议是RS-232协议,但51开发板内部有MAX232芯片,MAX232芯片的作用是将单片机输出的TTL电平转换成PC机能接收的232电平或将PC机输出的232电平转换成单片机能接收的TTL电平。所以只需要一...
  • 逻辑电路中电平匹配是指逻辑电路前后两级输入输出的电平...TTL电平一般为单片机I/O口直接输入输出,分3.3V和5V两种电平,CMOS电平一般为12V供电,产生+15V到-15V的逻辑电压,若想 TTL 和 CMOS 之间通讯,必须增加...
  • 简叙单片机通讯

    2020-03-08 22:32:52
    USART,RS232,RS485,IIC,SPI基本概念:串口、COM口是指的物理接口形式(硬件)。而TTL、RS-232、RS-485是指的电平标准(电信号)TTL:TTL电平信号之所以被...
  • 逻辑电路中电平匹配是指逻辑电路前后两级输入输出的电平相同...TTL电平一般为单片机I/O口直接输入输出,分3.3V和5V两种电平,CMOS电平一般为12V供电,产生+15V到-15V的逻辑电压,若想 TTL 和 CMOS 之间通讯,必须增...
  • 51单片机双机通讯 UART异步通讯 带详细注释版 ...发送方的数据由串行口TXD段输出,经过电平转换芯片MAX232将TTL电平转换为RS232电平输出,经过传输线将信号传送到接收端。接收方也使用MAX232芯片进行电平...
  • max232管脚讲解 单片机与PC通讯

    千次阅读 2011-12-22 08:57:01
    在接口电路和计算机接口芯片中大都为TTL或CMOS电平,所以在通信时,必须进行电平转换,以便与RS-232C标准的电平匹配 MAX232芯片可以完成电平转换这一工作。 2.7.1 MAX232芯片简介 MAX23
  • 进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用...
  • 1.先介绍电脑上与单片机进行通讯的接口的名称 (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 两...
  • TTL、RS-232、RS-485是指电平标准(电信号)。 串口:串口是一个泛称,UART,TTL,RS232,RS485都遵循类似的通信时序协议,因此都被通称为串口。 UART接口:又叫通用异步收发器,UART是串口收发的逻辑电路,这部分...
  • 本课程:定义单片机TTL电平: 高+5V 低0V RS232电平:计算机的串口 高-12V 低12V 所以计算机与单片机之间通讯时需要加电平转换芯片max232 2.二进制 2.1为什么二进制? 数字电路中的两种电平特性决定它使用二...

空空如也

空空如也

1 2 3 4
收藏数 71
精华内容 28
关键字:

单片机ttl电平通讯