菜鸟单片机随写(51单片机串口通信)

原创 2012年03月24日 13:35:31

USART这个东西在很多的数据手册上你都能看到,UART,SPI,IIC,USB,CAN什么乱七八糟的通信,你就知道这东西相当犀利了吧,串口通信,有数据格式,数据的传输速率,目前单片机中很多都有UART,尤其是我们大学学的51,那个实在网络上到处都泛滥了。所以我想了想我也泛滥一下,不然以后都忘了,哈哈。

51串口通信比较的简单,设置好传输模式:模式1

设置好波特率,定时器T1工作方式二的自动重载模式为uart提供时钟。

再看看中断的标志位,那么一切就OK了,额还要看看你用的时钟源频率是多少。所以当你学了UART你就会晓得为啥子单片机弄一个怪怪的11.0592M或者某些单片机是22.1184M

这个就是为了要产生准确的波特率。

还有一个重要的就是SBUF这个东西,寻址都是同一个地址,但是都是独立的单片机,也就是说,你每次用的时候写 eg:SBUF = x;这个是TX的SBUF,

x=SBUF这个就是RX的SBUF

简单吧,还有需要注意的就是注意缓冲区溢出问题。有些可以装几个字节,而且有些单片机溢出的话就死机,千万要注意,一定要仔细看数据手册上详细说明。

下面就贴一个简单的事例程序,51单片机的资源基本上就被玩完了,哈哈。

 

#include <reg52.h>
#include <stdio.h>
#define  OSC 	12

typedef unsigned int uint16;
typedef unsigned char uint8;
void uart_init(void);

void main(void)
{
	  uart_init();
	  printf("*******************Welcome to MCU world !******************\n");
	  printf("####let's begin!\n");
	  while(1)
	  {
	  	  printf(">");
		  if(getchar() == 'c')
		  {
		  	  puts("");
			  printf("yeah !You input a char !\n");
			  printf(__TIME__);
		  }
	      puts("");
	  }
	  
}

void uart_init()
{
	SCON = 0x50;
	TMOD |=0x20;
	#if (OSC == 12)
	TH1 = 0XFD;
	TL1 = 0xFD;
	#endif
	EA = 1,ES = 1,TR1 = 1;
	TI = 1;//要用stdio 库中的函数必须设置为TI=1
}


#include <reg51.h>
#include <stdio.h>
typedef unsigned int uint16_t;
typedef unsigned char uint8_t;
#define OSC ((unsigned long)11.0592e6)
#define Baud 9600

void UartInit(void);

void main(void)
{
	UartInit();
	printf("Uart");
	while(1);	
}

void UartInit(void)
{
	SCON = 0x50;
	TMOD = 0x20;
	TH1 = TL1 = 256-(unsigned int)(OSC/12/32/Baud);
	TR1 = 1;
	TI = 1; // printf 首先判断就是TI 是不是为一 不然就一直卡在那里 如果是先送数据到SBUF就不会出错。
}




反汇编 已经看出来  是while(!TI);TI=0;SBUG = var; 先判断然后清除标志位,然后再往BUFFER里送数据。TI是串口的标志位 是标志SBUF发完没有,如果串口中的数据没有发送完TI就不会硬件置位,所以 一般写轮询串口的时候都必须等待标志位 然后清除送数据!

 

【51单片机】(手把手教你)串口通信-基础篇

通信方式 并行 适合短距离通信,并行通信控制简单、相对传输速度快(8位一起传输)。 串行 只能一位一位的传送。 同步(了解) 建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。此时...
  • wait_for_taht_day5
  • wait_for_taht_day5
  • 2016年01月23日 01:11
  • 24569

51 单片机UART 串口通信[ 方式1 ]实现

1  51串行口结构 51单片机的UART串行通信是基于其串行口的可编程硬件结构,只要用正确的程序代码通过初始化串行口对应寄存器的形式将其串行硬件结构初始化,再编写符合此串行口通信的程序代码便能够实...
  • misskissC
  • misskissC
  • 2013年08月28日 11:13
  • 20795

深入理解51单片机串口通信

串口通信的基本认识 通信分为并行通信和串行通信,并行通信时的数据各个位同时传送,可以实现字节为单位通信,但通信线多占用资源,成本高。以前用到的的P1=0x55,一次给P1口的8个管脚分别赋值,同时进行...
  • cmh477660693
  • cmh477660693
  • 2016年04月10日 12:44
  • 7482

C#与51单片机串口通信

C#与51单片机串口通信 51接受数据,PC发送数据。 通过单片机的数码管将PC发送的16进制数据显示出来。 51接受数据代码: #include    #include     ...
  • opshres169
  • opshres169
  • 2016年06月24日 23:40
  • 1085

双机(51单片机)串行通信最基本的方法

有网友求助双机串行通信的方法,做而论道以前曾经发表过这方面的博文,但是当时没有配发电路图,不太好理解和仿制。做而论道过去一直使用硬件的仿真器,在最近,把 PROTEUS 软件逐渐的熟悉起来了,用这个“...
  • baidu_33836580
  • baidu_33836580
  • 2016年01月25日 11:39
  • 1801

51单片机串口2的RS485通信调试总结

过完年,一到公司主管就催我赶紧把这个项目的PC和单片机的RS485通信给调通。这几天,一直在实验室度过的。开始我从单片机简单发送一串数据,用串口调试助手测试。上位机根本没有接收到数据,用示波器测了发送...
  • king110108
  • king110108
  • 2016年02月25日 14:29
  • 2691

菜鸟学51单片机之----在笔记本上模拟PC和51串口通信1

说明: 单片机系列文章为我们团队其他成员的文章,原发表于与非网,先整理项目文章集中于此 原地址:http://www.eefocus.com/bbs/article_1156_541662.htm...
  • GeekLei
  • GeekLei
  • 2014年08月29日 19:11
  • 2674

51单片机学习笔记【六】——串口通信实验

一.串口通信基础1.串行通信 串行通信将数据字节分成一位一位的形式在一条传输线上逐个传送。单片机采用串行通信。特点是:传输线少,长距离传送成本低,但数据传送控制复杂。 串行通信的传输的传输方向:单工(...
  • qq_22512533
  • qq_22512533
  • 2015年07月22日 01:06
  • 2325

单片机串口通信实例

上讲介绍并应用了单片机内部定时器和中断,并给出了实例。这一讲将介绍单片机上的串口通信。通过该讲,读者可以掌握单片机上串口的工作原理和如何通过程序来对串口进行设置,并根据所给出的实例实现与PC 机通信。...
  • opshres169
  • opshres169
  • 2016年06月24日 23:53
  • 1355

51单片机串口通信的发送与接收(转)

51单片机的串口,是个全双工的串口,发送数据的同时,还可以接收数据。 当串行发送完毕后,将在标志位 TI 置 1,同样,当收到了数据后,也会在 RI 置 1。 无论 RI 或 TI 出现了 1,只...
  • opshres169
  • opshres169
  • 2016年06月28日 17:24
  • 971
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:菜鸟单片机随写(51单片机串口通信)
举报原因:
原因补充:

(最多只允许输入30个字)