基本示例分析單片機應(yīng)用系統(tǒng)設(shè)計_第1頁
已閱讀1頁,還剩74頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1. 基本示例分析 2.單片機應(yīng)用系統(tǒng)設(shè)計,單片機C語言編程與設(shè)計,一、基本示例分析:,例1、LED的控制,使用805l的Port 1連接8個LED,以產(chǎn)生跑馬燈的效果。連接好電路并且完成程序之后,您將可以看到8個LED依次輪流閃爍。 在這次練習(xí)中,您將學(xué)會如何使用I/O Port輸出數(shù)據(jù),以及如何使用循環(huán)實現(xiàn)時間延遲。,電路圖,#include void delay (void) /*

2、 delay 函數(shù) */{ unsigned char i,j; /* 這個函數(shù)執(zhí)行時間的延遲 */ for (i=0;i<255;i++) for(j=0;j<255;j++) ;}void main (void) { unsigned char j=0XFE; /*聲明變量 j */ whil

3、e (1) /* 無窮循環(huán) */ { /*依次讓LED 0,1,2,3,4,5,6,7閃爍 */ j=(j<<1) | 0x01; if(j==0XFF) j=0XFE; P1 = j; /* 將數(shù)值輸出到Port1,控制LED亮或滅 */

4、 delay(); /* 調(diào)用 delay 函數(shù)*/ } },例2、指撥開關(guān)的輸入,目的是使用8051的Port l連接到8個LED,Port 2則連接到1個指撥開關(guān),當(dāng)用戶撥動指撥開關(guān)時,相對應(yīng)的LED就會亮或滅。 在這次練習(xí)中,您將學(xué)會如何使用8051輸入數(shù)據(jù)。 例如,您要從Port 2輸入數(shù)據(jù)給變量temp時,可以執(zhí)行temp=P2;,電路圖,#include void d

5、elay (void) /* delay 函數(shù)*/{ unsigned char i,j; /*這個函數(shù)執(zhí)行時間的延遲 */ for (i=0;i<255;i++) for(j=0;j<255;j++);} void main (void) { unsigned char temp; /* 聲明

6、變量temp */ while (1) /* 無窮循環(huán) */ { temp=P2; /* 將P2輸入的數(shù)據(jù)直接放入變量temp當(dāng)中 */ P1=temp; /* 將變量temp中的數(shù)據(jù)直接輸出到Port 1*/ delay(); }},例3、七段顯示器的控

7、制,目的是使用8051的Port 1連接到一個共陽的七段顯示器,然后讓8051輪流顯示0~9。當(dāng)您連接好電路,并且完成程序之后,您將看到七段顯示器依次顯示0~9。 在這次練習(xí)中,您將學(xué)會如何使用805l控制共陽七段顯示器的顯示。,一個共陽七段顯示器的外觀和引腳如圖所示。這個共陽七段顯示器的引腳分別連接到805l的Port l引腳。,電路圖,#include code seven_seg[10]={0XC0, 0X

8、F9, 0XA4, 0XB0, 0X99, 0X92, 0X82, 0XF8, 0X80, 0X90};void delay (void) /* 時間延遲的函數(shù) */ { unsigned char i,j; for (i=0;i<255;i++) for(j=0;j<255;j++)

9、 ;}void main (void) { unsigned char i; /* 變量 i 用來儲存 0~9 */ while (1) /* 無窮循環(huán) */ { for (i=0; i<10; i++) { P1 = seven_seg[i]; /

10、* 輸出 0~9 到共陽七段顯示器*/ delay(); /* 調(diào)用時間延遲函數(shù)delay*/ } }},共陽七段顯示器有一共同接點連接到5V,其余的七支引腳分別如圖所示,因此如果要讓所指定的LED發(fā)光時,就必須輸出0,反之則輸出1,所以我們可以用下表排列出所要顯示字符和必須輸出的信號。下表中,假設(shè)dot點接在最高位,而且不點

