目录

一、串口

1、串口基本认知

2、串口通信

3、串口编程寄存器

3.1串行口相关寄存器

3.2串行口控制寄存器SCON和PCON

二、串口中断

2.1中断的触发

三、字符串型指令控制LED代码

3.1static关键字:

3.2 AUXR


一、串口

1、串口基本认知

串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口(Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简单,只要一对传输线就可以实现双向通信(全双工),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢,约20kb/s,发送数据是低位先发,接收数据是高位先接收

异步串行是指 UART ( Universal Asynchronous Receiver/Transmitter ),通用异步接收 / 发送。UART 包含 TTL 电平的 串口 和 RS232 电平的串口

2、串口通信

STC89C52设有2个互相独立的接收、发送缓冲器,可以同时发送和接收数据。发送缓冲器只能写入而不能读出,接收缓冲器只能读出而不能写入,因而两个缓冲器可以共用一个地址码( 99H),都 是两个独立的8 位寄存器。两个缓冲器统称 串行通信特殊功能寄存器SBUF。
代码体现为:   接收数据   char data = SBUF          发送数据    SBUF = data

波特率:UART是异步串行接口,通信双方使用时钟不同,因为双方硬件配置不同,但是需要约定通信速度,叫做波特率

串行通信设有4种工作方式,其中两种方式的波特率是可变的,另两种是固定的,以供不同应用场合选用。波特率由内部定时器/计数器产生,用软件设置不同的波特率和选择不同的工作方式。主机可通过查询或中断方式对接收/发送进行程序处理,使用十分灵活。

3、串口编程寄存器

  • 3.1串行口相关寄存器

  • 3.2串行口控制寄存器SCON和PCON

  • 其中SM0、SM1按下列组合确定串行口的工作方式:

PCON :电源控制寄存器(不可位寻址):

二、串口中断

2.1中断的触发

三、字符串型指令控制LED代码

3.1static关键字:

静态全局变量有以下特点:

1.静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的,即使用extern声明也不能使用。

2.静态局部变量有以下特点:

3.静态局部变量在程序执行到该对象的声明处时只执行一次初始化;

4.静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;

3.2 AUXR

#include "reg52.h"
#include <intrins.h>
#include <string.h>
#define SIZE  12
sbit led1 = P2^0;
sfr AUXR = 0x8E;
char dat_bak[SIZE];
void Delay1000ms()      //@11.0592MHz
{unsigned char i, j, k;_nop_();//就是通过nop指令的填充(nop指令一个字节),使指令按字对齐,从而减少取指令时的内存访问次数。_nop_();//指令的延迟时间为 1us。可以较为精确得控制延迟时间。i = 23;j = 3;k =100;do{do{while (--k);} while (--j);} while (--i);
}void UartInit(void)        //9600bps@11.0592MHz
{//PCON  = 0x00;//可以不配置,因为PCON默认就是不加倍SCON  = 0x50;//配置串口工作方式1工作,REN:1:使单片机能接收  0101 0000TMOD &= 0x0F;TMOD |=  0x20;//定时器配成8位自动重载TH1   =  0xFD;//公式计算:9600 = (2的SMOD次方/32)*定时器1的溢出率(11059200/12(256-TH1));TL1   = 0xFD;TR1   =  1;//启动定时器AUXR  = 0x00;//减少时钟电磁辐射,最低位为0,允许串口收发数据,设置为12分频ES       =  1;//开启串口中断EA        =  1;//开启总中断
}void sendbyte(char dat_msg)
{SBUF = dat_msg;while(!TI);//当串口传输结束后,TI自动置1,在这里我们把TI当最标志位来使用,目的是为了等待移位寄存器移位TI = 0;//手动清零
}void sendstar(char *ptr)
{while(*ptr != '\0'){sendbyte(*ptr);ptr++;}
}void main()
{char* dat = "woaichenhao\r\n";//串口中\r\n才能换行并对齐打印UartInit();while(1){Delay1000ms();sendstar(dat);}
}void UART_server() interrupt 4
{static int i = 0;//每次中断都会重新声明i,用static可以只声明一次,i放置在静态区不会被反复声明if(RI){RI = 0;//接收到串口信息后RI自动置1,必须要手动清0,最好放到前面,放到程序最后可能导致close不运行dat_bak[i]= SBUF;//移位寄存器,移位一位的传i++;//光标往后移if(i == SIZE){//如果超过数组大小,光标返回i = 0;}if(!strcmp("open",dat_bak)){//比较open和dat_bak,如果完全一样返回0led1 = 0;i = 0;memset(dat_bak,'\0',SIZE);}if(!strcmp("close",dat_bak)){//比较close和dat_bak,如果完全一样返回0led1 = 1;i = 0;//光标返回memset(dat_bak,'\0',SIZE);//数组初始化清0}}  if(TI);
}

[STC89C52RC]通过串口发送指令点亮LED相关推荐

  1. 6. STM32——用串口发送数据点亮LED(串口的中断接收)

    STM32--串口中断接收 1. 配置 GPIO 时钟.串口时钟.复用时钟 2. 配置 GPIO 结构体 3. 配置串口 1. 2. 3. 步骤基本框架在 [5. STM32--串口发送字符.字符串 ...

  2. java 怎么向串口发送指令_idea ssm项目java程序使用十六进制rxtx包向串口发送指令的方法...

    1.前提 idea ssm项目环境要配好,这里就不多赘述了,自己配好 2.下载配置rxtx包 官网下载:http://rxtx.qbang.org/wiki/index.php/Download 根据 ...

  3. STM32驱动串口屏,STM32F103C8T6串口发送指令控制HMI串口屏

    STM32驱动串口屏,STM32F103C8T6串口发送指令控制HMI串口屏 串口屏 基础指令集 硬件和接线 接线 实验前准备 STM32程序 串口程序 主函数 实验现象 总结 串口屏 串口屏是一个集 ...

  4. 51单片机:电脑向串口发送数据并控制LED灯

    电脑向串口发送数据后,控制LED灯,并返回发送的数据 程序如下 #include"regx52.h" #include"intrins.h" unsigned ...

  5. STM32F103RC串口发送数据1使LED闪烁---串口助手作为主机发送数据1,单片机作为从机接收

    主要是一个函数的使用, 串口助手发送的数据1 这个是接收1 if(USART_RX_BUF[0]=='1') 主函数这样写会 接收数据1  使LED闪烁 int main(void){ u8 t;u8 ...

  6. 串口接收字符/字符串/定向printf串口发送/用串口控制led灯的亮灭

    ##usart.h//串口头文件 #include "stm32f10x.h" #include <stdio.h> void usart_init(); void U ...

  7. V831——人脸识别通过串口向下位机发送指令

    V831 文章目录 V831 前言 一.V831人脸识别 二.代码实现 总结 人脸识别串口发送指令 前言 V831人脸识别通过XY坐标以及Z的距离判断向下位机发送的数据,下位机处理完成后发送数据回来. ...

  8. 昆仑通态屏幕制作(连载2)---基础篇(设定与显示,串口发送)

    写在之前 第一次经历过一个软件不会用的懵逼状态后,慢慢静下心来,好好的看看这个屏幕到底怎么弄,经历过多方帮助,终于慢慢的领悟到了昆仑通态屏幕怎么制作,下面分享给需要用到的小伙伴. 语言 还是那句话,自 ...

  9. 【嵌入式】——串口实验——实现芯片串口收发数据,按键中断串口发送数据,串口接收数据中断来控制LED亮/灭

    实验目的: 实现芯片串口收发数据,按键中断串口发送数据:按下按键,向串口发送数据,并通过虚拟终端显示出来: 串口接收数据中断来控制LED亮/灭:通过串口助手向MCU发送数据,"A" ...

最新文章

  1. Java自动驾驶:汽车检测
  2. 智办事:高效远程办公指南
  3. mac 下搭建 php + apache + mysql 服务器(cool)
  4. 《人人都是产品经理》阅读笔记一
  5. php-mysql管理利器 adminer
  6. 【SpringBoot】 启动时,修改默认配置文件名称
  7. 二十一、挖掘模式评估方法
  8. 使用SQLPLUS生成HTML报表
  9. 数据分析---ipython使用
  10. 转载--C语言:浮点数在内存中的表示
  11. Docker的Solomon Hykes在OSCON上的主题演讲的要点
  12. python request headers获取_Python爬虫实战—— Request对象之header伪装策略
  13. 头文件相互包含问题的解决办法
  14. 表单元素与提示文字无法对齐的问题(input,checkbox文字对齐)
  15. Mysql 数据库迁移
  16. java程序员自荐信_【程序员英文的自荐信】程序员优秀员工自荐信
  17. 一年四个P(Project)
  18. 排队系统拥塞控制的位置
  19. 新库上线 | CnOpenData中国各地区方言信息数据
  20. 不能忍!花钱买网站VIP账号别人在用?

热门文章

  1. 想成为六西格玛黑带大师?这些你了解吗
  2. Java表达式运算工具类
  3. 个人简介(北京求职中)
  4. oracle技术基础知识,ORACLE基础知识培训.ppt
  5. 1.查找最晚入职员工的所有信息
  6. [转]jQuery美化表格插件tablecloth.js
  7. [Spring实战系列](11)SpEL使用表达式装配
  8. mysql general error_SQLSTATE[HY000]: General error:
  9. 第82届奥斯卡获奖名单
  10. WINDOWS Outlook 同步 iCloud日历并且可以编辑