單片機(jī)串行通信實(shí)驗(yàn)報告實(shí)驗(yàn)要求、原理、仿真圖及例程_第1頁
單片機(jī)串行通信實(shí)驗(yàn)報告實(shí)驗(yàn)要求、原理、仿真圖及例程_第2頁
單片機(jī)串行通信實(shí)驗(yàn)報告實(shí)驗(yàn)要求、原理、仿真圖及例程_第3頁
單片機(jī)串行通信實(shí)驗(yàn)報告實(shí)驗(yàn)要求、原理、仿真圖及例程_第4頁
單片機(jī)串行通信實(shí)驗(yàn)報告實(shí)驗(yàn)要求、原理、仿真圖及例程_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、嵌入式系統(tǒng)原理與實(shí)驗(yàn)實(shí)驗(yàn)指導(dǎo)實(shí)驗(yàn)三 調(diào)度器設(shè)計基礎(chǔ)一、 實(shí)驗(yàn)?zāi)康暮鸵?. 熟練使用Keil C51 IDE集成開發(fā)環(huán)境,熟練使用Proteus軟件。2. 掌握Keil與Proteus的聯(lián)調(diào)技巧。3. 掌握串行通信在單片機(jī)系統(tǒng)中的使用。4. 掌握調(diào)度器設(shè)計的基礎(chǔ)知識:函數(shù)指針。二、 實(shí)驗(yàn)設(shè)備1. PC機(jī)一套2. Keil C51開發(fā)系統(tǒng)一套3. Proteus 仿真系統(tǒng)一套三、 實(shí)驗(yàn)內(nèi)容1. 甲機(jī)通過串口控制乙機(jī)LED閃爍(1) 要求a. 甲單片機(jī)的K1按鍵可通過串口分別控制乙單片機(jī)的LED1閃爍,LED2閃爍,LED1和LED2同時閃爍,關(guān)閉所有的LED。b. 兩片8051的串口都工作在模式

2、1,甲機(jī)對乙機(jī)完成以下4項(xiàng)控制。i. 甲機(jī)發(fā)送“A”,控制乙機(jī)LED1閃爍。ii. 甲機(jī)發(fā)送“B”,控制乙機(jī)LED2閃爍。iii. 甲機(jī)發(fā)送“C”,控制乙機(jī)LED1,LED2閃爍。iv. 甲機(jī)發(fā)送“C”,控制乙機(jī)LED1,LED2停止閃爍。c. 甲機(jī)負(fù)責(zé)發(fā)送和停止控制命令,乙機(jī)負(fù)責(zé)接收控制命令并完成控制LED的動作。兩機(jī)的程序要分別編寫。d. 兩個單片機(jī)都工作在串口模式1下,程序要先進(jìn)行初始化,具體步驟如下:i. 設(shè)置串口模式(SCON)ii. 設(shè)置定時器1的工作模式(TMOD)iii. 計算定時器1的初值iv. 啟動定時器v. 如果串口工作在中斷方式,還必須設(shè)置IE和ES,并編寫中斷服務(wù)程序

3、。(2) 電路原理圖Figure 1 甲機(jī)通過串口控制乙機(jī)LED閃爍的原理圖(3) 程序設(shè)計提示a. 模式1下波特率由定時器控制,波特率計算公式參考:b. 可以不用使用中斷方式,使用查詢方式實(shí)現(xiàn)發(fā)送與接收,通過查詢TI和RI標(biāo)志位完成。2. 單片機(jī)與PC串口通訊及函數(shù)指針的使用(1) 要求:a. 編寫用單片機(jī)求取整數(shù)平方的函數(shù)。b. 單片機(jī)把計算結(jié)果向PC機(jī)發(fā)送字符串。c. PC機(jī)接收計算結(jié)果并顯示出來。d. 可以調(diào)用Keil C51 stdio.h 中的printf來實(shí)現(xiàn)字符串的發(fā)送。e. 單片機(jī)的數(shù)碼港顯示發(fā)送的次數(shù),每9次清零。(2) 參考電路原理圖Figure 2 單片機(jī)與PC串口通訊

