资讯详情

STC12单片机串口2的应用

心得:串口2只能使用“独立波特率发生器”作为波特率发生器; 串口1可以用定时器1做波特率发生器,也可以选择“独立波特率发生器”作为波特率发生器。 stc12c5a.hstc12的头文件从:http://www.51hei.com/mcu/3282.html这里下载.

双串口.c //******************************(C12串口2应用)***************************************** // 马梓熔 //2012-12-4 //*************************************************************************************** #include "STC12C5A.h" #define uchar unsigned char #define uint unsigned int #define Buf_Max 40 uchar i; uchar Rec_Buf[]="hello! mazirong\n"; //uchar Rec_Buf[Buf_Max]; 这样写上位写什么 下位机接收什么,大大增加了灵活性 //********************延时函数 void delay(uint z) { uint i,j; for(i=z;i>0;i--) for(j=110;j>0;j--); } //********************串口2初始化 void Serial_Iint() { S2C=0x50; //S2SM0 S2SM1=0 1 S2REN=1 //串口2的工作方式1,接收位允许 PCON=0x00; //波特率不加倍 AUXR=0x10; //R=1,允许独立波特率发生器运行 BRT=0XFD; //独特波特率发生器定时器 EA=1; IE2=0x01; //开串口2中断 } //*******************发送一个字符 void Send_Char(uchar a) { IE2=0x00; S2BUF=a; delay(200); while(!(S2CON&0x02)); //while(!S2) 等待S2TI变为1 S2CON&=0xFD; //S2TI清0 IE2=0x01; } //*******************发送一个字符串 void Send_String(uchar *tab) { IE2=0x00; while(*tab!='\0') { Send_Char(*tab++); } IE2=0x01; } //********************主函数 void main() { while(1) { Serial_Iint(); delay(1000); Send_String(Rec_Buf); delay(1000); } } //********************串口2中断函数 void Serial_2Int() interrupt 8 { IE2=0x00; //关串口中断,防止中断的嵌套 if(S2CON&0x02) //如果是串口2发送中断(S2TI)不进行处理 { S2CON&=0xFD; //S2TI清0 } if(S2CON&0x01) { S2CON&=0xFE; //S2RI清0 Rec_Buf[i]=S2BUF; i++; if(i>Buf_Max) { i=0; } } IE2=0x01; //开启串口中断 }

-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台