您的位置:首页 > 其它

51单片机中用中断方式实现串口数据发送与接收

2012-05-02 14:50 597 查看
/*

Description:用中断方式实现串口数据发送

Author:Jcy

Date:2012-5-2

*/
#include<reg52.h>
#define uint  unsigned int
#define uchar unsigned char

uchar receive_ser;     //串口接收到的数据
uchar flag=0;

uchar receivebuf[ ]="Jcy";
uchar i=0;
uchar j;
void init_ser()
{
TMOD=0X20;//定时器1工作在方式2
TH1=0XFD;
TL1=0XFD;  //波特率9600,51单片机大多用这个
TR1=1;  //定时器/计数器1启动
EA=1;    //开放总中断
SM0=0;
SM1=1;   //串行口方式1
REN=1;//允许串口接收
ES=1;//开串口 中断
}

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

void ser_int() interrupt 4     //中断函数不用声明
{
if(RI==1)
{
RI=0;
receive_ser=SBUF;
if(receive_ser!='\0')
{
receivebuf[i]=receive_ser;
i++;
if(i==12)
{
i=0;
flag=1;
}

}
}

}

void main()
{
init_ser();
while(1)
{
if(flag==1)
{
ES=0;  //关闭中断
flag=0;   //重置
for(j=0;j<12;j++)
{
SBUF=receivebuf[j];   //发送
while(!TI);  //如果一直没发送完毕
TI=0;       //为下次发送做准备
delay(10);   //此处可以不用延迟
}
ES=1;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: