一、什么是串口通信?

51单片机——串口通信详解(STC89C51为例)_佛科院深夜学习的博客-CSDN博客

二、IAP15F2K60S2与STC89系列的区别:

1、16位自动重装载模式下波特率的计算方式不同:

(1)波特率与SMOD无关

(2)波特率等于溢出率除4

2、AUXR辅助寄存器:(上电后默认为0x01)

(1)T2R:控制定时器2是否允许使用,置“1”为允许

(2)T2_C/T:控制定时器2用作定时器还是计数器,置“0”为定时器(默认)

(3)T2X12:控制定时器2速度,置“0”为12T模式(传统模式);置“1”为1T模式

(4)S1ST2:串口1定时器选择位,置“0”选择定时器1;置“1”选择定时器2(默认)

3、AUXR辅助寄存器1(这里我们未使用)

5、使用的定时器不同

(1)串口1可以使用定时器1、定时器2为波特率发生器

(2)定时器2默认为16位自动重装载模式

(3)定时器2的时间常数保存在T2H、T2L

6、波特率对应定时器初值计算:

(1)溢出率(单位时间溢出的次数):

假设我们使用的是1T模式,溢出一次需要的时间 = (65536 - 初值)*(1/晶振频率),即

溢出率 = 1/溢出一次需要的时间 = 晶振频率/(65536 - 初值)

(2)波特率:

波特率 = 溢出率/4 =晶振频率/(65536 - 初值)/4

(3)定时器初值:

初值 = 65536 - 晶振频率/(波特率*4)(误差的绝对值要小于3%)

7、不需要外部晶振,通过STC-ISP可调节晶振频率

三、串口通信实验:

1、代码思路:

先配置并开启定时器2,然后配置并开启串口1,最后实现数据的收发。

2、注意:

STC-ISP中的IRC频率需要设置为12MHZ

3、主函数:

// 使用程序前,将J13调整为IO模式(2-3脚短接)
#include "Public.h"u8 R_sign;
u8 R_dat;void Uart_1_TX(u8 dat);
void Uart_1_Init();
// 主函数
void main(void)
{Close_All();    Uart_1_Init();Uart_1_TX(0x5a);Uart_1_TX(0xa5);while(1){ if(R_sign){Uart_1_TX(R_dat+1);R_sign = 0;}}
}
/*****************串口**********************/
/*输入变量:无输出变量:无功能:配置并开启定时器2和串口2
*/void Uart_1_Init()        //9600bps@12MHz
{//使用了SCON、AUXR、IE、T2H、T2L寄存器//方式1 8位数据 波特率可变SM0 = 0;SM1 = 1;//定时器2速度为1T模式AUXR |= 0x01<<2;//串口1选择使用定时器2AUXR |= 0x01<<0;    //定时器初值T2L = 0xC7;            T2H = 0xFE;            //允许串口接受REN = 1;//开启串口中断ES = 1;//开启总中断EA = 1;//开启定时器2AUXR |= 0x01<<4;
}/*输入变量:发送的八位数据输出变量:无功能:使用串口1发送8位数据
*/void Uart_1_TX(u8 S_dat)
{SBUF = S_dat;while(!TI);TI = 0;
}void Uart_1_IT() interrupt 4
{if(RI){R_dat = SBUF;RI = 0;R_sign = 1;}
}

四、串口通信进阶实验:

    • 代码思路:

首先将无关设备关闭,然后配置并打开串口,编写发送字符串代码(记得回车换行),接着编写控制函数和读取函数

2.参考代码:

// 使用程序前,将J13调整为IO模式(2-3脚短接)
#include "Public.h"
u8 R_sign;
u8 R_dat;
u8 last_led = 0xff;
void Uart_1_TX_String(u8 *S_dat);
void Uart_1_Init();
void LED_ON_Low(u8 dat);
void LED_ON_High(u8 dat);
// 主函数
void main(void)
{Close_All();    Uart_1_Init();Uart_1_TX_String("Welcome come to XMF system!\r\n");while(1){ if(R_sign){R_sign = 0;switch(R_dat>>4){case 0x0A:LED_ON_Low(R_dat);break;case 0x0B:            LED_ON_High(R_dat);break;case 0x0C:Uart_1_TX_String("The system is running!\r\n");break;}}}
}
/*****************串口**********************/
/*输入变量:无输出变量:无功能:配置并开启定时器2和串口2
*/void Uart_1_Init()        //9600bps@12MHz
{//使用了SCON、AUXR、IE、T2H、T2L寄存器//方式1 8位数据 波特率可变SM0 = 0;SM1 = 1;//定时器2速度为1T模式AUXR |= 0x01<<2;//定时器初值T2L = 0xC7;            T2H = 0xFE;            //允许串口接受REN = 1;//开启串口中断ES = 1;//开启总中断EA = 1;//开启定时器2AUXR |= 0x01<<4;
}void Uart_1_IT() interrupt 4
{if(RI){R_dat = SBUF;RI = 0;R_sign = 1;}
}/*输入变量:发送的字符串输出变量:无功能:使用串口1发送字符串
*/void Uart_1_TX_String(u8 *S_dat)
{while(*S_dat != '\0'){SBUF = *S_dat;while(TI == 0);TI = 0;S_dat++;}
}/*********************LED******************/
/*输入变量:低四位灯亮灭数据。‘1’表示开灯,‘0’关灯输出变量:无功能:控制前四个灯亮灭,保持后四个灯灭注意:使用前要对u8 last_led = 0XFF;进行宏定义
*/
void LED_ON_Low(u8 dat)
{//由于P0口是公用的口,我们要对每次点灯的数据进行记录,不然会受其他操作的影响P0 = (last_led & 0xf0) | (~dat & 0x0f);last_led = P0;P2 = (P2 & 0x1f) | 0x80;P2 &= 0x1f;
}
/*输入变量:高四位灯亮灭数据。‘1’表示开灯,‘0’关灯输出变量:无功能:控制后面四个灯亮灭,保持前面四个灯灭注意:使用前要对u8 last_led = 0XFF;进行宏定义
*/
void LED_ON_High(u8 dat)
{//由于P0口是公用的口,我们要对每次点灯的数据进行记录,不然会受其他操作的影响P0 = (last_led & 0x0f) | (~dat & 0x0f)<<4;last_led = P0;P2 = (P2 & 0x1f) | 0x80;P2 &= 0x1f;
}