4、及函數(shù)指針的使用原理圖(3) 程序設(shè)計要求a. 編寫求平方函數(shù)時,采用函數(shù)指針來編寫。 b. 參考頭文件模式,完善設(shè)計項(xiàng)目文件結(jié)構(gòu)。四、 思考題1. 如果實(shí)驗(yàn)1如何使用實(shí)驗(yàn)2的成果來改寫?2. 請結(jié)合實(shí)例說明什么是函數(shù)指針及如何使用函數(shù)指針。五、 實(shí)驗(yàn)報告要求1. 簡述編寫C程序,并聯(lián)合調(diào)試程序的過程。2. 解釋編寫的實(shí)驗(yàn)程序的代碼,描述實(shí)驗(yàn)結(jié)果。3. 解答思考題。4. 簡述實(shí)驗(yàn)的心得。嵌入式系統(tǒng)原理及實(shí)驗(yàn)實(shí)驗(yàn)報告Lab 3調(diào)度器設(shè)計基礎(chǔ)一、 甲機(jī)通過串口控制乙機(jī)LED閃爍(一) 實(shí)現(xiàn)原理1. 總體思路通過發(fā)送緩沖寄存器SBUF,以及接收緩沖寄存器SBUF,將在甲機(jī)上初始化的要發(fā)送的數(shù)據(jù)A,B

5、,C,D存入一個數(shù)組,通過超級循環(huán)內(nèi)設(shè)定的一個按鍵控制函數(shù),依次發(fā)送給乙機(jī),由乙機(jī)接收并讓相應(yīng)的LED燈閃爍。2. 硬件設(shè)計上圖所示的是單擊Play以后開始仿真,此時沒有按鍵按下,甲機(jī)乙機(jī)均處于等待狀態(tài)之下。*上圖所示按鍵第一次按下,甲機(jī)發(fā)送字符A,D1燈閃爍,乙機(jī)接收字符A,并顯示相應(yīng)與甲機(jī)D1燈位置對應(yīng)的D2燈閃爍。*以上兩幅圖是在一起的,也許是LED燈啟動以及延遲還有甲、乙機(jī)發(fā)送接收數(shù)據(jù)時間差等各方面的差異,甲機(jī)的D3燈和乙機(jī)的D4燈亮不到一塊去,它們交替著閃爍,此閃彼滅??傊陨蟽煞鶊D所呈現(xiàn)的,是當(dāng)按鍵第二次按下,甲機(jī)發(fā)送字符B,并閃爍D3燈,乙機(jī)接收字符B,并閃爍相應(yīng)的D4燈。*上

6、圖所示按鍵第三次按下,控制甲機(jī)發(fā)送字符C,并同時閃爍D1和D3燈,與此同時,乙機(jī)接收甲機(jī)發(fā)來的字符C,并同時閃爍D2、D4燈。圖中所示的是LED燈一閃一滅時的亮狀態(tài),滅狀態(tài)的截圖此處省去。*上圖所示按鍵第四次按下,甲機(jī)向乙機(jī)發(fā)送字符D,同時使得D1、D3燈滅掉,乙機(jī)接收完字符D之后,也使得其控制的D2、D4燈停止閃爍。3. 軟件設(shè)計流程圖: 開始 是否有按鍵按下? 否 是第幾次按下按鍵? 1 2 3 4 甲機(jī)發(fā)送字符:A B C D LED1 LED3 LED1 LED1&LED3全滅閃爍 閃爍 &LED3 都閃爍 乙機(jī)接收相應(yīng)字符A B C D LED2 LED4 LED2 LED2&LED