11、亮,所以一直都是1 。,將以上的信息編成16進制碼,然后存放在定義為seven_ seg的數(shù)組中。,我們將共陽七段顯示器顯示出0~9的字型碼儲存在程序存儲器中。當(dāng)用戶有固定不變的數(shù)據(jù)時,就可以儲存在程序存儲器中。儲存在程序存儲器的數(shù)據(jù)必須存聲明的變景附加上code,如以下的聲明方式:code seven_seg[10]={0XC0, 0XF9, 0XA4, 0XB0, 0X99, 0X92, 0X82, 0XF8, 0X80,

12、0X90};,例4、計時器Timer0 的溢出中斷控制,在前面,我們曾經(jīng)捉到過使用for循環(huán)實現(xiàn)時間延遲并不是很精確,例如,程序會受到中斷的執(zhí)行而影響延遲時間。在這次實習(xí)中,您將學(xué)會如何使用8051的Timer0計時器溢出中斷實現(xiàn)準確的時間延遲。 本練習(xí)使用8051的Port 1連接到一個共陽七段顯示器,然后利用計時計數(shù)器Timer l,讓8051在指定的時間間隔內(nèi)顯示出0~9。當(dāng)您連接好電路,并且完成程序之后,您將可

13、以看到七段顯示器依次顯示0~ 9。,#include #define TIMER0_COUNT 0xEE11 const seven_seg[10]={0XC0, 0XF9, 0XA4, 0XB0, 0X99, 0X92, 0X82, 0XF8, 0X80, 0X90};unsigned char timer0_tick,i=0;static void timer0_isr(void) interrupt TF0_VECTOR

14、using 1{ TR0=0; TL0=(TIMER0_COUNT & 0x00FF); TH0=(TIMER0_COUNT >> 8); TR0=1; timer0_tick++; if (timer0_tick==200) { i++; if(i==10) i=0; timer0_

15、tick=0; P1=seven_seg[i]; }},static void timer0_initialize(void){ EA=0; /* 設(shè)定系統(tǒng)不接受所有的中斷 */ timer0_tick=0; TR0=0; /* 關(guān)閉Timer0 */ TMOD =0x01;

16、 /* 設(shè)定計時器0為16位的工作模式 */ TL0=(TIMER0_COUNT & 0x00FF); /* 設(shè)定TL0的數(shù)值 */ TH0=(TIMER0_COUNT >> 8); /* 設(shè)定TH0的數(shù)值 */ PT0=0; /* 設(shè)定計時器0有比較高的優(yōu)先級 */ ET0=1; /

17、* 設(shè)定接受Timer0的中斷 */ TR0=1; /* 啟動Timer0 */ EA=1; /* 設(shè)定系統(tǒng)接受中斷 */}void main (void) { timer0_initialize(); while (1); /* 無窮循環(huán)*/},使用計時計數(shù)器Timer0之前,必須先執(zhí)行

18、Timer0的初始化功能。Timer0初始化按照以下的步驟: (1)先暫停接受所有的中斷。 (2)關(guān)閉Timer0。 (3)設(shè)置計時器0的工作模式。 (4)設(shè)置計時器0的計數(shù)器數(shù)值(TL0和TH0數(shù)值)。 (5)設(shè)置計時器0有比較高的優(yōu)先級(這一個步驟可以省略)。 (6)設(shè)置接受Timer0的中斷。 (7)啟動Timer0。 (8)設(shè)置系統(tǒng)接受中斷。,中斷定時時間計算: 如果外接石英晶體的

19、頻率是12MHz時,因為8051的一個機械周期需要12個石英晶體的振蕩周期,所以每秒就有1000 000次的機械周期,換言之機械周期是1us。如果我們希望Timer0每秒中斷200次,那么我們就必須讓Timer0每數(shù)5 000次就中斷1次(1 000 000/200=5000)。因為Timer0的溢出中斷是Timer0數(shù)到65536(16進制表示時是10000H)就產(chǎn)生中斷,因此要讓Timer0數(shù)5 000次就中斷1次時就必須設(shè)置Tim

