|
PC機(jī)發(fā)送數(shù)據(jù)給單片機(jī),然后單片機(jī)將數(shù)據(jù)返發(fā)給PC機(jī)!硬件介紹:P0口接LED燈,P3.1與P3.0接串口通訊端!
#include <reg52.h>//頭文件
#define uchar unsigned char//宏定義
#define uint unsigned int//宏定義
bit a;//定義一個(gè)變量位
uchar yin;//定義一個(gè)暫存器
/**************主函數(shù)************/
void main()
{
TMOD=0X20;//設(shè)置寄存器1工作方式為2
TR1=1;//打開(kāi)定時(shí)器1
TH1=0XFD;//賦值給TH1
TL1=0XFD;//賦值給TL1,波特率為9600
SM0=0;//設(shè)置串口工作方式為1
SM1=1;//設(shè)置串口工作方式為1
REN=1;//打開(kāi)允許接收控制端
EA=1;//打開(kāi)總中斷
ES=1;//打開(kāi)串口中斷
while(1)
{
if(a)//判斷位是否為1,若為1就執(zhí)行下語(yǔ)句
{
a=0;//將位置1
ES=0;//串口中斷關(guān)掉,防止它發(fā)送數(shù)據(jù)時(shí)又會(huì)產(chǎn)生中斷,造成發(fā)送死循環(huán)。
SBUF=yin;//將暫存器數(shù)據(jù)給SBUF寄存器
while(TI==0);//判斷數(shù)據(jù)是否發(fā)送完成了?
TI=0;//將發(fā)送標(biāo)志位清0
ES=1;//將中斷打開(kāi),以下一次發(fā)送數(shù)據(jù)
}
}
}
/**************中斷服務(wù)子程序************/
void yin1() interrupt 4
{
RI=0;//有接收到數(shù)據(jù)后就清0
P0=SBUF;//將數(shù)據(jù)給P0
yin=SBUF;//將數(shù)據(jù)給yin暫存器
a=1;//將標(biāo)志位置1
}
|
|