7、4全滅閃爍 閃爍 &LED4 都閃爍關(guān)鍵代碼段+解釋:甲機(jī)代碼段/*/按鍵控制函數(shù)void button(void)/按鍵控制函數(shù)debouncing();/調(diào)用消抖函數(shù)if(n=1)SBUF=sendi;/發(fā)送第i個數(shù)據(jù)while(TI=0);/查詢等待發(fā)送是否完成 TI=0;/發(fā)送完成,TI由軟件清0n=0;switch(i)case 0: while(debouncing()=0)D1=D1;delay_ms(150);break;/甲機(jī)D3燈滅狀態(tài),D1燈不斷閃爍,直到有新的按鍵按下為止case 1: D1=1;while(1)D3=D3;delay_ms(150);if(deboun

8、cing()break;break;/甲機(jī)D1燈滅狀態(tài),D3燈不斷閃爍,直到有新的按鍵按下為止case 2: D3=1;while(1)D1=D1;D3=D3;delay_ms(150);if(debouncing()break;break;/甲機(jī)D1、D3燈一起不斷閃爍,直到有新的按鍵按下為止case 3: D1=1;D3=1;break;/甲機(jī)D1、D3燈均處于滅狀態(tài)default: ;i+;if(i=4)/使控制功能能循環(huán)反復(fù)地執(zhí)行i=0;/使控制功能能循環(huán)反復(fù)地執(zhí)行*/*/甲機(jī)相關(guān)初始化TMOD=0x20;/定時器T1工作于方式2TL1=0xf4;/波特率為2400bpsTH1=0xf

9、4;TR1=1;SCON=0x40;/定義串行口工作于方式1*/乙機(jī)代碼段/*/乙機(jī)接收顯示函數(shù)void disp(void)/乙機(jī)接收顯示函數(shù)REN=1;/允許接收while(RI=0);/查詢等待接收標(biāo)志為1,表示接收到數(shù)據(jù) bufferi=SBUF;/接收數(shù)據(jù)RI=0;/RI由軟件清0 switch(i) case 0: while(!RI)D2=D2;delay_ms(150);break;/乙機(jī)D4燈滅狀態(tài),D2燈不斷閃爍,直到乙機(jī)接收到新傳來的數(shù)據(jù)為止case 1: D2=1;while(1)D4=D4;delay_ms(150);if(RI)break;break;/乙機(jī)D2燈滅

10、狀態(tài),D4燈不斷閃爍,直到乙機(jī)接收到新傳來的數(shù)據(jù)為止case 2: D4=1;while(1)D2=D2;D4=D4;delay_ms(150);if(RI)break;break;/甲機(jī)D2、D4燈一起不斷閃爍,直到乙機(jī)接收到新傳來的數(shù)據(jù)為止case 3: D2=1;D4=1;break;/乙機(jī)D2、D4燈均處于滅狀態(tài)default: ; i+;if(i=4)/使控制功能能循環(huán)反復(fù)地執(zhí)行 i=0;/使控制功能能循環(huán)反復(fù)地執(zhí)行 */*/乙機(jī)相關(guān)初始化TMOD=0x20;/定時器T1工作于方式2TL1=0xf4;/波特率為2400bpsTH1=0xf4;TR1=1;SCON=0x40;/定義串行

11、口工作于方式1*/(二) 調(diào)試1. 調(diào)試的方式軟件仿真調(diào)試現(xiàn)象: 單擊Play以后開始仿真,此時沒有按鍵按下,甲機(jī)乙機(jī)均處于等待狀態(tài)之下。 P1.0口按鍵第一次按下以后,甲機(jī)D1燈閃爍,同時乙機(jī)D2燈也閃爍。 當(dāng)按鍵第二次按下,甲機(jī)閃爍D3燈,乙機(jī)閃爍D4燈。 按鍵第三次按下時,甲機(jī)同時閃爍D1和D3燈,與此同時,乙機(jī)同時閃爍D2、D4燈。 按鍵第四次按下,甲機(jī)的D1、D3燈同時滅掉,乙機(jī)控制的D2、D4燈也都停止閃爍。 若接下來還有按鍵按下,那將回到,如此循環(huán)執(zhí)行下去。(三) 實(shí)驗(yàn)再思考1. 進(jìn)一步改進(jìn)的設(shè)想可以用串行口中斷服務(wù)程序來實(shí)現(xiàn)。2. 實(shí)驗(yàn)的收獲學(xué)會了雙機(jī)串行口通信3. 實(shí)驗(yàn)中尚不

