#include"reg51.h"//输入输出 #include"stdio.h" #define uchar unsigned char
uchar i ;//全部全局变量 uchar code str1[10]="nihao" ;//code型必须在定义时给值 uchar str2[8]; //暂时不给值
main() { void chchsh();//声明 void bote(); void jshd(); void fsd(); bote(); //波特率,不用中断 printf("%s",str1); //为什么输入输出总是字符间有间隔 ?应该//为hello,但是确实h,e,l,l 字符间间隔0x00。 jshd(); //单个输入 printf("
"); //好象没起作用 fsd(); //单个输出
TI=1; //用完以后要ti为1才可以进行printf 为什么? printf("
"); scanf("%s",str2); //一次输入 printf("
%s
",str1); //自动输出 printf("%s
",str2); chchsh(); //开放中断 i=0; SBUF=str1;//中断方式发送一次 for(;;) {;} } //**************************** void bote()//波特率 { SCON=0x50; TMOD|=0x20; PCON|=0x80; TH1=0xfd; TR1=1; TI=1; //为什么初始化时候ti要为1?? }
void chchsh()//开放串口中断 {IE=0x90; }
void jshd()//单个接受 { for(i=0;i<8;i++)//送给str2 { while(1)//等待接受标志 { if(RI) break ; //接受到则break跳出while } RI=0 ;//清零 str2=SBUF ;//送出 i++;//下一个 } }
void fsd() //单个发送 { for(i=0;i<8;i++) //个数 { SBUF=str2;//发送 i++; //下一个 while(1) { if(!TI) //等待 {;} else break; //直到为1则跳出while死循环 } TI=0 ;//清零 } }
void chkou() interrupt 4 //串口中断 { TI=0; //清标志 i++; //下一个 if(i==8) //如果达到8个,关中断整个程序完 ES=0; } |