20、er0等于10000H--((12000000/(12×200)),也就是0xEE11。接下來我們可以利用以下的指令分別設(shè)置Timer0計數(shù)器的低8位和Timer0的高8位。,TL0=(TIMER0_COUNT & 0x00FF); /* 設(shè)定TL0的數(shù)值 */TH0=(TIMER0_COUNT >> 8); /* 設(shè)定TH0的數(shù)值 */,Timer0的溢出中斷服務(wù)程序格式如下所示:

21、 static void timer0_isr(void) interrupt TF0_VECTOR using 1 { 加入中斷之后必須處理的程序 } 其中TF0 VECTOR是定義在文件regx51.h中的常量,其數(shù)值是1,這是因為Timer0的中斷向量是1。 TF0_VECTOR后面所接的using 1,表示進入Timer0的溢出中斷服務(wù)程序之后會使用寄存器組1(Regist

22、er Bank 1),而離開Timer0的溢出中斷服務(wù)程序時編譯器也會自動恢復(fù)使用原先的寄存器組,8051中有4個寄存器組,分別是寄存器組0到寄存器組3,當(dāng)8051開始執(zhí)行時會自動采用寄存器組0。 進入中斷服務(wù)程序時采用不同的寄存器組,可以避免破壞原先尚未進入Timer0溢出中斷服務(wù)程序時所使用的寄存器內(nèi)容。 用戶當(dāng)然也可以采用原先的寄存器,但是此時就必須維護寄存器的內(nèi)容,一般足存進入中斷服務(wù)程序前先將使

23、用到的寄存器放入堆棧中,等到要離開之后冉重新由堆棧取出,并恢復(fù)原先的數(shù)值,這種做法在維護管理上要小心。,例5、外部中斷 INT0,本實驗使用AT89S51的Port 1連接到8顆LED,Port 1在正常狀況下會輸出跑馬燈,然后通過用戶觸動外部的硬件來中斷INT0,當(dāng)INT0引腳有低電位的脈沖出現(xiàn)時,8個LED會一閃一滅4次。 在這次練習(xí)中,您將學(xué)會如何使用外部中斷INT0。,電路圖,#include void dela

24、y (void) /* delay 函數(shù) */ { unsigned char i,j; /* 這個函數(shù)執(zhí)行時間的延遲 */ for (i=0;i<255;i++) for(j=0;j<255;j++) ;}void delay_4isr (void) /* delay_4isr 函數(shù) */ {

25、 unsigned char i,j; /* 這個函數(shù)執(zhí)行時間的延遲 */ for (i=0;i<255;i++) for(j=0;j<255;j++) ;}static void xint0_isr(void) interrupt IE0_VECTOR{ unsigned char i,j=0XFF; /* 變量 j */

26、 for(i=0;i<16;i++) { j=~j; P1 = j; /* 將數(shù)值輸出到 LED 輸出端口 */ delay_4isr (); }},void main (void) { unsigned char j=0XFF; /* 變量 j */ EA=0;

27、 /* 設(shè)定系統(tǒng)不接受所有的中斷 */ EX0=1; /* 設(shè)定接受INT0的中斷 */ PX0=1; EA=1; /* 設(shè)定系統(tǒng)接受中斷 */ while (1)

28、 /* 無窮循環(huán) */ /* 依次讓LED 0,1,2,3,4,5,6,7閃爍 */ { j=(j<<1) | 0x01; if(j==0XFF) j=0XFE; P1 = j; /* 將數(shù)值輸出到 LED

29、 輸出端口 */ delay(); /* 調(diào)用 delay 函數(shù)*/ }},例6、按鈕檢測1,目的是使用805 1的PORT 2連接到一個彈跳式按鈕作為輸入,PORT 1則連接到1個共陽七段顯示器。程序執(zhí)行時,共陽七段顯示器會先顯示0,之后當(dāng)用戶每按一次彈跳按鈕,共陽七段顯示器所顯示的數(shù)字就會加1,直到9之后又會恢復(fù)到0。,電路圖,#include #def

30、ine TRUE 1#define FALSE 0code seven_seg[10]={0XC0, 0XF9, 0XA4, 0XB0, 0X99, 0X92, 0X82, 0XF8, 0X80, 0X90};void delay (void) /* wait function */ { unsigned char i,j; /* only

31、to delay for LED flashes */ for (i=0;i<96;i++) for(j=0;j<255;j++) ; },// 函數(shù) keypressed 檢查是否有按鍵按下 int keypressed(){ do { while (P2_0==1); delay();

32、 if(P2_0==0) { delay(); if (P2_0==0) return TRUE; } } while(1);},void main (void) { int c; P1=seven_seg[c]; do { if ( keypressed(

33、) ) c++; if(c==10) c=0; P1=seven_seg[c]; } while(1);},在這一個程序中,我們寫了一個判斷按鈕是否被按下的函數(shù)keypressed,這一個函數(shù)在用戶按下按鈕時就返回TRUE(1)。 因為按下按鈕時,必須消除按鈕彈起的時間,因此當(dāng)程序檢測到按鈕事件時(P2 0等于0時),必須延遲一段時問之后再檢查P2_0是否還是0,如果還是0,就表示按鈕確

