您的位置 首页 模拟

51单片机学习笔记(六)_串口中止通讯+定时器2串口中止

51单片机默认使用定时器1作为串口通信的波特率发生器、定时器1中断通信,串口与定时器1冲突,在遇到定时器不够用的时候可以用定时器2#includ…

51单片机默许运用定时器1作为串口通讯的波特率发生器、定时器1中止通讯,串口与定时器1抵触,在遇到定时器不够用的时分可以用定时器2

#include void DelayMs(unsigned int i);void SerialInit();void SendByte(unsigned char sbyte);void SendString(unsigned char *pstr);void main(void){SerialInit();while(1);	  //注:必需求无限循环}/*//单片机时钟周期:11.0592MHz   以时钟1作为波特率发生器void SerialInit(){TMOD=0x20;   //设置T1工作方法为方法2TH1=0xfd; //给定时器高位装初值TL1=0xfd; //给定时器低位装初值TR1=1;  //开定时器//以上是设置波特率SM0=0;  //设置串口通讯方法为方法1SM1=1;  REN=1;  //串口是否接纳数据的开关EA=1; //总中止翻开,选用查询法时不必翻开中止ES=1; //串口中止开关,选用查询法时不必翻开中止}*///单片机时钟周期:11.0592MHz	   以时钟T2作为波特率发生器void SerialInit(){PCON &= 0x7F;      //波特率不倍速 SMOD=0SCON = 0x50;       //方法1,8位数据,可变波特率,接纳答应T2CON  = 0x34;   RCAP2H = 0xFF;    RCAP2L = 0xDC;  TH2    = 0xFF;  TL2    = 0xDC;EA=1; //总中止翻开,选用查询法时不必翻开中止 ES = 1;          //串口中止开关,选用查询法时不必翻开中止}//串口中止函数:void SerialPortInte(void) interrupt 4 //选用串口中止法收发数据{unsigned char rbyte;if(RI){     //RI=1,判定为串口接纳到了数据,RI要清零,RI=0;rbyte=SBUF; if(rbyte==0x0A){ 	  SendString("换行");}else if(rbyte==0x0D){SendString("回车");}else{SendByte(rbyte); }}}//串口发送一个字节:void SendByte(unsigned char sbyte){ SBUF=sbyte; //发送数据while(!TI); //等候发送完结TI=0; //清零发送标志位}//串口发送一个字符串:void SendString(unsigned char *pstr) //界说指针{while(*pstr!=\0) //字符串是否发完{SendByte(*pstr);//发送字符串数据pstr++; //指向下一个字符}}void DelayMs(unsigned int i)  //延时i ms{unsigned int j;while(i--){for(j = 0; j < 125; j++);}}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/moni/263721.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部