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

来源:互联网 发布:美国地缘政治知乎 编辑:程序博客网 时间:2024/06/04 19:11
/*Description:用中断方式实现串口数据发送Author:JcyDate:2012-5-2*/
#include<reg52.h>#define uint  unsigned int#define uchar unsigned charuchar 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;        }    }   }


原创粉丝点击