34、實被按下,否則就表示只是無效信息而已。根據(jù)這個原理,所以設(shè)計出函數(shù)keypressed的流程圖,如圖所示。,例7、按鈕檢測2,上一節(jié)的按鈕檢測程序中,消除彈起的時間是利用循環(huán)來延長一段時間之后,然后再檢查按鈕,這種做法雖然可以消除彈起時間,但是卻也造成循環(huán)執(zhí)行時其他工作無法進行的缺點,所以在這一節(jié)中,我們把時間延遲的部分交給Timer0來處理,如此一來,就可以讓CPU處理其他事情了。 本練習(xí)使用8051的PORT 2連接

35、到2個彈跳式按鈕作為輸入,其中一個是上數(shù)的彈跳按鈕,另一個則是下數(shù)的彈跳按鈕。PORT l則連接到1個共陽七段顯示器。程序執(zhí)行時,共陽七段顯示器會先顯示出0,之后每當(dāng)用戶單擊一次上數(shù)的彈跳按鈕,共陽七段顯示器所顯示的數(shù)字就會加1,直到9之后又會恢復(fù)到0。而每當(dāng)用戶按一次下數(shù)的彈跳按鈕,共陽七段顯示器所顯示的數(shù)字就會減1,直到0之后又會恢復(fù)到9。,電路圖,#include #define TIMER0_COUNT 0XEE11 #d

36、efine TRUE 1#define FALSE 0#define TIMES 25code seven_seg[10]={0XC0, 0XF9, 0XA4, 0XB0, 0X99, 0X92, 0X82, 0XF8, 0X80, 0X90};int c, ups, downs;static void timer0_initialize(void){

37、EA=0; TR0=0; TMOD &= 0XF0; TMOD |=0x01; TL0=(TIMER0_COUNT & 0x00FF); TH0=(TIMER0_COUNT >> 8); PT0=0; ET0=1; TR0=1; EA=1;},void main (void) { c=0; ups=0; downs=0;

38、 timer0_initialize(); P1=seven_seg[c]; while(1);},// 函數(shù) timer0_isr 檢查是否有按鍵按下 static void timer0_isr(void) interrupt TF0_VECTOR using 1{ TR0=0; TL0=(TIMER0_COUNT & 0x00FF); TH0=(TIMER0_COUNT >>

39、 8); TR0=1; if (ups !=0) //檢查ups等于0嗎? { ups--; //如果ups不等于0,就將ups減1 if (ups==0 && P2_0==0) //如果ups減到0,就檢查P2_0==0{ c++; // 如果

40、P2_0是0就表示上數(shù)的彈跳按鈕被按下,所以c加1 if(c==10) c=0; //如果c加到10,就將c恢復(fù)為0 } } else if (P2_0==0) ups=TIMES; //如果ups=0且P2_0=0就將ups設(shè)為25,if (downs !=0) //檢查downs等于0嗎? {

41、 downs--; //如果downs不等于0,就將downs減1 if (downs==0 && P2_1==0) //如果downs 減到0,就檢查P2_1=0 { c--; // 如果P2_1是0就表示下數(shù)的彈跳按鈕被按下,所以c減1 if(c==-1) c=9; //如果c減到-1

42、時,就將c恢復(fù)為10 } } else if (P2_1==0) downs=TIMES; //如果downs=0且 P2_1 =0 //就將downs設(shè)為25 P1=seven_seg[c];},如何計程序可以使用Timer0延遲一段時間呢?在此我們利用變量ups,當(dāng)?shù)谝淮螜z查到P2_0等于0時就設(shè)置ups=2

43、5,然后每一次Timer0中斷之后,就將ups減1,直到0為止,剛好經(jīng)歷25/200秒,接下來再檢查P2_0是否依然等于0,就可以判斷上數(shù)的彈跳按鈕是否被單擊。程序部分如下所示:,if (ups !=0) //檢查ups等于0嗎? { ups--; //如果ups不等于0,就將ups減1 if (ups==0 &

