第一篇:單片機最小系統(tǒng)實驗總結
STC89C51單片機最小系統(tǒng)板開發(fā)實驗總結 實驗小組成員:陸敘旺 張愛華 溫小靜
總的要求:設計并制作STC89C51單片機最小系統(tǒng)板。提供單片機最基本的運行環(huán)境并具備ISP下載程序的功能。由于該板將來擬用作參賽設計的核心板,所以要求該板的設計具備使用靈活、方便,并采用模塊化設計使該板能與將來的整個系統(tǒng)很好的連接。同時應具備很好的可維修與可維護性。具體要求:
[1] [2] [3] [4] [5] [6] 提供合適的電源接口并具備電源指示燈 應具有上電復位和手動復位功能 支持最大40MHz的運行頻率
具有RS232接口,可連接電腦下載程序
八位流水燈,用于測試最小系統(tǒng)板是否工作正常 應引出單片機的所有輸入輸出引腳
考慮的問題:
[1] [2] [3] [4] [5] [6] [7] 如何做到模塊化? 是否需要復位按鍵? 是否要編程座?
系統(tǒng)晶振插座:可更換升級晶振。是否需要EA跳線?
考慮是否需要電源開關,以及采用哪種開關最好? 其它
實驗設計過程: 原理圖設計:
(1)單片機CPU部分:采用STC89C51芯片,封裝DIP-40。40個引腳,用40個排針引出,40腳接VCC,20腳接GND,VCC與GND之間用一小電容(可以用104)耦合。(去耦電容的主要功能就是提供一個局部的直流電源給有源器件,以減少開關噪聲在板上的傳播和將噪聲引導到地。)P0,P1,P2,P3做IO接口。9腳接RST(復位電路)。18,19腳接晶振,(這次實驗用晶振為40M)。31腳接EA。
(2)電源供電部分:直接用排針引入電源給單片機供電,另外一種電源輸入就是加一個穩(wěn)壓塊7805,正電源端接一個二極管,保護電路,防止上電時正負反接。經(jīng)過穩(wěn)壓后串一個電阻(幾百歐)引出一個發(fā)光二極管。做為電源指示燈。問題出現(xiàn)在,如果是5V供電,經(jīng)過7805
穩(wěn)壓后,得到的電源并不夠5V了,只有3V多,所以,如果是選用經(jīng)過穩(wěn)壓后的電源供電,那么輸入就要有7V。(3)晶振部分:采用40M晶振,電容可以采用30P(可以用更小點的電容,小點的電容理論上效果會好點)。在封裝電路的時候,晶振部分加了一個晶振插座,這樣,可以更換升級晶振。
(4)復位電路部分:電復位和手動復位,電復位就是接一個1U的電容,手動復位就是接一個開關,這個開關選用點觸開關比較方便。
(5)EA電位選擇部分:單片機的9腳(EA)。采用了排針引出,與電源的正負兩端一起用三列排針引出,實驗用到時,用兩個孔的插帽做EA跳線。
(6)RS232接口,電腦下載程序部分:下載程序接口用DB9,電平轉換采用MAX232芯片。DB9的2,3腳接到MAX232的7(T2OUT),8(R2IN)腳,5腳接地。MAX232的9(R2OUT),10(T2IN)分別接到單片機上的P3^0(RXD)和P3^1(TXD)腳。MAX232的1,3腳,4,5腳,6,15腳,2,16腳,都串接一個電容,這些電容的大小最好都是1U,當然,也可以采用其他的小電容,例如:104。15接地,16接VCC,加一個去耦電容104。(7)LED試驗燈部分:8個發(fā)光二極管,正端接到P2端,負端接330歐的排阻,當P2口輸出高電位時,發(fā)光二極管亮,地電位時,發(fā)光二極管熄滅。(8)總電路圖如下:
PCB圖設計:電源線,地線,做得相對大點,排線時,考慮到信號干擾,線與線之間的距離要適當。特別是電源與地線不要靠太近,輸入輸出排版盡量合理。輸入輸出接口放到板子比較好接,好調的地方。盡量避免跳線,主干部分(CPU)最好排在板子中間。調試過程:
焊接好板子,做出來的實物圖,接上電源,燒寫一個流水等程序進去,可以看到8個發(fā)光二極管閃亮。
實際做板遇到的問題;在做板中,出現(xiàn)的問題主要集中在RS232接口,電腦下載程序部分和電源部分。剛開始用RS232的13腳和14腳接DB9的2,3腳。11腳和12腳接到單片機的P3^0腳和P3^1腳,調試過程中,程序下載不進去,進過檢查,其它部分電路都沒有錯。后來又用跳線按照上述講的接。結果程序可以下載進去了。電源部分:采用7805穩(wěn)壓,效果不是很好,帶來了不少麻煩。所以,后面干脆把7805也去掉,如果是用我們自己做的電源供電,穩(wěn)定性已經(jīng)很好了,沒必要i再次穩(wěn)壓?,F(xiàn)在我們基本都是用自己做的直流穩(wěn)壓電源。所以,這里可以去掉穩(wěn)壓塊電路。
想做一塊好的板子,封裝一定要對口,不對口的話就接不上去,或者接上去了也不好看。原理圖盡量要做得清晰好看,PCB圖盡量用手工布線,布線的時候不要布得太繞了。線是追求最短。做板的時候最好買一些好的材料做,效果會更好,比如說,銅板,電容。
想做一塊好的板子,就以我們現(xiàn)在的水平。不要追求速度。能按時完成就好。以后再慢慢提高。遇到不懂的,希望大家一起討論。
******2***101112******9101112***819201
19876543212019******42526272829303******6543212019******2121212121212***89
第二篇:單片機最小系統(tǒng)實訓報告
單片機最小系統(tǒng)實訓報告
一、實訓目的
1、掌握并理解單片機最小系統(tǒng)的原理及制作, 牢記最小系統(tǒng)中各元器件 的參數(shù)及各元器的作用./
2、掌握單片機芯片內(nèi)部的組成及存儲機構。
3、理解常用指令的功能和使用方法。
4、掌握單片機的中斷源,中斷控制寄存器,中斷響應過程,定時/計數(shù)器的電路結構、功能我使用方法,定時器/計數(shù)控制寄存器.5、復習利用Keil51軟件對程序進行編譯。
6、用protel軟件繪制“單片機最小系統(tǒng)”電路,并用測試程序進行仿真。
7、會根據(jù)實際功能,正確選擇單片機功能接線,編制正確程序。對實驗結果能做出不分析我解釋,能學出符合規(guī)格的實驗報告。
二、實訓工具
1、點偏激測試平臺:PC機,串口線,并口線,單片機開發(fā)板
2、軟件:keil51測試軟件,protel仿真軟件,DXP2004軟件。
三、實訓要求
通過實訓,學生應達到以下經(jīng)濟方面的要求:
素質要求
1、以積極認真的態(tài)度對待本次實訓,遵章守紀、團結協(xié)作。
2、善于發(fā)現(xiàn)數(shù)字電路中存在的問題、分析問題、解決問題,努力培養(yǎng)獨立工作能力。
能力要求
1、模擬電路的理論知識
2、脈沖與數(shù)字電路的理念知識
3、通過模擬、數(shù)字電路實驗有一定的動手能力
4、能熟練的制作單片機最小系統(tǒng)
5、嫩熟練的編寫8951單片機匯編程序
6、能夠熟練的運用仿真軟件對單片機最小系統(tǒng)仿真
四、實訓內(nèi)容
1、掌握并理解“單片機最小系統(tǒng)”的原理及制作,牢記最小系統(tǒng)中各元器件的參數(shù)及格元器件的作用。
2、用keil51測試元件編寫8951單片機匯編程序
3、用peotel軟件繪制“單片機最小系統(tǒng)”單路原理圖。
4、運用仿真軟件對單片機最小系統(tǒng)進行仿真。五.實訓基本步驟
1、用peotel乳酸鈉幾十年繪制“單片機最小系統(tǒng)”單路原理圖。
2、根據(jù)原理圖生成pcb圖、GB文件。鉆孔文件
3、繪制印刷電路板。
4、根據(jù)原理圖焊接元件,生成單片機開發(fā)板。
5、用keil51軟件編寫單片機最小系統(tǒng)測試程序。
6、用仿真軟件繪制單片機最小系統(tǒng)原理圖,測試測量程序。
7、把測試程序拷貝到單片機里進行實物測試。
8、觀察測試結果。
六、51單片機C編語言程序測試 測試程序流水燈1: //用定時器做流水燈測試 //為定時顯示做準備
//P1-0-----PF1.3
L0-----L3 #include
#define unit unsigned int #define unchar unsigned char
sbit L0 = P1^0;sbit L1 = P1^1;sbit L2 = P1^2;sbit L3 = P1^3;
unsigned char data BUFFER[1]={0};
void main(void){ P2=0X0F;
EA=1;IT0=1;ET0=1;TMOD=0X01;TH0=-5000/256;TL0=-5000%256;TR0=1;
while(1){
};} //定時器0中斷服務程序// void timer0(void)interrupt 1 using 1 { TH0=-5000/256;TL0=-5000%256;BUFFER[0]=BUFFER[0]+1;if(BUFFER[0]==100)
{
L3=!L3;
L2=!L2;
L1=!L1;
L0=!L0;
} } 測試程序流水燈2:
//此程序為了做花樣流水燈的
//采用了C的宏定義 X 可以實現(xiàn)一改全改 #include
#define X 16 //
unsigned int time=0;
unsigned int a[X]={
0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80,0X18,0X24,0X42,0X81,0X42,0X24,0X18,0X00,void main(void){ P1=0X0f;EA=1;IT0=1;ET0=1;TMOD=0X01;TH0=9000/256;TL0=9000%256;TR0=1;
while(1){
P1=a[time];};} //定時器0中斷服務程序// void timer0(void)interrupt 1 using 1 { TH0=9000/256;TL0=9000%256;
time++;if(time==X)time=0;
} //此程序來測試數(shù)碼管
//P0.0--P0.7
A B C D E F G dp //P2.0--P2.7
C0M0--------C0M8 #include
#define unit unsigned int #define unchar unsigned char
unsigned char data BUFFER[1]={0};unsigned char X=0;//共陽極碼表數(shù)碼管
unsigned char leddata[]={
0xC0, //“0”
0xF9, //“1”
0xA4, //“2”
};
0xB0, //“3”
0x99, //“4”
0x92, //“5”
0x82, //“6”
0xF8, //“7”
0x80, //“8”
0x90, //“9”
0x88, //“A”
0x83, //“B”
0xC6, //“C”
0xA1, //“D”
0x86, //“E”
0x8E, //“F”
0x89, //“H”
0xC7, //“L”
0xC8, //“n”
0xC1, //“u”
0x8C, //“P”
0xA3, //“o”
0xBF, //“-”
0xFF, //熄滅
0xFF //自定義
};
unsigned char com[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,};void Delay(unsigned char cnt){ while(cnt--);} void xian_shi(unsigned char cp){ unsigned char i;unsigned int z=cp;for(i=0;i<8;i++)
{
P0=leddata[z%10];
P2=com[i];
Delay(200);
z=z/10;
} } void main(void){
P0=0X00;P2=0Xff;EX0=1;IT0=1;EA=1;
while(1){
xian_shi(X);};} //定時器0中斷服務程序// void timer0(void)interrupt 1 using 1 { X++;if(X==25){
X=0;} } 此程序測試鍵盤
//P3.0---P3.3
L0-------L3 //從左到有顯示為 0 1 2 3
P3.4/ //上///
5 6 7
P3.5/ //到///
9 A B
P3.6/ //下///
C D E F
P3.7/ //P3.4--=P3.7
H0----H3 #include
#define uchar unsigned char #define uint unsigned int
unsigned char led_data[]={
0xC0, //“0”
0xF9, //“1”
0xA4, //“2”
0xB0, //“3”
0x99, //“4”
0x92, //“5”
0x82, //“6”
0xF8, //“7”
0x80, //“8”
0x90, //“9”
0x88, //“A”
0x83, //“B”
0xC6, //“C”
0xA1, //“D”
0x86, //“E”
0x8E, //“F”
0x89, //“H”
0xC7, //“L”
0xC8, //“n”
0xC1, //“u”
0x8C, //“P”
0xA3, //“o”
0xBF, //“-”
0xFF, //熄滅
0xFF //自定義
};
void delay(uint i)
{ while(i--);}
uchar keyscan(void)// { uchar cord_h,cord_l;//行列值中間變量
P3=0x0f;
//行線輸出全為0 cord_h=P3&0x0f;
//讀入列線值
if(cord_h!=0x0f)
//先檢測有無按鍵按下
{
delay(100);
//去抖
if(cord_h!=0x0f)
{
cord_h=P3&0x0f;//讀入列線值
P3=cord_h|0xf0;//輸出當前列線值
cord_l=P3&0xf0;//讀入行線值
return(cord_h+cord_l);//鍵盤最后組合碼值
}
}
return 0xFF;}
void main()
{ uchar key;P2=0xbb;
//1數(shù)碼管亮 按相應的按鍵,會顯示按鍵上的字符
while(1){ key=keyscan();//調用鍵盤掃描,switch(key){
case 0xEE:P0=led_data[0];break;//0 按下相應的鍵顯示相對應的碼值
case 0xED:P0=led_data[1];break;//1
case 0xEB:P0=led_data[2];break;//2
case 0xE7:P0=led_data[3];break;//3
case 0xDE:P0=led_data[4];break;//4
case 0xDD:P0=led_data[5];break;//5
case 0xDB:P0=led_data[6];break;//6
case 0xD7:P0=led_data[7];break;//7
case 0xBE:P0=led_data[8];break;//8
case 0xBD:P0=led_data[9];break;//9
case 0xBB:P0=led_data[10];break;//a
case 0xB7:P0=led_data[11];break;//b
case 0x7E:P0=led_data[12];break;//c
case 0x7D:P0=led_data[13];break;//d
case 0x7B:P0=led_data[14];break;//e
case 0x77:P0=led_data[15];break;//f } } } //此程序用來測試中斷鍵盤P3.2 INT0 //下跳沿觸發(fā) // #include
#define unit unsigned int #define unchar unsigned char
sbit L0=P1^0;sbit L1=P1^1;sbit L2=P1^2;sbit L3=P1^3;
unsigned int times=0;
void delay(unsigned int cp)
{
unsigned int i=cp;
while(i--);
}
unsigned char leddata[]={
0xC0, //“0”
0xF9, //“1”
0xA4, //“2”
0xB0, //“3”
0x99, //“4”
0x92, //“5”
0x82, //“6”
0xF8, //“7”
0x80, //“8”
0x90, //“9”
0x88, //“A”
0x83, //“B”
0xC6, //“C”
0xA1, //“D”
0x86, //“E”
0x8E, //“F”
0x89, //“H”
0xC7, //“L”
0xC8, //“n”
0xC1, //“u”
0x8C, //“P”
0xA3, //“o”
0xBF, //“-”
0xFF, //熄滅
0xFF //自定義
};
unsigned char com[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,};
void xian_shi(unsigned char cp){
unsigned char i;unsigned int z=cp;for(i=0;i<8;i++)
{
P0=leddata[z%10];
P2=com[i];
delay(200);
z=z/10;
} }
void main(void){ P1=0Xdd;EX0=1;IT0=1;EA=1;
while(1){
xian_shi(times);};}
//INT0低電平中斷服務程序// void intersvr0(void)interrupt 0 using 1 {
L0=!L0;
L1=!L1;
L2=!L2;
L3=!L3;
times ++;}
//最簡單的24小時顯示 #include
#define unit unsigned int #define unchar unsigned char
unsigned char data BUFFER[1]={0};unsigned char time[3]={0};
unsigned char leddata[]={
0xC0, //“0”
0xF9, //“1”
0xA4, //“2”
0xB0, //“3”
0x99, //“4”
0x92, //“5”
0x82, //“6”
0xF8, //“7”
0x80, //“8”
0x90, //“9”
0x88, //“A”
0x83, //“B”
0xC6, //“C”
0xA1, //“D”
0x86, //“E”
0x8E, //“F”
0x89, //“H”
0xC7, //“L”
0xC8, //“n”
0xC1, //“u”
0x8C, //“P”
0xA3, //“o”
0xBF, //“-”
0xFF, //熄滅
0xFF //自定義
};
unsigned char com[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,};void Delay(unsigned char cnt){ while(cnt--);} void xian_shi(void){ unsigned char i;unsigned int SS=time[0]+100*time[1]+10000*time[2];for(i=0;i<6;i++)
{
P0=leddata[SS%10];
P2=com[i];
Delay(200);
SS=SS/10;
} } void main(void){ P0=0X00;P2=0Xff;EA=1;IT0=1;ET0=1;TMOD=0X01;TH0=0xec;TL0=0x78;
TR0=1;
while(1){
xian_shi();};} //定時器0中斷服務程序// void timer0(void)interrupt 1 using 1 { TH0=0xec;TL0=0x78;
BUFFER[0]=BUFFER[0]+1;if(BUFFER[0]==100){
time[0]++;
BUFFER[0]=0;
if(time[0]==60)
{
time[0]=0;
time[1]++;
if(time[1]==60)
{
time[1]=0;
if(time[1]==60)
{
time[1]=0;
time[2]++;
if(time[2]==24)
}
}
}
time[2]=0;
} }
七、實訓心得
高職高專教育培養(yǎng)的是技術應用型人才,學校為了陪養(yǎng)我們的創(chuàng)新精神和工程實踐能力,提高我們的綜合素質,我們進行實訓,在實踐中相互學習和進步。通過實踐我們更清楚的認識了我們所學習專業(yè)在實踐中的運用。也感覺到理論和實踐的差距。
八、附件
單片機最小系統(tǒng)生成原理圖
第三篇:CAD課程設計51單片機最小系統(tǒng)報告
目錄
第一章、功能要求???????????????2 第二章、原理圖設計??????????????3 2.1 元器件的繪制???????????????3 2.2 繪制原理圖????????????????6 第三章、PCB板的繪制?????????????9 第四章、設計心得與體會 ???????????10
第一章
功能要求
此次設計是一個51單片機的最小系統(tǒng),整個系統(tǒng)包括電源電路、AD轉換電路、51單片機主控芯片、溫度采集電路、串口部分、復位電路等,其中P1口設計了一個4×4的矩陣鍵盤,P2口和P2口作為段選和片選的地址線,以驅動數(shù)碼管的靜動態(tài)顯示,P3口就是一個控制口了,有接串口、復位和時鐘電路。此電路的設計是想利用18B20這一芯片實現(xiàn)溫度的采集,并進行AD轉換輸出。第二章
原理圖的設計
原理圖的設計,會影響到后來的PCB板的規(guī)劃,所以最初的設計就必須最優(yōu)的設計方案,設計方案的選擇、元器件的選擇等,是至關重要的環(huán)節(jié)。
所有的項目的設計,都需要在最初建立一個項目,文件菜單欄中的創(chuàng)建PCB項目,以下所有的工作都在此項目中完成。
圖2
建立項目
2.1
元器件的繪制
原理圖的繪制之前都需要裝載元器件庫,選擇“元器件“,在如下窗口中找到自己需要的元器件安裝。
圖2.1
元件庫安裝
由于元器件庫里大部分的元器件都沒有,所以大部分都需要繪制,建立自己 3 的組件庫。繪制元器件的過程如下:
打開DXP軟件,在文件菜單欄里面創(chuàng)建原理圖元件庫,就會產(chǎn)生一個以Schlib為后綴的文件,在編輯區(qū)的中心有一個十字坐標軸將元件編輯區(qū)分成4個象限,但是我們一般在第四象限繪制。根據(jù)原理圖上面器件的形狀,在放置一欄中放置元件的外形,再依次放置引腳,引腳的標注根據(jù)需要而修改,并且設置管腳屬性,最后設置元件的屬性,其中包括元件的封裝和仿真參數(shù)。
圖2.2 創(chuàng)建器件庫
這里還要介紹一下元件的封裝。也是在文件菜單欄中創(chuàng)建PCB庫,在工具一欄中選擇新元件,在元件封裝向導的指引下規(guī)定封裝的形式和引腳規(guī)格,這包括封裝的類型和各引腳之間的距離,引腳的大小等等,最后保存。同時要在之前畫的元件的圖中找到此封裝,將兩者關聯(lián)起來。這才算完成一個元器件的繪制。
這里列舉幾個元器件圖:
1、AD轉換部分:TLC5649和5620都是AD轉換部分使用到的芯片,這里是自己繪制的,包括封裝。
圖2.3 AD-TLC5649
圖2.4 TLC5620 2.主控電路:這部分主要是包括51單片機及其周圍一些接口電路和排阻,4個并口所接的芯片都是自己繪制的。
圖2.5
STC89C52
圖2.6 HEADER16 2.2
繪制原理圖
在DXP的軟件中,在文件菜單欄中創(chuàng)建原理圖,會產(chǎn)生一個以SCHDOC為后綴的文件,按照圖紙,以此繪制原理圖,移進相應的元器件,其中會用到電源線、地線、總線、導線等進行連接,并且一些簡單的電阻和電容還是可以在元件庫中找到。放置元器件、導線,繪制的過程中注意各器件的安排,要適合整張圖紙,使全體美觀且便于檢查,并學會快捷鍵的使用
子圖部分:
這次的最小系統(tǒng)的設計涉及到了子圖,采用自上而下的方法,從母圖開始逐步細化,是DXP設計下的層次結構體現(xiàn)的淋漓盡致,給讀書更直觀、更清晰的理解。在“文件”菜單欄中創(chuàng)建原理圖,但是繪制的時候是采用工具欄中的一些圖標,例如 放置方塊電路和方塊端口,對其設置屬性和相應的電路參數(shù)。再繪制子圖,“設計”欄中選擇“根據(jù)符號創(chuàng)建圖紙”即可。繪制過程中注意母圖和子圖的關聯(lián)性和對應。圖示即為母圖和子圖:
1、串口部分:串口部分是為了給單片機下載需要的程序,用到的MAX232和串口。
圖2.7
串口的母圖和子圖 2、4×4的矩陣鍵盤
圖2.8 矩陣鍵盤母圖
圖2.9 矩陣鍵盤的子圖
3、蜂鳴器:
圖2.10
蜂鳴器的母圖和子圖
4、數(shù)碼管顯示:
圖2.11 數(shù)碼管的母圖和子圖
最后所有的部分完成及可見完整的原理圖如下:
圖2.12
51單片機最小系統(tǒng)原理圖
繪制完整后,在“項目管理”菜單欄中檢查是否有錯誤,在“設計”菜單欄中選中“設計項目的網(wǎng)絡表”,其中是選擇Protel選項。此步是為了PCB板子的繪制做準備的,所以不可缺少.第三章
PCB圖的繪制
原理圖的“項目管理”菜單欄中選擇“追加新文件到項目中”的“PCB文件”,就打開了PCB文件,首先要保存。最初要設置PCB板子的規(guī)則,包括導線的寬度、板子的層數(shù)、孔的大小等。
然后,在機械層畫出板子的大小,并且以能放進所有元件切板子小而優(yōu),導入網(wǎng)絡表和元器件封裝,這就要檢查其中是否有錯誤,我們發(fā)現(xiàn)有幾處的封裝做的不是很完整,所以進行了修改(如果看不見原理圖,可縮小再看),將其移近所畫范圍中,我們可以看見其中的飛線,那是說明這其中的連接。
然后手動布局,將所有器件移到最適合的位置,根據(jù)最初的設計規(guī)則,在一層或者兩層連線(注意連線的過程中在轉折處不要形成直角,否則會尖端放電,并且連線之前要考慮全局,不要給自己造成無路可走的局面),也可自動布線。
當所有的連線完成,調整布線的布局使其更加美觀。
圖3.1 PCB板
最后可在“工具”菜單欄中檢查是否有錯誤,我們發(fā)現(xiàn)其實很多細節(jié)的地方,連線沒有連到位,所以是斷線狀態(tài),通過將圖放大后修改完成。如果有需要,可以給PCB板覆銅。
最后生成器件清單,在“報告”菜單欄中就可做到。并將其以Excel方式保存。第四章
設計心得與體會
通過此次的課程設計,掌握了更多DXP程序工作的基本過程和任務。本次設計由于是本身就有的圖紙,所以繪制原理圖的過程中沒有很大的問題,但是元器件的繪制比較麻煩,期間有查閱相關書籍,詢問了同學;并且PCB板的繪制,遭遇到布局不優(yōu)良的問題,給設計造成了一些阻礙。但是因為本次設計比平時上課的內(nèi)容要復雜,比如子圖的內(nèi)容,知道了原理圖的層次結構給設計帶來的方便,所以還是得到不少鍛煉。對于器件的繪制更加熟悉了。也激起了對課程學習的更大興趣,并且對于單片機的相關知識也加深了許多,可以說是一舉兩得。這次是自己真正學習的過程,并且完成論文的過程中又學會了使用更多的截圖工具,所以算是意外的收獲,以后還要繼續(xù)努力。
參考文獻:
1、邵群濤主編,《電氣制圖與電子線路CAD》,北京:機械工業(yè)出版社,2005。
2、程昱主編《精通 Protel DXP電路設計》
清華大學出版社。
第四篇:單片機實驗總結
單片機原理及接口技術實驗總結
本學期的單片機實驗轉眼已到尾聲,共做了六項實驗,分別是KEIL4、ISP下載軟件的安裝于使用、P1口輸出循環(huán)燈實驗、P1口轉彎燈實驗、P3.3口輸入P1口輸出實驗和中斷實驗。在王承林老師的帶領與指導下,我們認真完成每次的實驗任務,并在實驗中拓展,去發(fā)現(xiàn)一些新的問題。
在這六項實驗中讓我刻骨銘心的是中斷實驗。中斷可以說是我的一個弱點,首先從概念上我理解比較含糊,理解能力差;其次,6個中斷源比較難記清,經(jīng)常記混,加之它們分配的寄存器存在太多的異同,工作方式更是讓人頭疼;再次,中斷的使用。中斷的精髓是在于使用,在電路設計中使用中斷來控制單片機的工作,使之更好的達到所需目的。我剛開始學習的時候連怎么使用中斷還是一無所知,后來我到圖書館里查找資料,慢慢的琢磨。至今學會了中斷源的4種工作方式,能簡單設計出中斷電路。雖然起步晚,但我相信能厚積薄發(fā),未來一定能熟練使用它們。
經(jīng)過學習單片機的中斷控制,我發(fā)現(xiàn)自己存在許多不足,但這些都困難無法阻擋我對單片機的追求。許多同學在做實驗時都抱著不良的心態(tài),他們只想照著實驗本的步驟原原本本把實驗完成就算大功告成,很少更深層次挖掘里面的奧秘,更有甚者是打醬油的,我不得不為他們?nèi)绱死速M那么好的學習機會感到可惜。我能為他們做的就是幫助他們講解一些單片機知識,有時教他們編寫程序。實驗室是培養(yǎng)高層次人才和開展科學研究的重要基地。邢臺學院對培養(yǎng)學生的動手能力是十分重視的,為了提高學生的動手能力,讓學生做相關實訓并完成單片機實驗,在實驗的形式上注重培養(yǎng)學生的實驗技能和動手能力。從單片機實驗中學生就可以總結出大量的經(jīng)驗以適應當代社會的發(fā)展。
學習單片機這門課程,要掌握單片機指令系統(tǒng)中匯編語言各種基本語句的意義及匯編語言程序設計的基本知識和方法,以及單片機與其他設備相連接的輸入輸出中斷等接口技術。使我從硬件軟件的結合上理論聯(lián)系實際,提高動手能力,從而全面掌握單片機的應用。
單片機課是一門實踐性很強的課程,僅有課堂上理論知識的學習,對運用好單片機是完全不夠的,必須親自做實驗,從實驗中吸取教訓,總結經(jīng)驗,增加實戰(zhàn)經(jīng)驗,加深對單片機的理解,更好的運用單片機。單片機實驗課的目的就是為學生提供做實驗的機會,讓學生能夠從幾個簡單的實驗中學會單片機開發(fā)的過程和單片機的實際運用。單片機實驗課讓我將課堂上學到的理論知識運用到實驗當中去,在實驗中發(fā)現(xiàn)問題,解決問題,強化理論知識的運用。下面是自己做實驗當中遇到的一些問題和體會。
首先,自己在實驗課上對老師講解的東西沒有很好的領會。自己覺得老師講的電路和原理自己都懂,就沒有認真聽老師的講解,但是當自己去理解程序和修改程序就發(fā)現(xiàn)自己對電路的工作原理和過程并不是很了解,使得自己在改編程序實現(xiàn)不同功能時遇到較多的問題。
其次,自己對匯編語言的運用不是很熟練。自己之前接觸和使用的編程語言都是諸如C語言等的高級語言,對匯編語言基本上是空白狀態(tài)。雖然每個實驗老師都給出了參考程序,但是自己理解整個程序的運行過程和程序的功能依然遇到了比較大的困難。這就說明基礎薄弱是實驗中最大的問題。
最后,也是最突出的一個問題。自己邏輯思維和分析問題的能力比較欠缺。對程序的分析能力不足,不能夠很好的理解程序段之間的邏輯關系。同時,自己對實驗中遇到的問題不能及時分析并找出解決的辦法,知識一味的依賴老師的指導和同學的幫助。這也提醒自己,只有多加強鍛煉,才能不斷提高這方面的能力。
六周的時間說短不短,說長不長,因為在這個不同尋常的六周時間里,我除了做實驗,還到圖書管理查閱了許多與單片機相關的書籍,學習用C語言編寫程序,艱苦奮斗,使我在單片機學習上有了質的飛躍?,F(xiàn)在的我雖然不是學習最好的,可是我已經(jīng)改變過去一事無成的我,如今站在大家面前是個全新的我。我始終夢想著以后自己能在單片機行業(yè)上有所建樹,經(jīng)過自己的雙手創(chuàng)造無價的財富,成就感伴隨終生。
身存在的不足之處。而且這也激發(fā)了我今后努力學習的興趣。
發(fā)現(xiàn)問題、提出問題、分析問題、解決問題和實踐能力的提高都會受益于我在以后的學習、工作和生活中。
1、不管做什么事,計劃是很重要的。沒有一個完好的計劃,做事情就會沒有一個好的順序,做事情會比較亂,很難成功。而有一個好的計劃,不管做什么事都會事半功倍,做事心中有數(shù),明確重點和緩急,不會有疏漏。這樣才能提高成功率。
2、做事要多動腦,選出最好的方法。一件事往往有多種解決方法,一個好的方法,不僅能使事情事半功倍,而且往往決定最后的成與敗,所以做事時一定要多動一下腦筋,想出最好的方法。
3、要注意細節(jié)。細節(jié)決定成敗,這句話在這次課題中不僅一次得到了印證,特別是在軟件的編程過程中,一點點的錯誤就會使你整個程序不能運行。因此我們不僅僅要有整體意識,也要注意細節(jié),不要因一個關鍵地方的一個細節(jié)而導致滿盤皆輸。
4、最后,也是最重要的一點,通過這次課題,我們學到了很多有關單片機方面的知識,也對單片機有了更深入的了解。使我們受益匪淺。
總之,親自動手是課堂學習的延續(xù),電子領域隨時隨地都在發(fā)生著翻天覆地的變化,現(xiàn)有的知識儲備總是落后于科技的發(fā)展腳步,我們只有不斷學習新知識,才能做到面對新課題時游刃有余。
感謝王承林老師的教育指導!
教會我單片機應用技術,使我受益終生。
第五篇:單片機實驗代碼總結
編者:方園
單片機實驗代碼集合(by fangyuan)
1.多字節(jié)累加程序:
ORG 0000H LJMP MAIN ORG 0030H;將加數(shù)和被加數(shù)送到指定地址 MAIN: MOV 20H,#45H
MOV 21H,#74H
MOV 30H,#67H
MOV 31H,#28H
;低位相加
MOV A,21H
ADD A,31H
DA A
MOV 42H,A
;高位相加
MOV A,20H
ADDC A,30H
DA A
MOV 41H,A
CLR A
ADDC A,#0
MOV 40H,A
SJMP $ END
2.數(shù)據(jù)交換實驗
編寫程序,實現(xiàn)以下操作:
【功能1】產(chǎn)生數(shù)組Hex1:0H、1H、2H、? 0FH,存儲到片內(nèi)RAM區(qū)中,數(shù)組Hex1的首地址為30H。
【功能2】產(chǎn)生數(shù)組Hex2:0FH、0EH、0DH、? 0H,存儲到片外RAM區(qū)中,數(shù)組Hex2的首地址為3000H。
【功能3】將片內(nèi)RAM數(shù)組Hex1與片外RAM數(shù)組Hex2交換內(nèi)容。
代碼:
ORG 0000H
Hex1 EQU 30H
;定義內(nèi)部RAM數(shù)組首地址
Hex2 EQU 3000H;定義外部RAM數(shù)組首地址
編者:方園
LJMP MAIN
ORG 0030H MAIN:
MOV SP,#4FH
;定義棧頂?shù)刂?/p>
MOV R7,#16
MOV R0,#Hex1
MOV DPTR,#Hex2
LCALL HEX1DE
;調用內(nèi)部送數(shù)據(jù)函數(shù)
LCALL HEX2DE;調用外部送數(shù)據(jù)函數(shù)
LCALL XCHDE;調用交換函數(shù)
SJMP $
ORG 0100H
;內(nèi)部送數(shù)據(jù)
HEX1DE: PUSH 00H
PUSH 07H
MOV A,#0 LOOP1: MOV @R0,A
INC A
INC R0
DJNZ R7,LOOP1
POP 07H
POP 00H
RET
;外部送數(shù)據(jù)
HEX2DE: PUSH 07H
PUSH DPL
PUSH DPH
MOV A,#0FH LOOP2: MOVX @DPTR,A
DEC A
INC DPTR
DJNZ R7,LOOP2
POP DPH
POP DPL
POP 07H
RET
;交換子程序 XCHDE:
LOOP3: MOVX A,@DPTR
XCH A,@R0
編者:方園
END
MOVX @DPTR,A INC R0 INC DPTR DJNZ R7,LOOP3 RET
3.查表實驗
1、《單片機原理及應用實驗教程》(第2版)“第2章 實驗3”(P49)。要求: 16進制數(shù)(00H~0FH)ASCⅡ碼表定義在內(nèi)部ROM中(用偽指令定義);R0為片內(nèi)RAM區(qū)Hex數(shù)組指針;R1為片內(nèi)RAM區(qū)Asc數(shù)組指針;數(shù)據(jù)塊長度放在寄存器R2中。
代碼如下:
ORG 0000H
Hex EQU 40H
Asc EQU 50H
LJMP MAIN
ORG 0030H MAIN:
MOV R2,#16
MOV DPTR,#TABLE
MOV R0,#Hex
MOV R1,#Asc
MOV SP,#2FH
LCALL FUZHI
LCALL ZHUANHUAN
SJMP $
TABLE:
DB '0123456789'
;查表子程序 ORG 1000H ZHUANHUAN:
PUSH 00H
PUSH 01H
PUSH 02H LOOP1:
MOV A,@R0
編者:方園
MOVC A,@A+DPTR
MOV @R1,A
INC R0
INC R1
DJNZ R2,LOOP1
POP 02H
POP 01H
POP 00H
RET
;R0送值子程序 FUZHI:
PUSH 00H
PUSH 01H
PUSH 02H
MOV A,#0 LOOP2:
MOV @R0,A
INC R0
INC A
DJNZ R2,LOOP2
POP 02H
POP 01H
POP 00H
RET END
2、編寫用@A+PC指令的查表程序,實現(xiàn)用查表方式將片內(nèi)RAM中16進制數(shù)組Hex(00H~0FH)轉換為ASCⅡ碼并存入片內(nèi)RAM數(shù)組Asc中。要求:
16進制數(shù)(00H~0FH)ASCⅡ碼表在內(nèi)部ROM中; R0為片內(nèi)RAM區(qū)Hex數(shù)組指針; R1為片內(nèi)RAM區(qū)Asc數(shù)組指針; 數(shù)據(jù)塊長度放在寄存器R2中。代碼如下:
ORG 0000H
Hex EQU 40H
;內(nèi)部Hex送數(shù)據(jù)地址定義
Asc EQU 50H;查表后數(shù)據(jù)儲存地址定義
LJMP MAIN
ORG 0030H MAIN:
MOV R2,#16
MOV DPTR,#TABLE
MOV R0,#Hex
編者:方園
MOV R1,#Asc
MOV SP,#2FH
LCALL FUZHI;送值函數(shù)
LCALL CHABIAO;查表函數(shù)
SJMP $
ORG 1000H;查表子程序 CHABIAO:
PUSH 00H
PUSH 01H
PUSH 02H LOOP1:
MOV A,@R0
ADD A,#20H
MOVC A,@A+PC
MOV @R1,A
INC R0
INC R1
DJNZ R2,LOOP1
POP 02H
POP 01H
POP 00H
RET
;R0送值子程序 FUZHI:
PUSH 00H
PUSH 01H
PUSH 02H
MOV A,#0 LOOP2:
MOV @R0,A
INC R0
INC A
DJNZ R2,LOOP2
POP 02H
POP 01H
POP 00H
RET
編者:方園
TABLE:
DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,41H,42H,43H,44H,45H,46H
END
4.十進制數(shù)1-100累加運算
《單片機原理及應用實驗教程》(第2版)“第2章 實驗5”(P30)。編寫程序,實現(xiàn)以下功能:
【功能1】產(chǎn)生十進制數(shù)1~100,并存放在片外RAM中以1000H為首地址的Deci數(shù)組中。【功能2】對Deci數(shù)組元素進行累加運算,并將累加和存入內(nèi)部RAM中60H(存累加和低位)和61H(存累加和高位)單元。代碼如下: 方法一:
ORG 0000H
LJMP MAIN
ORG 0030H MAIN:
MOV R7,#100
MOV DPTR,#1000H
MOV SP,#20H
LCALL STEP1
LCALL STEP2
SJMP $
ORG 2000H
STEP1: PUSH 07H
PUSH DPH
PUSH DPL
MOV A,#0
MOV R3,#0 LOOP1: INC A
DA A
XCH A,R3
ADDC A,#0
MOVX @DPTR,A
INC DPTR
XCH A,R3
MOVX @DPTR,A
INC DPTR
DJNZ R7,LOOP1
POP DPL
編者:方園
POP DPH
POP 07H
RET
STEP2: PUSH 07H
PUSH DPH
PUSH DPL
MOV 60H,#0
MOV 61H,#0
MOV R3,#0
LOOP2: INC DPTR
MOVX A,@DPTR
ADD A,60H
DA A
MOV 60H,A
CLR A
ADDC A,61H
DA A
MOV 61H,A
INC DPTR
DJNZ R7,LOOP2
MOV A,#1
ADD A,61H
DA A
MOV 61H,A
POP DPL
POP DPH
POP 07H
RET
END
方法二:
ORG 0000H
LJMP MAIN
ORG 0030H MAIN:
MOV R7,#100
MOV DPTR,#1000H
MOV SP,#20H
編者:方園
LCALL STEP1
LCALL STEP2
SJMP $
ORG 2000H
;送值子函數(shù)
STEP1: PUSH 07H
PUSH DPH
PUSH DPL
MOV A,#0 LOOP1: INC A
DA A
MOVX @DPTR,A
INC DPTR
DJNZ R7,LOOP1
CLR A
ADDC A,#0
MOVX @DPTR,A
POP DPL
POP DPH
POP 07H
RET
;累加子函數(shù)
STEP2: PUSH 07H
PUSH DPH
PUSH DPL
MOV 60H,#0
MOV 61H,#0
LOOP2:
MOVX A,@DPTR
ADD A,60H
DA A
MOV 60H,A
CLR A
ADDC A,61H
DA A
MOV 61H,A
INC DPTR
DJNZ R7,LOOP2
MOVX A,@DPTR
ADD A,61H
DA A
編者:方園
MOV 61H,A POP DPL POP DPH POP 07H RET
END
5.DPTR指針應用
《單片機原理及應用實驗教程》(第2版)“第2章 實驗6”(P31)。編寫程序,實現(xiàn)以下功能:
【功能1】產(chǎn)生十進制數(shù)組Deci(1~99),并存放在片內(nèi)RAM中,Deci數(shù)組首地址為08H。【功能2】將Deci數(shù)組中的偶數(shù)元素全部送入外部RAM偶數(shù)區(qū),首地址為2000H;將Deci數(shù)組中的奇數(shù)元素全部送入外部RAM奇數(shù)區(qū),首地址為3000H;分別統(tǒng)計外部RAM偶數(shù)區(qū)和奇數(shù)區(qū)元素個數(shù)。代碼如下:
ORG 0000H
LJMP MAIN
ORG 0030H MAIN:
MOV SP,#70H
MOV R7,#99
MOV R0,#08H
MOV R5,#0
MOV R6,#0
LCALL STEP1
LCALL STEP2
SJMP $
STEP1: PUSH 00H
PUSH 07H
MOV A,#1 LOOP1: DA A
MOV @R0,A
INC R0
INC A
DJNZ R7,LOOP1
POP 07H
POP 00H
RET
編者:方園
STEP2: MOV DPTR,#2000H
PUSH DPL
PUSH DPH
MOV DPTR,#3000H
MOV R3,DPH
MOV R4,DPL LP1: MOV A,@R0
MOV R2,A
JNB ACC.0,LOOP2
SJMP LOOP3
LOOP2: POP DPH
POP DPL
MOVX @DPTR,A
MOV A,R5
ADD A,#1
DA A
MOV R5,A
INC DPTR
PUSH DPL
PUSH DPH
SJMP NEXT
LOOP3: MOV DPH,R3
MOV DPL,R4
MOVX @DPTR,A
MOV A,R6
ADD A,#1
DA A
MOV R6,A
INC DPTR
MOV R3,DPH
MOV R4,DPL
SJMP NEXT
NEXT:
INC R0
DJNZ R7,LP1
POP DPH
POP DPL
RET
END
編者:方園
6.定時器應用實驗
DBUF EQU 30H ORG 0000H STRT: LJMP MAIN ORG 000BH LJMP PTF00 ORG 0030H MAIN: MOV DPTR,#5FFFH MOV A,#0DCH MOVX @DPTR,A MOV R5,#20 LP: MOVX A,@DPTR JNB ACC.7,LP MOV A,#00H MOVX @DPTR,A MOV A,#34H MOVX @DPTR,A MOV SP,#60H MOV R0,#39H MOV R7,#06H ML1: MOV @R0,#00H INC R0 DJNZ R7,ML1 MOV TMOD,#01H MOV TL0,#0B0H MOV TH0,#3CH SETB TR0 MOV IE,#82H MOV 40H,#10H ML0: LCALL DIR LJMP ML0 PTF00: PUSH PSW PUSH ACC SETB PSW.3 MOV TL0,#0B0H MOV TH0,#3CH
編者:方園
DJNZ R5,PTFY MOV R5,#20
MOV A,40H DEC A MOV 40H,A JNZ PTFY MOV 40H,#10H MOV R0,#39H MOV R7,#6 PTFX: MOV A,@R0 ADD A,#1 DA A MOV @R0,A CJNE A,#0AH,$+3 JC PTFY MOV @R0,#0 INC R0 DJNZ R7,PTFX PTFY: POP ACC POP PSW RETI DIR:
MOV R3,#06H MOV A,#92H MOV DPTR,#5FFFH MOVX @DPTR,A MOV R1,#39H TY11: MOV A,@R1 MOV DPTR,#CODE1 MOVC A,@A+DPTR MOV DPTR,#5FFFH MOVX @DPTR,A
INC R1 DJNZ R3,TY11 RET
CODE1: DB 0C0H,0F9H,0A4H,0B0H,99H DB 92H,82H,0F8H,80H,90H,88H
編者:方園
DB 83H,0C6H,0A1H,86H,8EH,8CH DB 0C1H,89H,0C7H,0BFH,91H DB 00H,0FFH END
7.廣告燈實驗
ORG 0000H LJMP MAIN ORG 000BH LJMP DELAY ORG 0030H MAIN: MOV DPTR,#TAB MOV R5,#71H MOV R2,#00H MOV R6,#20 MOV TMOD,#01H MOV TL0,#0B0H MOV TH0,#3CH SETB TR0 MOV IE,#82H SJMP $ DELAY: MOV TL0,#0B0H MOV TH0,#2CH
DJNZ R6,LP ACALL STEP MOV R6,#20 DJNZ R5,LP MOV R5,#71H
LP: RETI
STEP: LOOP: MOV A,R2 MOVC A,@A+DPTR MOV P1,A INC R2 DEC R5
編者:方園
RET
TAB:DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH
DB 0FFH,7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH
DB 0FEH,0FFH,0FEH,0FCH,0F8H,0F0H,0E0H,0C0H
DB 80H,00H,80H,0C0H,0E0H,0F0H,0F8H,0FCH
DB 0FEH,0FFH,7FH,3FH,1FH,0FH,07H,03H
DB 01H,00H,01H,03H,07H,0FH,1FH,3FH
DB 7FH,0FFH,7EH,3CH,18H,00H,18H,3CH
DB 7EH,0FFH,0FEH,0FCH,0FCH,0F9H,0F3H,0E7H
DB 0CFH,9FH,3FH,7FH,0FFH,7FH,3FH,9FH
DB 0CFH,0E7H,0F3H,0F9H,0FCH,0FEH,0FFH
DB 0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,80H,00H
DB 80H,40H,20H,10H,08H,04H,02H,01H,00H
DB 01H,02H,04H,08H,10H,20H,40H,80H,00H
DB 80H,0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH END