电工基础

电工基础知识_电工技术-电工最常见电路

单片机C语言之串口通信协议(5)

时间:2024-04-10 11:57来源:[db:来源] 作者:admin 点击:
} void Send_Byte(u8 dat) { SBUF=dat; //启动发送,只需要把发送内容给SBUF这个寄存器 while(TI==0); //等待发送完成,因为TI为1时表示在发送停止位 TI=0; } void m

  }

  void Send_Byte(u8 dat)

  {

  SBUF=dat; //启动发送,只需要把发送内容给SBUF这个寄存器

  while(TI==0); //等待发送完成,因为TI为1时表示在发送停止位

  TI=0;

  }

  void main()

  {

  Uart_Init();

  while(1)

  {

  Send_Byte(‘m’);

  delay(60000);

  }

  }

  实验二较之实验一,代码减少了很多,而且不用考虑繁琐的位发送时序。只需要明白各个寄存器SCON,TMOD,TCON,SBUF的用法。TI是SCON中的第一位,为发送中断请求标志位。在本方式中,在停止位开始发送时由内部硬件置位,响应中断后TI必须又软件清零。

  实验三、片上串口发送一个字符串

  上面介绍了如何发送一个字节,那如何发送一个字符串甚至文本呢?这里我们首先介绍下字符串的概念。

  字符串:从存储器的某个地址开始,连续存放多个字符的ASCII码,并且在最后一个字符的后面存放一个0,这段连续的内存空间就叫字符串,最后的0叫字符串的结束符。注意这里的0和加单引号的0不是一个概念,加单引号的0是指0的ASCII码。

  数组与字符串的关系:字符串是数组的一种特殊情况,数组在特定条件下可当做字符串用。C语言用双引号描述一个字符串,如“abcd”。

  下面我们通过一个实验来展示如何发送字符串。我们实验的目标是打印字符串“Hello World ! 第一!”到打印机。直接上代码。

  #include “reg51.h”

  #define u16 unsigned int

  #define u8 unsigned char

  void delay(u16 x)

  {

  while(x--);

  }

  void Uart_Init() //串口初始化

  {

  SCON=0x50; //8位异步模式

  TMOD|=0x20; //定时器1工作方式2

  TH1=253;//9600bit/s

  TR1=1;

  }

  void Send_Byte(u8 dat) //串口发送一个字节

  {

  SBUF=dat; //启动发送,只需要把发送内容给SBUF这个寄存器

  while(TI==0); //等待发送完成,因为TI为1时表示在发送停止位

  TI=0;

  }

  void Send_String(u8 *str) //发送一个字符串 *str为字符串第一个字符的地址

  {

  abc: //标号

  if(*str != 0)

  {

  Send_Byte(*str);

  str++;

  goto abc;

  }

  }

  void main()

  {

  Uart_Init(); (责任编辑:admin)

织梦二维码生成器
相关文章
------分隔线----------------------------
栏目列表
推荐内容