/*
Description:用中断方式实现串口数据发送
Author:Jcy
Date:2012-5-2
*/
#include<>
#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;
}
}
}