蓝桥杯模块学习10——串口通信(深夜学习——单片机)相关推荐

  1. 蓝桥杯模块学习17——AT24C02存储器(深夜学习——单片机)

    一.硬件电路: 1.引脚功能: (1)A0-A2:决定不同设备的地址码: (2)WP:写保护 二.通讯方式(IIC协议) 通讯方式与PCF8591相同,可参考以下文章: 蓝桥杯模块学习16--PCF8 ...

  2. 蓝桥杯模块矩阵键盘Part_1

       九层妖塔 起于垒土 蓝桥杯模块矩阵键盘Part_1 矩阵键盘 一.理论 1.矩阵键盘的识别与编码: 2.矩阵键盘的工作方式: 二.原理图 三.Template1 1.矩阵键盘扫描函数: 2.定时 ...

  3. 使用51单片机采用中断方式进行串口通信的学习记录:

    使用51单片机进行串口通信的学习记录之中断方式: 1.51单片机采用中断方式的串口通信过程及程序分析: 所谓中断方式,就是串口收/发标志位出发中断后,在中断中执行既定操作,可通过函数调用来实现. 接收 ...

  4. QT子线程实现串口通信_学习记录

    QT子线程实现串口通信_学习记录 1 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容 ...

  5. Arduino与LU-ASR01语音识别模块的双向串口通信实现

    之前我写了一篇<Arduino的智能语言输入实现>,讨论了Arduino与LU-ASR01之间通过串口通信实现Arduino的中文语音输入,不过那个通信是不完整的,因为LU-ASR01的串 ...

  6. 蓝桥杯模块四路运算放大器LM324

       九层妖塔 起于垒土 蓝桥杯模块四路运算放大器LM324

  7. 【蓝桥杯】第10届Scratch国赛第6题程序2 -- 捉迷藏

    [导读]:蓝桥杯大赛是工业和信息化部人才交流中心举办的全国性专业信息技术赛事.蓝桥杯大赛首席专家倪光南院士说:"蓝桥杯以考促学,塑造了领跑全国的人才培养选拨模式,并获得了行业的深度认可.&q ...

  8. vivado学习第二 串口通信之奇偶校验位

    vivado学习第二 串口通信之奇偶校验位 奇偶校验位  奇偶校验位分为奇数校验位和偶数校验位,奇数和偶数的判断标准是依据发送一串或者一帧数据中"1"的个数.  奇数校验:发送的数 ...

  9. 串口通信操作STM32f4单片机LED 蜂鸣器(io)

    串口通信操作STM32f4单片机LED 蜂鸣器(io) 首先将串口与PC通信 单片机中串口1需要连接p6 中的PA9连接rxd PA10连接txd并使能相应io,io模式为挽推复用,复用为串口USAR ...

最新文章

  1. 开发日记-20190624 关键词 读书笔记《Linux 系统管理技术手册(第二版)》DAY 1
  2. SAP云平台里两种类型的WebIDE
  3. java中属性外部化_用Java可外部化
  4. C语言 | 函数执行成功时,return 1 还是return 0?
  5. 反转链表 python 递归_LeetCode 206.反转链表(Python3)
  6. Rsync(远程同步):Linux中Rsync命令的10个实际示例
  7. 项目建设做好服务器,我院数字化建设项目(一期)服务器系统切换工作顺利完成...
  8. 智力问答 46倒计时
  9. Atitit enhance sprbt start speed cyidon swdu 启动速度 目录 第一节 简化与提升启动速度性能 1 第二节 1 第二章 更加轻量级的rest spar
  10. Atitit  深入理解命名空间namespace  java c# php js
  11. Unity | 安卓 读取和写入TXT文本操作
  12. html 百度地图坐标拾取,百度拾取坐标系统坐标反查是什么意思
  13. Markdown中插入excel表的简便方法
  14. x^2+y^2=2ax
  15. 转一篇人生感悟,写的很好
  16. FPGA小白学习之路(2)error:buffers of the same direction cannot be placed in series
  17. 读懂 x86 架构 Linux 系统虚拟化,这文不容错过
  18. win10恢复经典开始菜单_怎么将win10界面切换成win7界面
  19. 什么是服务器合租?产权如何分配?
  20. macos iTerm2 优化

热门文章

  1. android7.0隐藏标题栏,大佬,7.0.22设置后只有标题栏和状态栏能改背景颜色,其它的没变化,要怎么处理一下...
  2. 国产WordPress论坛插件-Sliver BBS
  3. 精容数安政务云灾备解决方案
  4. orange+pi+android+7,全志H6四核1.8GHZ的Orange pi 3来了!新一代ARM开发板,64位系统级芯片......
  5. 5种JavaScript和CSS交互的方法
  6. 韩星李起光SNS被黑   社交网络安全刻不容缓
  7. C语言递归调用return语句,理解C语言递归函数的逐级返回(return)
  8. excel熵值法计算权重_指标权重确定方法 1-熵值法
  9. 西南大学考研电子信息907初试经验
  10. VR交互动画短片《拾梦老人》的开发经历