您当前的位置:五五电子网电子知识单片机-工控设备综合-其它51单片机串口通信中字符发送的总结 正文
51单片机串口通信中字符发送的总结

51单片机串口通信中字符发送的总结

点击数:7139 次   录入时间:03-04 11:49:30   整理:http://www.55dianzi.com   综合-其它
菜鸟我今天在练习51单片机串口通信时,对字符的发送方式总结了一下,有以下三种方式,若有大侠看到请勿见笑。   /*字符发送方式一*/ #include<reg52.h> #define uchar unsigned char #define uint unsigned int uchar flag,a,i; uchar code table[]="I get ";   void init() { TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1; SM0=0; SM1=1; REN=1; //TI=1; EA=1; ES=1; }   void main() {   init(); while(1) {   if(flag==1) { ES=0; for(i=0;i<6;i++) { SBUF=table[i];     while(TI==0);     TI=0; } SBUF=a;     while(TI==0);     TI=0; ES=1; flag=0; } } }   void ser() interrupt 4 { a=SBUF; RI=0; P1=~P1; flag=1;   }   /*字符发送方式二*/ #include<reg52.h> #include<stdio.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int uchar flag,a,i=0; uchar code table[]="I get ";   void init() { TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1; SM0=0; SM1=1; REN=1; //TI=1; EA=1; ES=1; }   void main() {   init(); while(1) {   if(flag==1) { ES=0; while(table[i]!='\0')//注意字符串末尾为'\0' { SBUF=table[i];     while(TI==0);     TI=0; i++; } i=0;//用完了i记得清零 SBUF=a;     while(TI==0);     TI=0; ES=1; flag=0; } } }   void ser() interrupt 4 { a=SBUF; RI=0; P1=~P1; flag=1;   }   /*字符发送方式三--打印函数(重要)*/ #define uint unsigned int uchar flag,a,i=0; uchar code table[]="I get ";   void init() { TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1; SM0=0; SM1=1; REN=1; //TI=1; EA=1; ES=1; }   void main() {   init(); while(1) {   if(flag==1) { ES=0; TI=1;//用printf,puchar,_getkey等函数要先进行初始化串行口 //该函数在头文件中的定义如下 //while(!TI); // TI=0; // return(SBUF=a); //所以用打印函数时如果没有将TI设置为1,执行到该句会进入死循环 printf("I get %c\n",a);     while(TI==0);     TI=0; ES=1; flag=0; } } }   void ser() interrupt 4 { a=SBUF; RI=0; P1=~P1; flag=1;   }

本文关键字:单片机  通信  综合-其它单片机-工控设备 - 综合-其它