12、能解決的疑問的確有個疑問:若是我把程序中的任何一個switch語句改成如下形式:switch(SBUF) case A: ; break; case B: ; break; case C: ; break; case D: ; break; default: ;這樣的switch語句無論出現(xiàn)在甲機(jī)還是乙機(jī)的程序里面,都無法實(shí)現(xiàn)相應(yīng)的任何控制功能了。SBUF存儲數(shù)據(jù)的情況具體是怎樣的呢?switch語句不能夠引用SBUF嗎?二、 單片機(jī)與PC串口通訊及函數(shù)指針的使用(一) 實(shí)現(xiàn)原理1. 總體思路按鍵接的是P3.2復(fù)用口,于是就想到用外部中斷0控制。所以,將數(shù)碼管顯示程序以及串口通訊程序都一起放入

13、外部中斷INT0服務(wù)程序當(dāng)中,就可以實(shí)現(xiàn)實(shí)驗(yàn)要求。另外,在C51程序編寫當(dāng)中還應(yīng)當(dāng)特別注意以下幾點(diǎn):TH1=0xf3;TL1=0xf3;/設(shè)置串行口波特率為2400bps,定時器初值,波特率設(shè)置 非常嚴(yán)格/要是設(shè)置錯了,在發(fā)送和接收的時候,就會出現(xiàn)莫名其妙的符號,比如說:xxxxxxx 諸如此類.O_O調(diào)用printf之前應(yīng)該關(guān)閉串口中斷使能 ES=0;/禁止串行口中斷 TI=1;/必須置高TI,RI RI=1; printf(%d*%d=%d,n,n,c); putchar(n); while(!TI);/等待printf語句執(zhí)行完畢 while(!RI);/等待printf語句執(zhí)行完畢2.

14、 硬件設(shè)計上圖所示有關(guān)串口COMPIM的相關(guān)參數(shù)設(shè)置應(yīng)該注意的地方*上圖所示虛擬終端相關(guān)參數(shù)設(shè)置應(yīng)該注意的地方,虛擬終端相關(guān)參數(shù)設(shè)置應(yīng)該與串口的相關(guān)參數(shù)設(shè)置一致,也應(yīng)該與C51編程中串口初始化時設(shè)定的波特率的數(shù)值一致,即都應(yīng)該是2400bps。注意,虛擬終端的RXD應(yīng)當(dāng)與串口第3腳TXD(即發(fā)送端)連接,否則仿真時無法虛擬終端調(diào)試窗口無法顯示printf語句內(nèi)容。*上圖所示的是單擊Play以后開始仿真,此時沒有按鍵按下,數(shù)碼管靜止在顯示0的狀態(tài)當(dāng)中,此時沒有任何的數(shù)據(jù)發(fā)送和接收。*上圖所示當(dāng)?shù)谝淮伟聪掳存I時,觸發(fā)外部中斷,單片機(jī)調(diào)用函數(shù)指針指向的求取整數(shù)平方的函數(shù),并將計算結(jié)果發(fā)送給PC機(jī),此

15、時虛擬終端顯示:12=1; 即1=1; (似乎虛擬終端顯示框要顯示的文字在這個截圖里面有點(diǎn)小,看不太清楚),數(shù)碼管此時顯示發(fā)送次數(shù)為1。*上圖所示當(dāng)?shù)?次按鍵按下,數(shù)碼管顯示發(fā)送次數(shù)為5,此時也可以清楚地觀察到虛擬終端調(diào)試窗口的顯示:1*1=12*2=43*3=94*4=165*5=25*數(shù)碼管顯示每9次清零,求整數(shù)平方數(shù)也是09循環(huán),上圖所示虛擬終端顯示結(jié)果有異常情況。到目前為止,我改寫過多種printf語句形式,可是還是解決不了上圖所示的異常顯示問題。為什么會顯示成:$62=36;172=49;82=64;Q92=81; (o)呢?好奇怪!?*如上圖所示,就算我改了printf語句形式,也

