51单片机-串口通信编程
串行口工作之前,应对其进行初始化,主要是设置产生波特率的定时器1、串行口控制盒中断控制。具体步骤如下:
- 确定T1的工作方式(编程TMOD寄存器)
- 计算T1的初值,装载TH1\TL1
- 启动T1(编程TCON中的TR1位)
- 确定串行口控制(编程SCON寄存器)
串行口在中断方式工作时,要进行中断设置(编程IE、IP寄存器(中断优先级通常不设置))
#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
void UsartInit()
{
//TMOD控制T1、T0寄存器工作方式
TMOD=0X20; // 0010 0000 选择定时器1,工作方式2
// 设置波特率,12MHZ晶振、4800波特率、定时器:方式2、SMOD=1波特率倍频,初值F3H
TH1=0XF3;
TL1=0XF3;
//PCON不能位操作,设置SMOD
PCON=0X80;
//TCON寄存器启动定时器
TR1=1;
//SCON寄存器串行口控制
SCON=0X50; // 0101 0000
//IE寄存器打开串口中断
ES=1;
EA=1;
}
void main()
{
UsartInit();
while(1);
}
void Usart() interrupt 4
{
u8 receiveData; //定义一个变量用于保存数据
receiveData=SBUF; //读取缓冲器里面的数据
//由内部硬件使RI置1,需要软件把RI清零
RI=0;
// 发送数据
SBUF=receiveData;
while=(!TI); //发送完成通过硬件置1,取反跳出循环
TI=0; //发送完成,软件清0;
}