|
/*-----------------------------------------------------------------------------
* 實(shí) 驗(yàn) 名 : RS232串口試驗(yàn)
* 實(shí)驗(yàn)說(shuō)明 : 單片機(jī)串口接收數(shù)據(jù)控制燈亮滅
* 連接方式 :
* 注 意 : 該試驗(yàn)使用的晶振是11.0592
*******************************************************************************/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar PuZh[36] = "xxxxxxxxxxxx";
//--定義使用的IO--//
sbit LED=P2^0;
//--聲明全局函數(shù)--//
void UsartConfiguration();
void Delay_1ms(uint i);
/********************************************************************
* 名稱 : Com_Int()
* 功能 : 串口中斷子函數(shù)
* 輸入 : 無(wú) * 輸出 : 無(wú)
***********************************************************************/
void Com_Int(void) interrupt 4
{
uchar i;
uchar receive_data;
EA = 0;
if(RI == 1) //當(dāng)硬件接收到一個(gè)數(shù)據(jù)時(shí),RI會(huì)置位
{
RI = 0;
receive_data = SBUF;//接收到的數(shù)據(jù)
if(receive_data == '1')
{
LED =0;//接收到1亮燈
}
else
{
LED =1; //其他情況燈滅
}
}
for(i=0; i<36; i++)
{
SBUF = PuZh[ i]; //將要發(fā)送的數(shù)據(jù)放入到發(fā)送寄存器
while(!TI); //等待發(fā)送數(shù)據(jù)完成
TI=0; //清除發(fā)送完成標(biāo)志位
Delay_1ms(1);
}
EA = 1;
}
/*******************************************************************************
* 函 數(shù) 名 : main
* 函數(shù)功能 : 主函數(shù)
* 輸 入 : 無(wú)
* 輸 出 : 無(wú)
*******************************************************************************/
void main()
{
UsartConfiguration();//初始化串口
while(1);
}
/*******************************************************************************
* 函 數(shù) 名 : UsartConfiguration()
* 函數(shù)功能 : 設(shè)置串口
* 輸 入 : 無(wú)
* 輸 出 : 無(wú)
*******************************************************************************/
void UsartConfiguration()
{
SCON=0X50; //設(shè)置為工作方式1,8位數(shù)據(jù),可變波特率
TMOD=0X20; //設(shè)置計(jì)數(shù)器工作方式2
PCON=0X00; //波特率不加倍
TH1=0XFd; //計(jì)數(shù)器初始值設(shè)置,9600@11.0592MHz
TL1=0XFd;
TR1=1; //打開(kāi)計(jì)數(shù)器
ES = 1; //開(kāi)串口中斷
EA = 1; //開(kāi)總中斷
}
/********************************************************************
* 名稱 : Delay_1ms()
* 功能 : 延時(shí)子程序,延時(shí)時(shí)間為 1ms
* x * 輸入 : x (延時(shí)一毫秒的個(gè)數(shù))
* 輸出 : 無(wú)
***********************************************************************/
void Delay_1ms(uint i)//1ms延時(shí)
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
|
|