一、串口通讯的概念和用到的寄存器
二、简单使用
头文件:
/*********************************************************************
*
* bstv51.h
*
*********************************************************************
* 文件名: bstv51.h
* 描 述: BST-V51开发板头文件
********************************************************************/
#ifndef bstv51_H
#define bstv51_H
/*变量类型标识的宏定义,通常做法*/
#define uchar unsigned char //8 0-255
#define uint unsigned int //16 0-65535
#define ON 1
#define OFF 0
/*定义晶振频率(单位 Hz)*/
#define FOSC 11059200
//#define FOSC 12000000
//#define FOSC 22118400
/* BST-V51 引脚定义 */
sbit L0 = P1^0; //LED0引脚
sbit L1 = P1^1;
sbit L2 = P1^2;
sbit L4 = P1^4;
sbit L5 = P1^5;
sbit L6 = P1^6;
sbit L7 = P1^7;
sbit RS = P1^0; //RS为寄存器选择,1=数据寄存器、0=指令寄存器。
sbit RW = P1^1; //RW为读写信号线,1=读操作,0=写操作。
//当RS=RW=0可以写入指令或者显示地址,
//当RS=0,RW=1可以读忙信号,
//当RS=1,RW=0可以写入数据。
sbit SDI = P1^5; //DS1302
sbit SDO = P1^6; //DS1302
sbit SCK = P1^7; //DS1302
sbit EN = P2^5; //当EN端由高电平跳变成低电平时,液晶模块执行命令。
sbit CS = P2^6;
sbit RST = P2^7; //DS1302时钟
sbit RX = P3^0;
sbit TX = P3^1;
sbit IR = P3^2;
sbit B20 = P2^4;
sbit FM = P2^3;
sbit DU=P2^6;
sbit WE=P2^7;
/*为方便使用,部分管脚的多重定义*/
#define CLK SW0
#define DAT SW1
//系统初始化函数
void bstv51_init(void);/*BST-V51开发板主板初始化*/
#endif
(1)不使用倍增下:
#include<reg52.h>
#include "bstv51.h"
void initData()
{
TMOD = 0x20; // 0010 0000 来启动计时器1的工作方式2
TH1 = 0xfd; // 设置计时器1 的波特率 fd = 9600
TL1 = 0xfd; // fd 对应 波特率9600
PCON = 0x00; // 0x80表示 让波特率开启倍增 0x00 表示不倍增,正常值
SCON = 0x50; // 设置工作方式为1下,开启接受允许
EA = 1; // 开启全局中断
ES = 1; // 开启串口中断
TR1 = 1; // 让计时器1开始启动,也就是开始计时
}
void main()
{
bstv51_init(); // 初始化一些端口
initData(); // 初始化配置的计时器
while(1)
{
;
}
}
void uarttime()interrupt 4
{
uchar date;
date=SBUF; // 取出接受到的数据
RI=0; // 清除接受中断标志位 RI = 1的时候就是接受数据完毕
SBUF=date; // 接收到的数据放入发送缓存器发送
while(!TI); // 等待发送数据完成 , 没有完成下 TI 都为 0
TI=0; // 清除发送完成标志位
}
(2)用倍增下:
#include<reg52.h>
#include "bstv51.h"
void initData()
{
TMOD = 0x20; // 0010 0000 来启动计时器1的工作方式2
TH1 = 0xfd; // 设置计时器1 的波特率 fd = 9600
TL1 = 0xfd; // fd 对应 波特率9600
PCON = 0x80; // 0x80表示 让波特率开启倍增 0x00 表示不倍增,正常值
SCON = 0x50; // 设置工作方式为1下,开启接受允许
EA = 1; // 开启全局中断
ES = 1; // 开启串口中断
TR1 = 1; // 让计时器1开始启动,也就是开始计时
}
void main()
{
bstv51_init(); // 初始化一些端口
initData(); // 初始化配置的计时器
while(1)
{
;
}
}
void uarttime()interrupt 4
{
uchar date;
date=SBUF; // 取出接受到的数据
RI=0; // 清除接受中断标志位 RI = 1的时候就是接受数据完毕
SBUF=date; // 接收到的数据放入发送缓存器发送
while(!TI); // 等待发送数据完成 , 没有完成下 TI 都为 0
TI=0; // 清除发送完成标志位
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/68454.html