44、amp;& P2_0==0) //如果ups減到0,就檢查P2_0==0{ c++; // 如果P2_0是0就表示上數(shù)的彈跳按鈕被按下,所以c加1 if(c==10) c=0; //如果c加到10,就將c恢復(fù)為0 } } else if (P2_0==0) ups=TIMES; //如果u

45、ps=0且P2_0=0就將ups設(shè)為25,例8、四個七段顯示器的顯示控制,本練習(xí)使用805 l的Port 1連接到四個七段顯示器。這四個共陽七段顯示器的a、b、c、d、e、f和 g全部都連接在一起,因此PORT 1所輸出的數(shù)據(jù)按理說應(yīng)該會在四個共陽七段顯示器都顯示出來。但足我們利用PORT 0的低4位分別控制這四個共陽七段顯示器,讓四個共陽七段顯示器使用掃描的方式輪流顯示數(shù)字,因此PORT 1每一次輸出的數(shù)據(jù)恰好只會在其中一個共陽七段顯

46、示器顯示數(shù)字。當(dāng)您連接好電路,并且完成程序之后,您將可以看到這四個七段顯示器上顯示0~9999。在這次實習(xí)中,您將學(xué)會如何使用輪流驅(qū)動的方式,讓四個共陽七段顯示器輪流顯示數(shù)字。,電路圖,程序描述:說明如何使用8051 的Port 1連接到四顆七段顯示器,PORT 0的低4位分別控制這四顆共陽七段顯示器,讓四顆共陽七段顯示器使用掃描的方式輪流顯示數(shù)字。 這四顆七段顯示器將顯示0到 9999。#include #

47、define TIMER0_COUNT 0xFC18 code seven_seg[10]={0XC0, 0XF9, 0XA4, 0XB0, 0X99, 0X92, 0X82, 0XF8, 0X80, 0X90};code scan[4]={0X0E, 0X0D, 0X0B, 0X07};unsigned char counter[4]={0,0,0,0};unsigned char i=0;int timer0_tick

48、;,static void timer0_initialize(void){ EA=0; timer0_tick=0; TR0=0; TMOD &= 0XF0; TMOD |=0x01; TL0=(TIMER0_COUNT & 0x00FF); TH0=(TIMER0_COUNT >> 8); PT0=0; ET0=1; TR0=1; EA=1;}void m

49、ain (void) { timer0_initialize(); while (1); /* 無窮循環(huán) */},static void timer0_isr(void) interrupt TF0_VECTOR using 1{ TR0=0; TL0=(TIMER0_COUNT & 0x00FF); TH0=(TIMER0_COUNT >>

50、; 8); TR0=1; P1=seven_seg[counter[i]]; P0=scan[i]; i++; if(i==4) i=0; timer0_tick++;,if (timer0_tick==1000) { timer0_tick=0; counter[0]++; // 個位數(shù)加1 if (counter[0]==10) {

51、 // 如果個位數(shù)等于10,則執(zhí)行以下的部分 counter[0]=0; // 個位數(shù)變成0 counter[1]++; // 十位數(shù)加1 if(counter[1]==10){ // 如果十位數(shù)等于10,則執(zhí)行以下的部分 counter[1]=0; // 十位數(shù)變成0 count

52、er[2]++; // 百位數(shù)加1 if(counter[2]==10) { // 如果百位數(shù)等于10,則執(zhí)行以下的部分 counter[2]=0; // 百位數(shù)變成0 counter[3]++; // 千位數(shù)加1

53、 if(counter[3]==10) counter[3]=0; //如果千位數(shù)等于10,則變成0 } } } }},0數(shù)到9999的程序部分說明如下。我們利用counter[0]、counter[1]、counter[2]~counter[3]分別來

54、儲存?zhèn)€位數(shù)、十位數(shù)、百位數(shù)和千位數(shù)。所以每隔一秒就將counter[0]加1,如果counter[0]等于10就必須進位,于是將counter[0]設(shè)為0,同時counter[1]加1。counter[1]等于10的時候也是同樣的道理,依次進位到counter[2]~counter[3],程序如下所示:,例9、4*4 小鍵盤輸入,本練習(xí)使用前一節(jié)的4個七段顯示器電路,然后外加一個4×4的小鍵盤,其中8051的PORT 2連接到

55、4×4小鍵盤輸入。程序執(zhí)行時,用戶可以從4×4小鍵盤輸入數(shù)據(jù),而所輸入的數(shù)據(jù)會顯示在4個七段顯示器上。,電路圖,函數(shù)描述: char gotkey(void) 從4×4小鍵盤輸入數(shù)據(jù),返回0~15小鍵盤的連接方式:,主程序:ex-9.c,#define TIMER0_COUNT 0xEE11code seven_seg[16]={0XC0, 0XF9, 0XA4, 0XB0, 0X99, 0X9

56、2, 0X82, 0XF8, 0X80, 0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E};code scan[4]={0X0E, 0X0D, 0X0B, 0X07};unsigned char counter[4]={0,0,0,0};unsigned char timer0_tick,k=0;static void timer0_isr(void) interrupt 1 using 1{ TR0

57、=0; TL0=(TIMER0_COUNT & 0x00FF); TH0=(TIMER0_COUNT >> 8); TR0=1; P1=seven_seg[counter[k]]; P0=scan[k]; k++; if(k==4) k=0; timer0_tick++; if (timer0_tick==200) timer0_tick=0;},static void time

