微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 串行通讯(单片机)

串行通讯(单片机)

时间:11-24 来源:互联网 点击:
#include

#include
#include "config.h"

#defineucharunsigned char
#define uintunsigned int
#define BEEPP0_5

ucharReceiveBuf;//定义接受缓冲区
ucharSendBuf[] = {11, 22};//将发送的数组放在数组SendBuf[]中

// 延时函数
void delay(uint n)
{
uint i, j;
for(i = n; i > 0; i--)
for(j = 115; j > 0; j--);
}

//串行口的初始化函数
void series_init()
{
SCON = 0X50;//串口工作方式1,允许接收
TMOD = 0X20;//定时器T1工作方式2
TH1 = 0XFD; TL1 = 0XFD;//定时初值
PCON &= 0X00;//SMOD=0
TR1 = 1;//开启定时器1
EA = 1;//开总中断
ES = 1;//开串行中断
}

void main(void)
{
series_init();
for(;;){//等待中断
}
}

void series() interrupt 4
{

RI = 0;//接收中断清零
ES = 0;//暂时关闭串口中断
ReceiveBuf = SBUF;//将接收到得数据保存到ReceiveBuf中
if(islower(ReceiveBuf) || isupper(ReceiveBuf) || isdigit(ReceiveBuf)){
SBUF = ReceiveBuf;//将接收到的字符发送出去
while(!TI);//等待发送完毕
TI = 0;//发送完毕,TI(发送中断标志)清0
BEEP = 1;
delay(100);
BEEP = 0;
}
ES = 1;//打开串口中断
}

串行中断程序的编写步骤:

1. 设置串行口工作方式

2. 设置定时器T1工作方式,定时器T1作为波特率发生器,一般选用方式2,因为其可以自动装入初值功能,可以使波特率更加稳定

3. 设置定时初值

4. 设置波特率倍增位,不能位寻址,可以通过PCON设置,最高位就是SMOD倍增位,1时倍增

5. 开定时器和中断

6. 串行中断程序中,首先接收中断清零,关闭串口中断

7. 取出接收到 的数据进行处理然后发送

8.发送完后打开串行中断继续接收数据

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top