Ⅰ 单片机的串口接收端为什么加上一个二极管,而且还是反向的,如下图
RX应该接有上拉。 只要RO为低,由于拉电流,RX一样会被拉低;RO为高时,RO电平应该比RX高,二极管截止,RX也为高。
这样目的应该是为了将485与单片机简单隔离,其实这样也不怎么安全,产品上我们一般会用光耦来隔离而不是用二极管。
Ⅱ STC单片机串口线的原理图
STC单片机的数据说明书里有原理图。去宏晶公司的主页上找就有了
Ⅲ 单片机的串行口怎么接
这个接法没问题,是TXD和Tin相连,单片机的TXD是发送数据(从单片机发往计算机),MAX232的Tin是发送数据输入。
Rout和Rxd相连,是MAX232的Rout接收数据输出(从计算机发往单片机),Rxd是单片机的接受数据输入。如果是两个单片机之间通讯的话就是TXD->RXD;RXD->TXD.
Ⅳ 单片机,什么是串行口,什么是并行口
两种接口都是用来传送二进制数据的接口形式。
串行接口,一般有一根时钟线,一根数据线,一个时钟周期传送二进制1位,要传送一个字节至少需要8个时钟周期,串行线根数少,远程传输抗干扰能力强,成本低。
并行接口,比如8位并行接口,除具备时钟线外,还有8根数据线,另外还有几根辅助信号线,一个时钟8位数据全部可传送完毕,并行线根数多,电缆成本高、容易受干扰因而距离受限(电缆长度受限)。
单片机的硬件特性:
1、主流单片机包括CPU、4KB容量的RAM、128 KB容量的ROM、 2个16位定时/计数器、4个8位并行口、全双工串口行口、ADC/DAC、SPI、I2C、ISP、IAP。
2、系统结构简单,使用方便,实现模块化。
3、单片机可靠性高,可工作到10^6 ~10^7小时无故障。
4、处理功能强,速度快。
5、低电压,低功耗,便于生产便携式产品。
6、控制功能强。
7、环境适应能力强。
Ⅳ 51单片机和计算机之间实现串口通信的电路图
串口通讯参考程序如下:
来源:深入浅出AVR单片机
#include<reg51.h>
unsignedcharUART_RX;//定义串口接收数据变量
unsignedcharRX_flag;//定义穿行接收标记
/*********************************************************************************************
函数名:UART串口初始化函数
调用:UART_init();
参数:无
返回值:无
结果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)
备注:振荡晶体为12MHz,PC串口端设置[4800,8,无,1,无]
/**********************************************************************************************/
voidUART_init(void){
EA=1;//允许总中断(如不使用中断,可用//屏蔽)
ES=1;//允许UART串口的中断
TMOD=0x20;//定时器T/C1工作方式2
SCON=0x50;//串口工作方式1,允许串口接收(SCON=0x40时禁止串口接收)
TH1=0xF3;//定时器初值高8位设置
TL1=0xF3;//定时器初值低8位设置
PCON=0x80;//波特率倍频(屏蔽本句波特率为2400)
TR1=1;//定时器启动
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:UART串口接收中断处理函数
调用:[SBUF收到数据后中断处理]
参数:无
返回值:无
结果:UART串口接收到数据时产生中断,用户对数据进行处理(并发送回去)
备注:过长的处理程序会影响后面数据的接收
/**********************************************************************************************/
voidUART_R(void)interrupt4using1{//切换寄存器组到1
RI=0;//令接收中断标志位为0(软件清零)
UART_RX=SBUF;//将接收到的数据送入变量UART_data
RX_flag=1;//标记接收
//用户函数内容(用户可使用UART_data做数据处理)
//SBUF=UART_data;//将接收的数据发送回去(删除//即生效)
//while(TI==0);//检查发送中断标志位
//TI=0;//令发送中断标志位为0(软件清零)
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:UART串口发送函数
调用:UART_T(?);
参数:需要UART串口发送的数据(8位/1字节)
返回值:无
结果:将参数中的数据发送给UART串口,确认发送完成后退出,采用非中断方式
备注:
/**********************************************************************************************/
voidUART_T(unsignedcharUART_data){//定义串口发送数据变量
ES=0;//禁止穿行中断
SBUF=UART_data;//将接收的数据发送回去
while(TI==0);//检查发送中断标志位
TI=0;//令发送中断标志位为0(软件清零)
ES=1;//打开穿行中断
}
/*********************************************************************************************
函数名:UART串口发送字符串函数
调用:UART_S(?);
参数:需要UART串口发送的数据(8位/1字节)
返回值:无
结果:将参数中的数据发送给UART串口,确认发送完成后退出,采用非中断方式
备注:
/**********************************************************************************************/
voidUART_S(unsignedchar*str)
{
while(1)
{
if(*str=='