C51单片机-串行口2-蓝牙模块-应用例程
一、例程简介
本例程51单片机与蓝牙模块连接,可通过蓝牙模块接收和发送字符串,从而控制测试灯的亮灭。其中使用51单片机的串行口2的工作方式1,即8位UART,波特率可变。波特率设为9600。缺省UART2在P1口。
测试程序实现的功能:
1、蓝牙模块接收到“0”~“6”字符串时,分别实现LED0~4的不同亮灭效果;
2、执行字符串“6”对应效果后,通过蓝牙模块发送字符串“\rHello!”到模块连接的蓝牙设备。
二、硬件部分
C51芯片:STC12C5A60S2 PDIP-40
蓝牙模块:HC-05
晶振:11.0592MHz
-- 连接电路 --
最小系统
(测试用BST-V51 51单片机学习板)
蓝牙模块
+5V 接 单片机VCTC
GND 接 单片机GND
TX 接 P1.2/RxD2
RX 接 P1.3/TxD2
其它引脚悬空
三、软件部分
-- C语言代码 --
#include "reg51.h"
#include "intrins.h"
#include "string.h"typedef unsigned char uchar;
typedef unsigned int uint;#define FOSC 11059200L //System frequency
#define BAUD 9600 //UART baudrate
#define PARITYBIT NONE_PARITY //Testing none parity/*Define UART parity mode*/
/* Copy from STC12C5A60S2 Data Sheet*/
#define NONE_PARITY 0 //None parity
#define ODD_PARITY 1 //Odd parity
#define EVEN_PARITY 2 //Even parity
#define MARK_PARITY 3 //Mark parity
#define SPACE_PARITY 4 //Space parity/*Declare SFR associated with the UART2 */
/* Copy from STC12C5A60S2 Data Sheet*/
sfr AUXR = 0x8e; //Auxiliary register
sfr AUXR1 = 0xa2;
sfr S2CON = 0x9a; //UART2 control register
sfr S2BUF = 0x9b; //UART2 data buffer
sfr BRT = 0x9c; //Baudrate generator
sfr IE2 = 0xaf; //Interrupt control 2
#define S2RI 0x01 //S2CON.0
#define S2TI 0x02 //S2CON.1
#define S2RB8 0x04 //S2CON.2
#define S2TB8 0x08 //S2CON.3/* Define variables associated with the UART2*/
char UART_buff;
char Str[16];
uchar j = 0;/*Define pin of LED for testing*/
sbit LED0 = P1^0;
sbit LED1 = P1^4;
sbit LED2 = P1^5;
sbit LED3 = P1^6;
sbit LED4 = P1^7;// delay for x ms
void delayxms(uint x)
{uint i;uchar a,b;for(i=0;i<x;i++)for(b=18;b>0;b--)for(a=152;a>0;a--) ;
}/* Copy from STC12C5A60S2 Data Sheet*/
void Uart2_Init()
{#if (PARITYBIT == NONE_PARITY)S2CON = 0x50; //8-bit variable UART#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)S2CON = 0xda; //9-bit variable UART, parity bit initial to 1#elif (PARITYBIT == SPACE_PARITY)S2CON = 0xd5; //9-bit variable UART, parity bit initial to 0#endifBRT = -(FOSC/32/BAUD); //Set auto-reload vaule of baudrate generatorAUXR = 0x14; //Baudrate generator work in 1T mode
// AUXR1 |= 0x10; // If needed, switch UART2 Pin from P1 to P4IE2 = 0x01; //Enable UART2 interruptEA = 1; //Open master interrupt switch
}/*----------------------------
Send a string to UART
Input: s (address of string)
Output:None
----------------------------*/
void SendString(char *s)
{int i = 0;int l = strlen(s);for(i; i<l; i++){S2BUF = s[i];while(!(S2CON&S2TI)) ;S2CON &= ~S2TI;;}
}void main()
{Uart2_Init();LED0 = 1;LED1 = 1;LED2 = 1;LED3 = 1;LED4 = 1;while(1) ;
}/*----------------------------
UART2 interrupt service routine
----------------------------*/
void Uart2() interrupt 8 using 1
{if (S2CON & S2RI){S2CON &= ~S2RI; //Clear receive interrupt flagUART_buff = S2BUF; //UART_buff to save UART dataif(UART_buff != '\0') // When it's not the end of message,{Str[j++] = UART_buff; // Continue to record character.}else // When message ends, do the specific job{Str[j] = UART_buff;if(strcmp(Str, "0") == 0){LED0 = ~LED0;delayxms(100);}else if(strcmp(Str, "1") == 0){LED1 = ~LED1;delayxms(100);}else if(strcmp(Str, "2") == 0){LED2 = ~LED2;delayxms(100);}else if(strcmp(Str, "3") == 0){LED3 = ~LED3;delayxms(100);}else if(strcmp(Str, "4") == 0){LED4 = ~LED4;delayxms(100);}else if(strcmp(Str, "5") == 0){LED1 = 0;LED2 = 0;LED3 = 0;LED4 = 0;delayxms(100);}else if(strcmp(Str, "6") == 0){LED1 = 1;LED2 = 1;LED3 = 1;LED4 = 1;delayxms(100);SendString("\rHello!");}strcpy(Str, "");j = 0;}}if (S2CON & S2TI){S2CON &= ~S2TI; //Clear transmit interrupt flag}
}
C51单片机-串行口2-蓝牙模块-应用例程相关推荐
- 单片机实验汇编案例---单片机串行口与PC机通讯实验
一.实验要求 利用8031单片机串行口,实现与PC机通讯. 本实验实现以下功能,将从实验机键盘上键入的数字,字母显示到PC机显示器上,将PC机键盘输入的字符(0-F)显示到实验机的数码管上. 二.实验 ...
- 单片机 串行口实验解数据流怎么到发光二极管来显示的
[斯鹭]徐良军利用8031单片机串行口,实现与PC机通讯.本实验实现以下功能,将从实验机键盘上键入的数字,字母显示到PC机显示器上,将PC机键盘输入的字符(0-F)显示到实验机的数码管上.二.实验目的 ...
- 51单片机串行口的使用与串行通信
51单片机串行口的使用与串行通信 串行通信: 俩个概念: RS232接口标准: 串行口的使用: 串行口的结构: 串行口相关寄存器: 串行口的工作方式: 方式0:同步移位寄存器方式 利用方式0扩展并行I ...
- 51单片机串行口程序c语言编程,单片机C语言编程串行口通讯.ppt
单片机C语言编程串行口通讯 第7章 MCS-51单片机串行口 第7章 MCS-51单片机串行口 目 录 7.1 串行通信基本知识 7.2 串行口结构及控制 7.3 串行口工作方式 7.4 串行口应用举 ...
- (九)单片机串行口 内部结构的讲解 01
1. 基本概念 常用于数据通信的传输方式有单工.半双工.全双工和多工方式. 单工方式:数据仅按一个固定方向传送.因而这种传输方式的用途有限,常用于串行口的打印数据传输与简单系统间的数据采集. 半双工方 ...
- 串行异步通信_单片机串行口介绍
串行口是单片机与外界进行信息交换的工具,8051单片机的通信方式有两种: 并行通信:数据的各位同时发送或接收. 串行通信:数据一位一位次序发送或接收. 串行通信的方式 异步通信 用一个起始位0表示字符 ...
- 串行口通信c语言代码,问一下单片机串行口通信用c语言实现的问题
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 这个是上面项目中用的子程序: /************************************************************* ...
- 51单片机串行口c语言编程,51单片机串口通信c语言编程
这只是个模板,参考一下 /*----------------------------------------------- 名称:串口通信 网站:www.doflye.net 编写:shifang 日 ...
- 快速复习51单片机的外部中断、计数/定时器中断和串行口中断,加代码实现
目录 1.中断系统的概念 1.1中断的概念 1.2中断系统的概念 1.3中断系统的优点 1.4我们要说的三种中断源 2.外部中断 2.1 外部中断0 代码示范 2.2 外部中断 分析 3.计数/定时器 ...
最新文章
- IC基础知识(4)电源管理简介:稳压器IC
- Plenty Of Tricks to Get Irradiance Caching Practical
- 【iOS】【项目全局动态埋点】Runtime+Aspects(hook)
- artDialog对话框在PHP下的简单应用-artDialog弹出层篇
- 小白都能看懂的干货!大数据这朵“后浪”,能卷起多大的风浪?
- Spark Streaming揭秘 Day13 数据安全容错(Driver篇)
- Python 教你自动发微博,每日一句英语
- PyQt5, PushButton
- 钉钉在线求饶?五星分期付款?爬取钉钉App Store真实评价数据并分析
- python实现按照给定范围随机生成小数,偶数,奇数,整数,正态分布,均匀分布数据以及图片
- java实现康威生命游戏
- 阿里云ecs云服务器和域名的购买,绑定及备案教程
- 手把手带你搭建一个自己的云服务器并部署Web程序
- 漂亮的css网站js资源无限下载
- 评估软件项目的经济价值
- svn快速入门使用教程
- copy.copy()与copy.deepcopy()的详解
- (zz)Lambda 表达式(C# 编程指南)
- Centos中Samba共享目录无法访问
- chrome浏览器字体小于12px的解决方式
热门文章
- 抄板PCB,好麻烦!
- 虚拟机ipv4和6都没访问权限_ipv4和ipv6无网络访问权限 win10
- oracle数据库description,DESCRIPTION=(ADDRESSOracle12c环境下的EM配置和使用方法
- 蹩脚的CSDN手机绑定
- MSRA-TD500数据集坐标转换
- Oracle数据库的毗邻
- (41.1)【JWT-KID漏洞】KID之目录遍历、命令注入、SQL注入
- torch-fidelity 简便计算FID,ISC,KID,PPL
- C语言-函数案例-计算圆周长
- (一)城市三维基础展示方案