基于Proteus的單片機串口通信仿真_第1頁
基于Proteus的單片機串口通信仿真_第2頁
基于Proteus的單片機串口通信仿真_第3頁
基于Proteus的單片機串口通信仿真_第4頁
基于Proteus的單片機串口通信仿真_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Proteus基于Proteus基于Proteus的串口通信仿真班級:電信13-2姓名:段學亮鄧成智崔俊杰鄧石磊陳亮高金玉成績:電子與信息工程學院電子與信息工程學院信息與通信工程系設計要求1.1甲單片機向乙單片機機發(fā)送控制命令字符,甲單片機同時接收乙單片機機發(fā)送的數字,并顯示在數碼管上。1.2乙機程序接收甲機發(fā)送字符并完成相應動作乙機接收到甲機發(fā)送的信號后,根據相應信號控制LED完成不同閃爍動作。2.仿真電路圖串口通信仿真電路圖如圖一圖1:串口通信仿真電路圖3.串口通信C51程序/*名稱:甲機串口程序說明:甲機向乙機發(fā)送控制命令字符,甲機同時接收乙機發(fā)送的數字,并顯示在數碼管上。*/#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintsbitLED1=P1^0;sbitLED2=P1^3;sbitK1=P1^7;ucharOperation_No=0; //操作代碼//數碼管代碼ucharcodeDSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//延時voidDelayMS(uintms){ uchari; while(ms--)for(i=0;i<120;i++);}//向串口發(fā)送字符voidPutc_to_SerialPort(ucharc){ SBUF=c; while(TI==0); TI=0;}//主程序voidmain(){ LED1=LED2=1; P0=0x00; SCON=0x50; //串口模式1,允許接收 TMOD=0x20; //T1工作模式2 PCON=0x00; //波特率不倍增 TH1=0xfd; TL1=0xfd; TI=RI=0; TR1=1; IE=0x90; //允許串口中斷 while(1) { DelayMS(100); if(K1==0) //按下K1時選擇操作代碼0,1,2,3 { while(K1==0); Operation_No=(Operation_No+1)%4; switch(Operation_No) //根據操作代碼發(fā)送A/B/C或停止發(fā)送 { case0: Putc_to_SerialPort('X'); LED1=LED2=1; break; case1: Putc_to_SerialPort('A'); LED1=~LED1;LED2=1; break; case2: Putc_to_SerialPort('B'); LED2=~LED2;LED1=1; break; case3: Putc_to_SerialPort('C'); LED1=~LED1;LED2=LED1; break; } } }}//甲機串口接收中斷函數voidSerial_INT()interrupt 4{ if(RI) { RI=0; if(SBUF>=0&&SBUF<=9)P0=DSY_CODE[SBUF]; elseP0=0x00; }}/*名稱:乙機程序接收甲機發(fā)送字符并完成相應動作說明:乙機接收到甲機發(fā)送的信號后,根據相應信號控制LED完成不同閃爍動作。*/#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintsbitLED1=P1^0;sbitLED2=P1^3;sbitK2=P1^7;ucharNumX=-1;//延時voidDelayMS(uintms){ uchari; while(ms--)for(i=0;i<120;i++);}//主程序voidmain(){ LED1=LED2=1; SCON=0x50; //串口模式1,允許接收 TMOD=0x20; //T1工作模式2 TH1=0xfd; //波特率9600 TL1=0xfd; PCON=0x00; //波特率不倍增 RI=TI=0; TR1=1; IE=0x90; while(1) { DelayMS(100); if(K2==0) { while(K2==0); NumX=++NumX%11; //產生0~10范圍內的數字,其中10表示關閉 SBUF=NumX; while(TI==0); TI=0; } }}voidSerial_INT()interrupt4{ if(RI) //如收到那么LED那么動作 { RI=0; switch(SBUF) //根據所收到的不同命令字符完成不同動作 { case'X': LED1=LED2=1;break; //全滅 case'A': LED1=0;LED2=1;break; //LED1亮 case'B': LED2=0;LED1=1;break; //LED2亮 case'C': LED1=LED2=0; //全亮 } }}4.交通燈仿真效果4.1按下甲單片機的按鈕向單片機乙發(fā)送數據,再松開甲單片機的按鈕,此時甲單片機的LED1和乙單片機的LED3亮如下列圖4-1。4-1:甲機的LED1和乙機的LED3分別點亮4.2再次按下甲單片機的按鈕向單片機乙發(fā)送數據,再松開甲單片機的按鈕,此時甲單片機的LED2和乙單片機的LED4亮如下列圖4-2。4-2:甲機的LED2和乙機的LED4分別點亮4.3再次按下甲單片機的按鈕向單片機乙發(fā)送數據,再松開甲單片機的按鈕,此時甲單片機的LED1、LED2和乙單片機的LED3、LED4亮如下列圖4-3。4-3:甲機的LED1、LED2和乙機的LED3、LED4全部點亮4.4按下乙單片機的按鈕向單片機甲發(fā)送數據,再松開乙單片機的按鈕,此時甲單片機的數碼管顯示‘0’如下列圖4-4。此乙單片機的串口程序可以控制甲單片機的數碼管從0顯示到9.4-4:甲機的數碼管點亮,顯示‘0’4.5不停按下和松開乙單片機的按鈕向單片機甲發(fā)送數據,甲單片機的數碼管顯示從‘0’到9,以此循環(huán)。當數碼管顯示‘9’時,如下列圖4-5。4-4:甲機的數碼管點亮,顯示‘9’總結在進行串口通信仿真任務的時候,我們通過在網上查閱單片機串口通信的根本原理,搞懂了其工作原理后,便開始了對串口通信的電路進行了構建,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論