16、還是會有同樣的問題出現(xiàn)。*上圖所示是數(shù)碼管每9次清零,然后再執(zhí)行到3的情況,從虛擬終端調(diào)試窗口可見09求平方已經(jīng)循環(huán)執(zhí)行到了第二輪的3。3. 軟件設(shè)計流程圖: 開始初始化定時器1、串口、外部中斷0 等待中斷 是否有外部中斷?否是 轉(zhuǎn)入外部中斷0中斷服務(wù)程序 按鍵消抖 函數(shù)指針調(diào)用求整數(shù)平方函數(shù) 在數(shù)碼管上顯示發(fā)送次數(shù) 發(fā)送求取結(jié)果 查詢等待發(fā)送是否完成 發(fā)送完成,TI由軟件清0 在虛擬終端上顯示求平方結(jié)果 中斷返回 關(guān)鍵代碼段+解釋:/*/串口初始化TH1=0xf3;TL1=0xf3;/設(shè)置串行口波特率為2400bps,定時器初值,波特率設(shè)置非常嚴(yán)格 /要是設(shè)置錯了,在發(fā)送和接收的時候,就會出

17、現(xiàn)莫名其妙的符號,比如說:xxxxxxx 諸如此類.O_OSCON=0x50;/0101,0000:串行口方式1EN=1允許接收,8位異步通信方式,8-bit UART,TI= 0; RI=0 PCON=0x00;/SMOD=0EA=1;/開總中斷允許位ES=1;/開串行口中斷*/*/求取整數(shù)平方函數(shù)uint pow2(uint x)/求取整數(shù)平方函數(shù)uint q;q=x*x;return q;/return返回平方數(shù)結(jié)果*/*/虛擬終端顯示void vir_ter(uint n,uint c)/虛擬終端顯示ES=0;/禁止串行口中斷TI=1;/必須置高TI,RI,TI=1發(fā)送填充字節(jié),中斷“

18、不”使能RI=1;printf(%d*%d=%d,n,n,c);/*.調(diào)用printf之前應(yīng)該關(guān)閉串口中斷使能putchar(n);while(!TI);/等待printf語句執(zhí)行完畢while(!RI);/等待printf語句執(zhí)行完畢ES=1;TI=0;RI=0; */*/外部中斷INT0中斷服務(wù)程序void intsvr0(void) interrupt 0 /外部中斷INT0debouncing();/調(diào)用消抖函數(shù)c=(*p)(n);/用函數(shù)指針形式調(diào)用求取整數(shù)平方函數(shù)disp(n);/在數(shù)碼管上顯示發(fā)送次數(shù)SBUF=c;/發(fā)送求取結(jié)果while(TI=0);/查詢等待發(fā)送是否完成 TI

19、=0;/發(fā)送完成,TI由軟件清0vir_ter(n,c);/在虛擬終端上顯示求平方結(jié)果*/(二) 調(diào)試1. 調(diào)試的方式軟件仿真調(diào)試現(xiàn)象: 單擊Play以后開始仿真,此時沒有按鍵按下,數(shù)碼管靜止在顯示0的狀態(tài)當(dāng)中,此時沒有任何的數(shù)據(jù)發(fā)送和接收。 P3.2口按鍵第一次按下以后,觸發(fā)外部中斷,單片機(jī)調(diào)用函數(shù)指針指向的求取整數(shù)平方的函數(shù),并將計算結(jié)果發(fā)送給PC機(jī),此時虛擬終端顯示:12=1; 即1=1; 不端按下按鍵觸發(fā)外部中斷,當(dāng)外部中斷一到來,單片機(jī)就執(zhí)行調(diào)用函數(shù)指針指向的求取整數(shù)平方數(shù)的函數(shù),并將求取結(jié)果發(fā)送給串口。單片機(jī)09不斷循環(huán)求取整數(shù)平方數(shù),并也循環(huán)顯示在虛擬終端調(diào)試窗口上,數(shù)碼管顯示求