58、r0_initialize(void){ EA=0; timer0_tick=0; TR0=0; TMOD &= 0XF0; TMOD |=0x01; TL0=(TIMER0_COUNT & 0x00FF); TH0=(TIMER0_COUNT >> 8); PT0=0; ET0=1; TR0=1; EA=1;},void main (void) { u

59、nsigned char c=0; char ch; timer0_initialize(); do { ch=gotkey(); for(c=3;c>0;c--) counter[c]=counter[c-1]; counter[0]=ch; } while(1);},小鍵盤的輸入函數(shù):keypad.c,#include code char key_code

60、[]={0x7E, 0XBE, 0XBD, 0XBB, 0XDE, 0XDD, 0XDB, 0XEE, 0XED, 0XEB, 0X7D, 0X7B, 0XE7, 0XD7, 0XB7, 0X77};code ksp[4]={0x7F,0xBF,0xDF,0xEF};void delay (void) /* 時間延遲函數(shù) */ { unsigned char i,j;

61、 for (i=0;i<5;i++) for(j=0;j<255;j++) ;},char keypad_scan(){ char key,i; P2=0xF0; while (P2!=0xF0); do{ for(i=0;i<=3;i++) { P2=ksp[i];

62、 if(P2!=ksp[i]) { delay(); key=P2; if(key!=ksp[i]) { return(key); } } } } while(1);},// 檢查是否有按鍵

63、按下char gotkey(){ char temp,i; temp=keypad_scan(); for (i=0;i<=15;i++) { if(temp==key_code[i]) return(i); } return(16);},1.1 單片機應(yīng)用系統(tǒng)的基本結(jié)構(gòu),1.1.1 單片機應(yīng)用系統(tǒng)的硬件組成,二.單片機應(yīng)用系統(tǒng)設(shè)計,1.1.2 單片機

64、應(yīng)用系統(tǒng)開發(fā)的基本過程,一.系統(tǒng)需求與方案調(diào)研,系統(tǒng)需求與方案調(diào)研的目的是通過市場或用戶了解用戶對擬開發(fā)應(yīng)用系統(tǒng)的設(shè)計目標和技術(shù)指標。通過查找資料,分析研究,解決以下問題:1)了解國內(nèi)外同類系統(tǒng)的開發(fā)水平、器材、設(shè)備水平、供應(yīng)狀態(tài);對接收委托研制項目,還應(yīng)充分了解對方技術(shù)要求、環(huán)境狀況、技術(shù)水平,以確定課題的技術(shù)難度。2)了解可移植的硬、軟件技術(shù)。能移植的盡量移植,以防止大量低水平重復(fù)勞動。3)摸清硬、軟件技術(shù)難度,明確技術(shù)主攻方

