51單片機(jī) 特殊功能寄存器(SFR) SBUF使用方法 作者: 時(shí)間:2016-11-24 來源:網(wǎng)絡(luò) 加入技術(shù)交流群 掃碼加入和技術(shù)大咖面對(duì)面交流海量資料庫(kù)查詢 收藏 串行口中有兩個(gè)緩沖寄存器SBUF,一個(gè)是發(fā)送寄存器,一個(gè)是接收寄存器,在物理結(jié)構(gòu)上是完全獨(dú)立的。它們都是字節(jié)尋址的寄存器,字節(jié)地址均為99H。這個(gè)重疊的地址靠讀/寫指令區(qū)分:串行發(fā)送時(shí),CPU向SBUF寫入數(shù)據(jù),此時(shí)99H表示發(fā)送SBUF;串行接收時(shí),CPU從SBUF讀出數(shù)據(jù),此時(shí)99H表示接收SBUF。 單片機(jī)串口 #include #include #define unit unsigned int #define uchar unsigned char uchar date; uchar recFlag;//接收數(shù)據(jù)標(biāo)識(shí),0 未接收數(shù)據(jù) 1 接收數(shù)據(jù) void init_serial(); void send(); void receive(); main() { init_serial(); IE=0; //屏蔽中斷 while(1) { receive(); send();} } void init_serial() //初始化串口 { TMOD=0x20; //定時(shí)器T1使用工作方式2 TH1=250; //設(shè)置初值 TH0=250; TR1=1; //開始計(jì)時(shí) PCON=0x80; //SMOD=1; SCON=0x50; //工作方式1,波特率9600bit/s,允許接收 TI=1; } void send() { if(TI==1) //檢測(cè)輸出是否READY { if(recFlag==1) //是否接收過數(shù)據(jù) { SBUF=date; //發(fā)送數(shù)據(jù) recFlag=0; TI=0; } } } void receive() { if(RI==1) //檢測(cè)是否有數(shù)據(jù)接收 { date=SBUF; //接收數(shù)據(jù) recFlag=1; //設(shè)置接收標(biāo)識(shí)符 RI=0; } }
評(píng)論