粤嵌单片机兴趣课(六)
前言
本次实验所用单片机为C51单片机
,CPU
为AT89C52
,使用的开发软件是Keil uVision4
,将程序下载到单片机所使用的软件为stc-isp-15xx-v6.85H.exe
。
注意事项
(1)如果需要创建工程并添加文件和学习如何向单片机烧入可执行程序,请参考博客https://blog.youkuaiyun.com/APPDREAMER/article/details/115568852
,本篇博客不在做相关赘述。
(2)由于实验结果需要上传视频,因此没有将相关实验结果图片放置于博客中。
(3)具体学习所有过程请参考博客粤嵌单片机兴趣课(一)~(六)。
(注:链接如下:粤嵌单片机兴趣课(一))
(注:链接如下:粤嵌单片机兴趣课(二))
(注:链接如下:粤嵌单片机兴趣课(三))
(注:链接如下:粤嵌单片机兴趣课(四))
(注:链接如下:粤嵌单片机兴趣课(五))
C51单片机之串口通信
1、串口通信原理。
2、串行,单工,半双工,全双工的理解。
3、串行,单工,半双工,全双工的理解。
4、波特率以及波特率的确定方式。
(注:通过定时器1的工作方式2(8位自动重载)确定的9600波特率的程序如下)
void UartInit(void) //9600bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFD; //设定定时初值
TH1 = 0xFD; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
5、C51单片机串口发送数据原理。
(注:发送一个字节的代码如下)
SBUF = 15;
while(TI!=1);//等待发送完成
TI = 0;//清除发送完成的标志,方便后续的判断
6、C51单片机串口接收数据原理。
(注:轮询读取一个字节数据的代码如下)
while(RI!=1);//等待数据来临
unsigned char Data = SBUF;//读取SBUF中的数据保存到Data
RI = 0;//清除接收标志
中断的方式
void uart_isr() interrupt 4
{
if(RI == 1)
{
A = SBUF;
RI = 0;
}
}
7、C51单片机串口配置。
7、C51单片机串口通信发送字节程序实现。
void uart_init()
{
PCON = 0;
SM0 = 0;
SM1 = 1;
REN = 1;//接收使能
TMOD = TMOD & 0x0f;
TMOD = TMOD | 0x20;//设置定时器1为工作方式2 8倍自动重装
TH1 = 0xfd;
TL1 = 0xfd;//对应的波特率是9600
TR1 = 1;
ES = 1;//打开串口中断开关
EA = 1;//打开中断总开关
}
void send_byte(unsigned char s)
{
SBUF = s;
while(TI!=1);
TI = 0;
}
int main()
{
uart_init();
send_byte('A');
while(1);
}