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; } } }