20、取整數(shù)平方數(shù)結(jié)果發(fā)送次數(shù),每9次清零。2. 遇到問題的處理虛擬終端的RXD應(yīng)當(dāng)與串口第3腳TXD(即發(fā)送端)連接,否則仿真時無法虛擬終端調(diào)試窗口無法顯示printf語句內(nèi)容。虛擬終端相關(guān)參數(shù)設(shè)置應(yīng)該與串口的相關(guān)參數(shù)設(shè)置一致,也應(yīng)該與C51編程中串口初始化時設(shè)定的波特率的數(shù)值一致,在此次實(shí)驗(yàn)報告中即都應(yīng)該是2400bps。在編寫C51程序時,TH1=0xf3;TL1=0xf3;/設(shè)置串行口波特率為2400bps。波特率的設(shè)置非常嚴(yán)格,要是設(shè)置錯了,在發(fā)送和接收的時候,就會出現(xiàn)莫名其妙的符號,比如說:xxxxxxx 諸如此類.O_O(三) 實(shí)驗(yàn)再思考1. 進(jìn)一步改進(jìn)的設(shè)想目前還沒有設(shè)計得出外部中斷

21、服務(wù)程序和串行口中斷服務(wù)程序同時一起用的C51程序,遇到很多問題。希望老師今后能指導(dǎo)我們關(guān)于雙重中斷程序的編寫,我自己搗鼓了好久還沒搗鼓出來。2. 實(shí)驗(yàn)的收獲收獲當(dāng)然很多,諸如:虛擬終端的RXD應(yīng)當(dāng)與串口第3腳TXD(即發(fā)送端)連接等等都是我對單片機(jī)新的認(rèn)識,新的收獲。還有:SBUF=c;/發(fā)送求取結(jié)果while(TI=0);/查詢等待發(fā)送是否完成 TI=0;/發(fā)送完成,TI由軟件清0ES=0;/禁止串行口中斷TI=1;/必須置高TI,RI,TI=1發(fā)送填充字節(jié),中斷“不”使能RI=1;printf(%d*%d=%d,n,n,c);/調(diào)用printf之前應(yīng)該關(guān)閉串口中斷使能putchar(n)

22、;while(!TI);/等待printf語句執(zhí)行完畢while(!RI);/等待printf語句執(zhí)行完畢以上語句應(yīng)該熟記,是使能虛擬終端的常用語句。3. 實(shí)驗(yàn)中尚不能解決的疑問上圖所示便是最大的疑問!(四) 附錄(粘貼完整代碼)甲機(jī)通過串口控制乙機(jī)LED閃爍甲機(jī)完整代碼-Target 1-Source Group+F.cF.h+main.c/F.h/#include#define uchar unsigned char#define uint unsigned intsbit D1 = P00;sbit D3 = P03;sbit P1_0 = P10;uint debouncing(voi

23、d);void button(void);void delay_ms(uint xms);/F.c/#includeF.huint n=0;uchar i=0;extern uchar send4;/聲明全局變量void delay_ms(uint xms)/ms級延時函數(shù) uint x,y; for(x=xms;x0;x-)for(y=130;y0;y-);uint debouncing(void)/debouncing:消除抖動的意思,按鍵消抖函數(shù):若確實(shí)有按鍵按下,函數(shù)返回值為1;否則返回值為0if(P1_0=0)/有鍵按下嗎?delay_ms(10); /延時消抖if(P1_0=0)/

24、確實(shí)是有鍵按下n=1;while(P1_0=0);/等待按鍵松開return 1;/若有按鍵按下,函數(shù)返回值為1else return 0;/若無按鍵按下,函數(shù)返回值為0else return 0;/若無按鍵按下,函數(shù)返回值為0void button(void)/按鍵控制函數(shù)debouncing();/調(diào)用消抖函數(shù)if(n=1) SBUF=sendi;/發(fā)送第i個數(shù)據(jù) while(TI=0);/查詢等待發(fā)送是否完成 TI=0;/發(fā)送完成,TI由軟件清0 n=0; switch(i) case 0: while(debouncing()=0)D1=D1;delay_ms(150);break;/

