微算機(二) -- 8051's UART mode1 communication 班 級: 通訊二甲 學 號: B09622048 學 生: 楊 穎 穆 老 師: 王 志 湖
大綱 目的 串列原理 流程圖 程式 實驗結果
目的 Using 8051's UART mode1 make communication with your PC or other 51's.
串列原理(串列控制暫存器) => 0x50 SCON 0 1 0 1 0 0 0 0 SM0 SM1 SM2 REN TB8 RB8 TI RI 0 1 0 1 0 0 0 0 模式 SM0 SM1 1 2 3 選擇串列阜模式1 REN=1,接收串列輸入資料
串列原理(計時器模式控制暫存器) => 0x20 TMOD Timer1 Timer0 0 0 1 0 0 0 0 0 模式 SM0 SM1 GATE C/T M1 M0 Timer1 Timer0 0 0 1 0 0 0 0 0 模式 SM0 SM1 1 2 3 C/T:為計時器 選擇工作模式2
串列原理(中斷致能控制暫存器) => 0x90 IE 1 0 0 1 0 0 0 0 EA:中斷由各中斷位元設定 ES:致能串列阜中斷 EA ET2 ES ET1 EX1 ET0 EX0 1 0 0 1 0 0 0 0 EA:中斷由各中斷位元設定 ES:致能串列阜中斷
流程圖 yes no no yes yes no 開始 串列工作模式1 計時工作模式2 開始 接收中斷 RI=1? 溢位率=9600鮑率 讀取指撥開關狀態 no 接收資料 送至P2 清除TI F0=1 no 狀態改變? yes 回主程式 串列阜忙? yes no 資料送出
程式(一) #include"reg51.h" //函式庫 sfr P4 = 0xD8; //判斷是否進入燒錄模式 sbit P4_3 = P4^3; //判斷是否進入燒錄模式 char a=0xff,b; //宣告變數a,b,a為遮默 int main(void){ //主程式 void(*isp) (void)=0xf800; //判斷是否進入燒錄模式 if(P4_3==0)(*isp)(); //判斷是否進入燒錄模式 SCON=0x50; //工作在MOD1,REN=1 TMOD=0x20; //Timer1工作在MOD2 TH1=253; //鮑率=9600 bps TR1=1; //啟動Timer1 IE=0x90; //中斷致能 while(1){ b=P1; //指撥開關數值存入 if(b!=a){ //判斷指撥開關值是否有變化 a=b; //將新的數值存入a SBUF=b; //將新的數值傳送出去 F0=0; //清除回應旗號 }
程式(二) void SCON_int(void)interrupt 4 { //中斷副程式 if(RI==1){ //判別是否為接受中斷 P2=SBUF; //接收到資料輸出至P2 RI=0; //清除接收旗號 } else{ //否則為發送中斷 TI=0; //清除發送旗號 F0=1; //設定回應旗號=1
實驗結果
實驗結果
END