">
51單片機默認(rèn)使用定時器1作為串口通信的波特率發(fā)生器、定時器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); //注:必需要無限循環(huán)
}
/*
//單片機時鐘周期:11.0592MHz 以時鐘1作為波特率發(fā)生器
void SerialInit(){
TMOD=0x20; //設(shè)置T1工作方式為方式2
TH1=0xfd; //給定時器高位裝初值
TL1=0xfd; //給定時器低位裝初值
TR1=1; //開定時器
//以上是設(shè)置波特率
SM0=0; //設(shè)置串口通訊方式為方式1
SM1=1;
REN=1; //串口是否接收數(shù)據(jù)的開關(guān)
EA=1; //總中斷打開,采用查詢法時不用打開中斷
ES=1; //串口中斷開關(guān),采用查詢法時不用打開中斷
}
*/
//單片機時鐘周期:11.0592MHz 以時鐘T2作為波特率發(fā)生器
void SerialInit(){
PCON &= 0x7F; //波特率不倍速 SMOD=0
SCON = 0x50; //方式1,8位數(shù)據(jù),可變波特率,接收允許
T2CON = 0x34;
RCAP2H = 0xFF;
RCAP2L = 0xDC;
TH2 = 0xFF;
TL2 = 0xDC;
EA=1; //總中斷打開,采用查詢法時不用打開中斷
ES = 1; //串口中斷開關(guān),采用查詢法時不用打開中斷
}
//串口中斷函數(shù):
void SerialPortInte(void) interrupt 4 //采用串口中斷法收發(fā)數(shù)據(jù)
{
unsigned char rbyte;
if(RI){ //RI=1,判定為串口接收到了數(shù)據(jù),RI要清零,
RI=0;
rbyte=SBUF;
if(rbyte==0x0A){
SendString("換行");
}else if(rbyte==0x0D){
SendString("回車");
}else{
SendByte(rbyte);
}
}
}
//串口發(fā)送一個字節(jié):
void SendByte(unsigned char sbyte)
{
SBUF=sbyte; //發(fā)送數(shù)據(jù)
while(!TI); //等待發(fā)送完成
TI=0; //清零發(fā)送標(biāo)志位
}
//串口發(fā)送一個字符串:
void SendString(unsigned char *pstr) //定義指針
{
while(*pstr!='\0') //字符串是否發(fā)完
{
SendByte(*pstr);//發(fā)送字符串?dāng)?shù)據(jù)
pstr++; //指向下一個字符
}
}
void DelayMs(unsigned int i) //延時i ms
{
unsigned int j;
while(i--)
{
for(j = 0; j < 125; j++);
}
}
上海紫卓電子科技有限公司
地址:上海市嘉定工業(yè)區(qū)葉城路925號B區(qū)4幢J
網(wǎng)址:fashioncenter.cn
電話:021-31007998
傳真:021-31007998
郵件:569998567@qq.com
在線咨詢:
569998567
致力成為優(yōu)秀的IC供應(yīng)配單專家及IC代理商
竭力為客戶提供一站式電子元器件采購及IC配套服務(wù)
上海紫卓電子科技有限公司 版權(quán)所有 未經(jīng)授權(quán)禁止復(fù)制或鏡像
CopyRight 2020-2025 fashioncenter.cn All rights reserved