25、甲機(jī)D3燈滅狀態(tài),D1燈不斷閃爍,直到有新的按鍵按下為止case 1: D1=1;while(1)D3=D3;delay_ms(150);if(debouncing()break;break;/甲機(jī)D1燈滅狀態(tài),D3燈不斷閃爍,直到有新的按鍵按下為止case 2: D3=1;while(1)D1=D1;D3=D3;delay_ms(150);if(debouncing()break;break;/甲機(jī)D1、D3燈一起不斷閃爍,直到有新的按鍵按下為止case 3: D1=1;D3=1;break;/甲機(jī)D1、D3燈均處于滅狀態(tài)default: ;i+;if(i=4)/使控制功能能循環(huán)反復(fù)地執(zhí)行i

26、=0;/使控制功能能循環(huán)反復(fù)地執(zhí)行/main.c/#includeF.hvoid main()uchar send=A,B,C,D;/定義要發(fā)送的數(shù)據(jù)TMOD=0x20;/定時器T1工作于方式2TL1=0xf4;/波特率為2400bpsTH1=0xf4;TR1=1;SCON=0x40;/定義串行口工作于方式1D1=1;/初始化D1燈狀態(tài)為熄滅D3=1;/初始化D3燈狀態(tài)為熄滅while(1)button();/調(diào)用按鍵控制函數(shù)乙機(jī)完整代碼-Target 1-Source GroupM.h+M.c+main.c/M.h/#include#define uchar unsigned char#de

27、fine uint unsigned intsbit D2 = P00;sbit D4 = P03;void initLED(void);void flashLED(void);void disp(void);void delay_ms(uint xms);/M.c/#includeM.huchar i=0;uchar buffer=0x00,0x00,0x00,0x00;/定義接收數(shù)據(jù)緩沖區(qū)void disp(void)/乙機(jī)接收顯示函數(shù)REN=1;/允許接收while(RI=0);/查詢等待接收標(biāo)志為1,表示接收到數(shù)據(jù) bufferi=SBUF;/接收數(shù)據(jù)RI=0;/RI由軟件清0 swi

28、tch(i) case 0: while(!RI)D2=D2;delay_ms(150);break;/乙機(jī)D4燈滅狀態(tài),D2燈不斷閃爍,直到乙機(jī)接收到新傳來的數(shù)據(jù)為止case 1: D2=1;while(1)D4=D4;delay_ms(150);if(RI)break;break;/乙機(jī)D2燈滅狀態(tài),D4燈不斷閃爍,直到乙機(jī)接收到新傳來的數(shù)據(jù)為止case 2: D4=1;while(1)D2=D2;D4=D4;delay_ms(150);if(RI)break;break;/甲機(jī)D2、D4燈一起不斷閃爍,直到乙機(jī)接收到新傳來的數(shù)據(jù)為止case 3: D2=1;D4=1;break;/乙機(jī)D

29、2、D4燈均處于滅狀態(tài)default: ;i+; if(i=4)/使控制功能能循環(huán)反復(fù)地執(zhí)行i=0;/使控制功能能循環(huán)反復(fù)地執(zhí)行void delay_ms(uint xms)/ms級延時函數(shù) uint x,y; for(x=xms;x0;x-)for(y=130;y0;y-);/main.c/#includeM.hvoid main()TMOD=0x20;/定時器T1工作于方式2TL1=0xf4;/波特率為2400bpsTH1=0xf4;TR1=1;SCON=0x40;/定義串行口工作于方式1D2=1;/初始化D2燈狀態(tài)為熄滅D4=1;/初始化D4燈狀態(tài)為熄滅while(1)disp();/調(diào)

30、用LED燈顯示函數(shù) 單片機(jī)與PC串口通訊及函數(shù)指針的使用-Target 1-Source Group+main.c+PC.cPC.h/PC.h/#include #include #define uchar unsigned char#define uint unsigned int#define N 9sbit P3_2=P32;uint pow2(uint x);void disp(uint i);void vir_ter(uint i,uint c);void debouncing(void);void delay_ms(uint xms);/ PC.c/#include PC.huchar led10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;uint n=0;uint pow2(uint x)/求取整數(shù)平方函數(shù)uint q;q=x*x;return q;/return返回平方數(shù)結(jié)果void disp(uint i)/發(fā)送次數(shù)數(shù)碼管顯示函數(shù)P0=ledi;/數(shù)值顯示碼送至控制口P0void vir_ter(uint n,uint c)/虛擬終端顯示ES=0;/禁止串行口中斷TI=1;/必須置高TI,RI,TI=1發(fā)送填充字節(jié),中斷“不”使能RI=1;printf(%d*%d=%d,n,n,c)

溫馨提示

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

評論

0/150

提交評論