65、向。4)綜合考慮硬、軟件分工與配合方案。單片機應(yīng)用系統(tǒng)設(shè)計中,硬、軟件工作具有密切的相關(guān)性。,可行性分析的目的是對系統(tǒng)開發(fā)研制的必要性及可行性作出明確的判定結(jié)論。根據(jù)這一結(jié)論決定系統(tǒng)的開發(fā)研制工作是否進行下去。 可行性分析通常從以下幾個方面進行論證:1)市場或用戶的需求情況。2)經(jīng)濟效益和社會效益。3)技術(shù)支持與開發(fā)環(huán)境。4)現(xiàn)在的競爭力與未來的生命力。,二.可行性分析,系統(tǒng)功能設(shè)計包括系統(tǒng)總體目標功能的確定及系統(tǒng)硬、

66、軟件模塊功能的劃分與協(xié)調(diào)關(guān)系。 系統(tǒng)功能設(shè)計是根據(jù)系統(tǒng)硬件、軟件功能的劃分及其協(xié)調(diào)關(guān)系,確定系統(tǒng)硬件結(jié)構(gòu)和軟件結(jié)構(gòu)。 系統(tǒng)硬件結(jié)構(gòu)設(shè)計的主要內(nèi)容包括單片機系統(tǒng)擴展方案和外圍設(shè)備的配置及其接口電路方案,最后要以邏輯框圖形式描述出來。 系統(tǒng)軟件結(jié)構(gòu)設(shè)計主要完成的任務(wù)是確定出系統(tǒng)軟件功能模塊的劃分及各功能模塊的程序?qū)崿F(xiàn)的技術(shù)方法,最后以結(jié)構(gòu)框圖或流程圖描述出來。,三.系統(tǒng)功能設(shè)計,系統(tǒng)詳細設(shè)計與制作就是將前面的系統(tǒng)方案

67、付諸實施,將硬件框圖轉(zhuǎn)化成具體電路,并制作成電路板,軟件框圖或流程圖用程序加以實現(xiàn)。,四.系統(tǒng)詳細設(shè)計與制作,系統(tǒng)調(diào)試是檢測所設(shè)計系統(tǒng)的正確性與可靠性的必要過程。單片機應(yīng)用系統(tǒng)設(shè)計是一個相當(dāng)復(fù)雜的勞動過程,在設(shè)計、制作中,難免存在一些局部性問題或錯誤。系統(tǒng)調(diào)試可發(fā)現(xiàn)存在的問題和錯誤,以便及時地進行修改。調(diào)試與修改的過程可能要反復(fù)多次,最終使系統(tǒng)試運行成功,并達到設(shè)計要求。,五.系統(tǒng)調(diào)試與修改,系統(tǒng)硬件、軟件調(diào)試通過后,就可以把調(diào)試完畢的

68、軟件固化在EPROM中,然后脫機(脫離開發(fā)系統(tǒng))運行。如果脫機運行正常,再在真實環(huán)境或模擬真實環(huán)境下運行,經(jīng)反復(fù)運行正常,開發(fā)過程即告結(jié)束。,六.生成正式系統(tǒng)或產(chǎn)品,1.2 單片機應(yīng)用系統(tǒng)的硬件設(shè)計,1.2.1 硬件系統(tǒng)設(shè)計原則,一個單片機應(yīng)用系統(tǒng)的硬件電路設(shè)計包括三個部分內(nèi)容:一是單片機芯片的選擇,二是單片機系統(tǒng)擴展,三是系統(tǒng)配置。,一、單片機芯片的選擇,二、單片機系統(tǒng)擴展,單片機系統(tǒng)擴展是指單片機內(nèi)部的功能單元(如程序存儲器、數(shù)據(jù)

69、存儲器、I/O口、定時器/計數(shù)器、中斷系統(tǒng)等)的容量不能滿足應(yīng)用系統(tǒng)的要求時,必須在片外進行擴展,這時應(yīng)選擇適當(dāng)?shù)男酒?,設(shè)計相應(yīng)的擴展連接電路;系統(tǒng)配置是按照系統(tǒng)功能要求配置外圍設(shè)備,如鍵盤、顯示器、打印機、A/D轉(zhuǎn)換器、D/A轉(zhuǎn)換器等,設(shè)計相應(yīng)的接口電路。,三、系統(tǒng)擴展和配置設(shè)計遵循的原則,系統(tǒng)擴展和配置設(shè)計遵循的原則:(1)盡可能選擇典型通用的電路,并符合單片機的常規(guī)用法。(2)系統(tǒng)的擴展與外圍設(shè)備配置的水平應(yīng)充分滿足應(yīng)用系統(tǒng)當(dāng)

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論