版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
7.1匯編源程序的建立與編譯
7.2Proteus與單片機(jī)電路的交互式仿真與調(diào)試
7.3I/O口應(yīng)用
7.44×4矩陣式鍵盤識別技術(shù)
7.5動態(tài)掃描顯示
7.68×8點陣LED顯示
7.7I/O口的擴(kuò)展
第七章單片機(jī)應(yīng)用系統(tǒng)開發(fā)設(shè)計實例7.8定時/計數(shù)器實驗
7.9外部數(shù)據(jù)存儲器擴(kuò)展
7.10外部中斷實驗
7.11單片機(jī)與PC機(jī)間的串行通信
7.12單片機(jī)與步進(jìn)電機(jī)的接口技術(shù)
7.13單片機(jī)與直流電動機(jī)的接口技術(shù)
7.14基于DAC0832數(shù)/模轉(zhuǎn)換器的數(shù)控電源
7.15基于ADC0808模/數(shù)轉(zhuǎn)換器的數(shù)字電壓表7.1.1Proteus中的源程序設(shè)計與編譯
1.建立源程序文件
在ProteusISIS界面中單擊菜單Soure(源程序),在彈出的下拉菜單中單擊“Add/Remove
SourceFiles…”(添加/移開源程序)選項,彈出如圖7-1所示對話框。單擊“CodeGenerationTool”(目標(biāo)代碼生成工具)下方框中按鈕,彈出下拉菜單,根據(jù)需要選擇相應(yīng)的編譯器,例如“ASEM51”(51系列單片機(jī)編譯器)。
7.1匯編源程序的建立與編譯圖7-1Add/RemoveSourceCodeFiles對話框在圖7-1中單擊“New”按鈕,彈出如圖7-2所示的對話框,在文件名框中輸入新建源程序文件名“mydesign”,單擊“打開”按鈕,彈出圖7-2中所示的小對話框,選擇“是”按鈕,新建的源程序文件就添加到圖7-1中的“SourceCodeFilename”方框中,如圖7-3所示。同時在ISIS界面的“Source”菜單中也加入了源程序文件名“mydesign.asm”,如圖7-4所示。圖7-2新建源程序文件對話框圖7-3源程序添加結(jié)果圖7-4菜單Source中加載的源程序文件
2.編寫源程序代碼
單擊菜單【Source】→【mydesign.asm】,彈出圖7-5所示的源程序編輯窗口。編寫源程序后存盤退出。圖7-5源程序編輯窗口
3.源程序編譯
(1)編譯器設(shè)置。第一次使用編譯器時需進(jìn)行相關(guān)的設(shè)置,單擊菜單【Source】→【DefineCodeGenerationTools】,出現(xiàn)圖7-6所示界面,本例中實際設(shè)置結(jié)果如圖7-6所示。
(2)編譯源程序,生成目標(biāo)代碼文件。單擊【Source】→【BuildAll】,編譯結(jié)果在彈出的編譯日志對話框中。如果沒有錯誤,便成功生成目標(biāo)代碼“.hex”文件。本例中生成的目標(biāo)代碼文件為“mydesign.hex”。圖7-6編譯器設(shè)置界面7.1.2KeilμVision中的源程序設(shè)計與編譯
1.新建項目
(1)雙擊桌面快捷圖標(biāo)即可進(jìn)入如圖7-7所示的集成開發(fā)環(huán)境編輯操作界面,主要包括三個窗口:工程項目窗口、編輯窗口和輸出窗口。
(2)單擊Project菜單,在彈出的下拉菜單中選中“NewProject”選項,新建一個項目,如圖7-8所示。圖7-7μVision2編輯操作界面圖7-8Project界面
(3)選擇要保存的路徑,輸入工程文件的名字(比如保存到uv目錄里,工程文件的名字為“shiyan1”),如圖7-9所示,然后單擊“保存”按鈕。
圖7-9Project保存設(shè)置界面
(4)這時會彈出一個對話框,要求選擇單片機(jī)的型號。這里可以根據(jù)所使用的單片機(jī)來選擇,Keil幾乎支持所有51核的單片機(jī)。這里以Atmel的AT89C51來說明,如圖7-10所示。圖7-10選擇器件
(5)完成以上步驟后,顯示畫面如圖7-11所示。
先進(jìn)行選項設(shè)置,將鼠標(biāo)指針指向“Target1”并單擊右鍵,再從彈出的右鍵菜單中單擊“OptionsforTarget”選項,如圖
7-12所示。圖7-11初始化編輯界面圖7-12選擇“OptionsforTarget”選項
(6)從彈出的“Options”對話框中選擇“Output”標(biāo)簽欄,并按圖7-13所示設(shè)置各項。
圖7-13“Output”標(biāo)簽欄
2.建立一個新的ASM匯編語言程序并編譯
下面開始編寫源程序。
(1)在菜單欄中,單擊“File”菜單,再在下拉菜單中單擊“New”選項,或直接單擊工具欄的快捷圖標(biāo)來建立一個新的編輯窗口。在此編輯窗口中輸入用戶的應(yīng)用程序。具體輸入前建議首先保存該空白文件,具體方法是單擊菜單上的“File”按鈕,在下拉菜單中選中“SaveAs”選項,在彈出對話框的“文件名”欄右側(cè)編輯框中輸入欲使用的文件名,同時,必須輸入正確的擴(kuò)展名,如“Text1.asm”,然后,單擊“保存”按鈕,如圖7-14所示。圖7-14保存源程序
(2)回到編輯界面后,單擊“Target1”前面的“+”號,然后在“SourceGroup1”上單擊右鍵,彈出如圖7-15所示的菜單。
圖7-15彈出右鍵菜單然后單擊“AddFiletoGroup‘SourceGroup1’”,打開如圖7-16所示對話框,在“文件類型”處默認(rèn)為“CSourcefile(*.c)”,因為前面我們保存的是匯編語言的文件,故需要選擇“Asm
Sourcefile(*.s*;*.src;*.a*)”,這樣在上面就可以看到剛才保存的匯編語言文件“Text1.asm”,雙擊該文件則自動添加至項目,單擊“Close”關(guān)閉對話框。
從圖7-17中可以看出:在添加了匯編語言文件后,在“Source
Group1”文件夾前面出現(xiàn)了一個“+”號,單擊“+”號展開就看到了剛才添加的“Text1.asm”文件。圖7-16添加文件對話框圖7-17添加文件后工程欄的變化
(3)打開文件就可以在右側(cè)的編輯區(qū)輸入?yún)R編源程序了。在輸入指令時,讀者可以看到事先保存待編輯文件的好處:Keil會自動識別關(guān)鍵字,并以不同的顏色提示用戶加以注意,這樣會使用戶少犯錯誤,有利于提高編程效率。如圖7-18所示,程序輸入完畢應(yīng)再次保存。圖7-18程序輸入完畢后狀態(tài)
(4)程序文件編輯完畢后,單擊“Project”菜單,選中“Builttarget”選項(或者使用快捷鍵F7),或者單擊工具欄的快捷圖標(biāo)來進(jìn)行編譯,如圖7-19所示。
圖7-19編譯菜單
(5)如果有錯誤,則在最后的輸出窗口中會出現(xiàn)所有錯誤所在的位置和錯誤的原因,并有“Targetnotcreated”的提示。雙擊該處的錯誤提示,在編輯區(qū)對應(yīng)錯誤指令處左面出現(xiàn)藍(lán)色箭頭提示,然后對當(dāng)前的錯誤指令進(jìn)行修改,如圖7-20所示。
圖7-20錯誤提示
(6)將所有提示過的錯誤進(jìn)行修改,然后再次重復(fù)(4)的操作進(jìn)行編譯,直至出現(xiàn)“"shiyan1"-0Error(s),0Warning(s)”,說明編譯完全通過,如圖7-21所示。
圖7-21編譯通過提示
3.調(diào)試并仿真
編譯成功后,就可以進(jìn)行調(diào)試并仿真了。單擊“Debug”菜單,在下拉菜單中單擊“Start/Stop
DebugSession”(或者使用快捷鍵Ctrl+F5),或者單擊工具欄的快捷圖標(biāo)就可以進(jìn)入調(diào)試界面,如圖7-22所示。圖7-22調(diào)試界面在存儲器窗口的地址欄處輸入C:0000H后回車,就可以查看所有單片機(jī)片內(nèi)程序存儲器的內(nèi)容,如圖7-23所示,下面用橫線畫出來的部分就是已經(jīng)編輯的源程序轉(zhuǎn)化成的機(jī)器語言的十六進(jìn)制數(shù)(或者說是對應(yīng)的機(jī)器碼)。如果在存儲器窗口的地址欄處輸入D:00H后回車,則可以查看所有單片機(jī)片內(nèi)數(shù)據(jù)存儲器的內(nèi)容。
圖7-23存儲器窗口下面介紹幾種常用的調(diào)試命令及方法。
(1)復(fù)位CPU。
(2)全速運行(F5)。
(3)單步跟蹤(F11)。
(4)單步運行(F10)。
(5)執(zhí)行返回(Ctrl+F11)。
(6)停止調(diào)試(Ctrl+F5)。7.2.1加載目標(biāo)代碼
在ProteusISIS界面中編輯電路原理圖實例,如圖7-24所示。7.2Proteus與單片機(jī)電路的交互式仿真與調(diào)試圖7-24實例電路原理圖雙擊單片機(jī)AT89C51,打開其屬性編輯框,在“ProgramFile”欄中,單擊打開按鈕,選取目標(biāo)代碼文件,這里是“MYDESIGN.HEX”。在“ClockFrequency”欄中設(shè)置時鐘頻率為12MHz,如圖7-25所示。圖7-25加載目標(biāo)代碼文件和時鐘設(shè)置7.2.2單片機(jī)系統(tǒng)的Proteus交互仿真
在Proteus仿真界面中單擊“運行”按鈕,全速啟動仿真,此時電路中的LED不亮。用鼠標(biāo)單擊電路圖中的按鈕,進(jìn)行交互仿真。單擊一次按鈕,LED燈亮,再單擊一次,LED燈滅,如此循環(huán)交替。本實例仿真片段如圖7-26所示。單擊“停止”按鈕,可停止仿真。圖7-26實例仿真片段7.2.3調(diào)試菜單與調(diào)試窗口
系統(tǒng)在全速仿真運行時不顯示調(diào)試窗口,可單擊暫停按鈕,然后單擊ProteusISIS界面的“Debug”菜單,彈出如圖7-27所示的下拉菜單。從圖中可以看出,調(diào)試菜單包含有3個存儲器窗口,調(diào)試過程中可分別打開這3個存儲器窗口進(jìn)行觀察。圖7-27“Debug”下拉菜單
1.單片機(jī)寄存器窗口
通過菜單【Debug】→【8051CPURegisters-U1】打開單片機(jī)寄存器窗口,如圖7-28所示。窗口里面有常用的SFR,如SP、PC、PSW、R0~R7、ACC及將要執(zhí)行的指令等。在本窗口內(nèi)右擊,可以設(shè)置窗口的字體和顏色。
2.單片機(jī)SFR窗口
通過菜單【Debug】→【8051CPUSFRMemory-U1】打開單片機(jī)的SFR窗口,如圖7-29所示。圖7-28單片機(jī)寄存器窗口圖7-29單片機(jī)SFR窗口
3.單片機(jī)IDATA窗口
通過菜單【Debug】→【8051CPUInternal(IDATA)Memory-U1】打開單片機(jī)的IDATA窗口,如圖7-30所示。
圖7-30單片機(jī)IDATA窗口在SFR、IDATA窗口中右擊鼠標(biāo),可彈出該窗口的設(shè)置菜單,如圖7-31所示。可使用“Goto”命令快速運動到指定的顯示單元,還可復(fù)制數(shù)據(jù)或改變顯示方式等。
圖7-31單片機(jī)IDATA窗口的快捷菜單7.2.4觀察窗口
1.觀察項添加
通過菜單【Debug】→【W(wǎng)atchWindow】打開空白的觀察窗口,在觀察窗口內(nèi)右擊鼠標(biāo),彈出快捷菜單,如圖7-32所示。圖7-32觀察窗口及快捷菜單若單擊對話框中的“AddItems(ByName)”項,便會彈出如圖7-33所示的對話框,雙擊相應(yīng)的SFR寄存器名稱,即可以觀察項名稱方式,并將觀察項添加到觀察窗口中。也可選擇以觀察項的地址來添加觀察項的方式。添加了觀察項的觀察窗口如圖7-34所示。圖7-33“AddMemoryItem”對話框圖7-34添加了觀察項的觀察窗口
2.觀察項刪除
要刪除已添加的觀察項,有兩種方法:
(1)在觀察窗口單擊選中相應(yīng)的觀察項,按鍵盤上的“Del”鍵即可。
(2)在觀察窗口右擊相應(yīng)的觀察項,在彈出的快捷菜單中單擊“DeleteItem”選項。
3.觀察點條件設(shè)置
在仿真運行的過程中,還可以通過設(shè)置“觀察點條件”的手段來觸發(fā)中斷,以滿足某些特殊條件斷點的要求。具體方法為:在觀察窗口內(nèi)右擊鼠標(biāo),在彈出的快捷菜單中單擊“WatchpointCondition”項,彈出觀察點條件設(shè)置框,如圖
7-35所示。圖7-35觀察點條件設(shè)置框7.3.1Proteus電路設(shè)計
1.元件清單列表
打開ProteusISIS編輯環(huán)境,按表7-1所列的清單添加元件。7.3I/O口應(yīng)用表7-1元件清單
2.電路原理圖
元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-36所示的原理圖(晶振和復(fù)位電路略)連接硬件電路。
圖7-36電路原理圖7.3.2Proteus調(diào)試與仿真
1.建立程序文件
(1)打開KeilμVision3,新建Keil項目,選擇AT89C51單片機(jī)作為CPU;
(2)新建匯編源文件,編寫程序并將其導(dǎo)入到“SourceGroup1”中;
(3)在“OptionsforTarget”對話框中,選中“Output”選項卡中的“CreateHEXFile”選項和“Debug”選項卡中的“Use:ProteusVSMSimulator”選項;
(4)編譯源程序,修改程序中的錯誤直至通過。
2.加載目標(biāo)代碼文件
(1)在ProteusISIS中,雙擊AT89C51元件,打開“EditComponent”對話框,設(shè)置單片機(jī)的頻率為12MHz;
(2)在該窗口的“ProgramFile”欄中,選擇先前在Keil中編譯產(chǎn)生的“.HEX”文件;
(3)在ProteusISIS菜單欄中選擇【File】→【SaveDesign】選項,保存設(shè)計;
(4)在ProteusISIS菜單欄中,打開“Debug”下拉菜單,在菜單中選擇“UseRemoteDebugMonitor”選項,以支持與Keil的聯(lián)調(diào)。
3.調(diào)試與仿真
(1)在Keil的菜單欄中選擇【Debug】→【Start/StopDebugSession】選項,或者在工具欄中直接單擊圖標(biāo),進(jìn)入調(diào)試環(huán)境;
(2)按“F5”鍵或單擊相應(yīng)圖標(biāo),順序執(zhí)行程序;
(3)在ProteusISIS界面中,按動開關(guān),可看到數(shù)碼管的顯示值隨之加1,如圖7-37所示。圖7-37程序運行結(jié)果7.3.3總結(jié)與提示
AT89C51單片機(jī)的P0口在作為普通I/O使用時必須加上拉電阻,否則不能準(zhǔn)確輸入或輸出高低電平。仿真時可通過觀察P0口的電平狀態(tài)來體會這一點。
在Proteus與Keil的聯(lián)調(diào)過程中,可以綜合運用Keil中的多種調(diào)試功能來詳細(xì)觀察電路的工作情況。7.4.1Proteus電路設(shè)計
1.元件清單列表
打開ProteusISIS編輯環(huán)境,按表7-2所列的清單添加元件。7.44×4矩陣式鍵盤識別技術(shù)表7-2元件表清單
2.電路原理圖
元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-38所示的原理圖(晶振和復(fù)位電路略)連接硬件電路。
圖7-38電路原理圖7.4.2源程序設(shè)計
#include〈reg51.h〉
#defineucharunsignedchar
#defineuintunsignedint
sbitdula=P2^6;
sbitwela=P2^7;
uchartemp,num,num1;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
ucharkeyscan()
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(3);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case0xee:num=1;break;
case0xde:num=2;break;
case0xbe:num=3;break;
case0x7e:num=4;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(3);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case0xed:num=5;break;
case0xdd:num=6;break;
case0xbd:num=7;break;
case0x7d:num=8;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(3);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case0xeb:num=9;break;
case0xdb:num=10;break;
case0xbb:num=11;break;
case0x7b:num=12;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(3);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case0xe7:num=13;break;
case0xd7:num=14;break;
case0xb7:num=15;break;
case0x77:num=16;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
returnnum;
}
voidmain()
{
num=1;
wela=1;
P0=0xc0;
wela=0;
dula=1;
P0=0x00;
dula=0;
while(1)
{
num1=keyscan();
dula=1;
P0=table[num1-1];
dula=0;
}
}7.4.3Proteus調(diào)試與仿真
參照7.3.3節(jié)建立程序文件,加載目標(biāo)代碼文件,進(jìn)入調(diào)試環(huán)境,執(zhí)行程序,在ProteusISIS界面中,按下各個按鍵,觀察數(shù)碼管上的顯示和所標(biāo)的鍵號是否對應(yīng)。
7.4.4總結(jié)與提示
在Proteus與Keil的聯(lián)調(diào)過程中,可以綜合運用Keil中的多種調(diào)試功能來詳細(xì)觀察電路的工作情況。
在Proteus中,仿真時可以降低單片機(jī)的工作頻率,觀察電路中各接點的電平變化情況,看是否和所編程序符合,以增強(qiáng)對程序的理解。7.5.1Proteus電路設(shè)計
1.元件清單列表
打開ProteusISIS編輯環(huán)境,按表7-3所列的清單添加元件。7.5動態(tài)掃描顯示表7-3元件清單
2.電路原理圖
元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-39所示的原理圖(晶振和復(fù)位電路略)連接硬件電路。
圖7-39電路原理圖7.5.2源程序設(shè)計
#include〈reg52.h〉
#defineucharunsignedchar
#defineuintunsignedint
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
ucharcodetable1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
/********延時子函數(shù)********/
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/********顯示子函數(shù)********/
voiddisplay()
{
P3=table[0];
P2=table1[0];
delay(1);
P3=0x00;P3=table[1];
P2=table1[1];
delay(1);
P3=0x00;
P3=table[2];
P2=table1[2];
delay(1);
P3=0x00;
P3=table[3];
P2=table1[3];
delay(1);
P3=0x00;P3=table[4];
P2=table1[4];
delay(1);
P3=0x00;
P3=table[5];
P2=table1[5];
delay(1);
P3=0x00;
P3=table[6];
P2=table1[6];
delay(1);
P3=0x00;P3=table[7];
P2=table1[7];
delay(1);
P3=0x00;
}
/********主程序********/
voidmain()
{
while(1)
{
display();
}
}7.5.3Proteus調(diào)試與仿真
參照7.3.3節(jié)建立程序文件、加載目標(biāo)代碼文件,進(jìn)入調(diào)試環(huán)境后執(zhí)行程序,降低單片機(jī)的工作頻率,觀察動態(tài)顯示的過程。
7.5.4總結(jié)與提示
AT89C51單片機(jī)的P0口作為普通I/O使用時必須加上拉電阻,否則不能準(zhǔn)確輸入或輸出高低電平。仿真時可通過觀察P0口的電平狀態(tài)來體會這一點。
在Proteus與Keil的聯(lián)調(diào)過程中,可以綜合運用Keil中的多種調(diào)試功能來詳細(xì)觀察電路的工作情況。7.6.1Proteus電路設(shè)計
1.元件清單列表
打開ProteusISIS編輯環(huán)境,按表7-4所列的清單添加元件。7.68×8點陣LED顯示表7-4元件清單
2.8×8點陣LED元件介紹
ProteusISIS中的8×8點陣LED元件如圖7-40(a)所示。由于該元件引腳沒有任何標(biāo)注,因此在使用之前必須進(jìn)行引腳測試,以確定行線和列線的順序及極性。圖7-40(b)給出了一種引腳測試的方法,根據(jù)測試結(jié)果便很容易確定該元件的電路接法。圖7-408×8點陣LED元件引腳測試3.電路原理圖
元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-41所示的原理圖連接硬件電路。
圖7-41電路原理圖7.6.2Proteus設(shè)計與仿真
參照7.3.3節(jié)建立程序文件、加載目標(biāo)代碼文件,進(jìn)入調(diào)試環(huán)境后執(zhí)行程序,在ProteusISIS界面中的仿真片斷如圖
7-42所示。
圖7-42仿真片段源程序設(shè)計如下:
//使用12MHz晶振,P0口輸出一行數(shù)據(jù),P2口作列掃描,共陽LED管
#include"reg51.h"
#definecharunsignedchar
#defineintunsignedint
charkey,keytmp;
charcodedistaba[]=
{0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00,//2(各數(shù)字的陽碼)
0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,//0
0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,//00x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00,//7
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//黑屏,表示一次顯示完畢
};
charcodescan_cona[8]=
{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//列掃描控制字
delay1ms(intt)
{
inti,j;
for(i=0;i<t;i++)
for(j=0;j<120;j++);
}
//******功能程序*******//
//******向左滾動顯示******//fun1()
{
intm,n,h;
for(h=0;h<32;h++)//控制顯示字?jǐn)?shù)(32/8=4個)
{for(n=0;n<25;n++)//控制幀移動速度
{for(m=0;m<8;m++)//顯示1幀掃描(分8行,每行亮1ms)
{P2=scan_cona[m];P0=distaba[m+h];delay1ms(1);}
}
}
}
//******主程序********//
main()
{keytmp=1;//上電自動演示功能(逐字顯示)
while(1)
{
fun1();
}
}
//**************結(jié)束**************//7.6.3總結(jié)與提示
程序編寫中,必須在h數(shù)值是8的整數(shù)倍時再進(jìn)行下面的移位操作,否則顯示在銜接時會出現(xiàn)亂碼。7.7.1Proteus電路設(shè)計
1.元件清單列表
打開ProteusISIS編輯環(huán)境,按表7-5所列的清單添加元件。7.7I/O口的擴(kuò)展表7-5元件清單
2.電路原理圖
元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-43所示的原理圖連接硬件電路。
圖7-43電路原理圖7.7.2源程序設(shè)計
1.流程圖
圖7-44為程序流程圖。圖7-44流程圖2.程序代碼
#include〈regx52.h〉
#include〈intrins.h〉
#include〈absacc.h〉
#defineucharunsignedchar
#defineuintunsignedint
#definePAXBYTE[0x3fff]
#definePBXBYTE[0x7fff]
#definePC1XBYTE[0xbfff]
#defineCTLXBYTE[0xffff]
sbitreset=P2^5;
voiddelay(uchart);
voiddisplay();
voidmain()
{
EA=1;
ET0=1;
TMOD=0x01;
reset=1;
_nop_();
reset=0;
CTL=0x80;//寫8255控制字,設(shè)置PA,PB,PC為輸出口
while(1){
display();}
}
voiddisplay()
{
ucharoutdata=0xfe,i;
for(i=0;i<8;i++)
{PA=outdata;
delay(200);
outdata=_crol_(outdata,1);
}
PA=0xff;
outdata=0xfe;
for(i=0;i<8;i++)
{PB=outdata;
delay(200);
outdata=_crol_(outdata,1);}
PB=0xff;
outdata=0xfe;
for(i=0;i<8;i++)
{PC1=outdata;
delay(200);
outdata=_crol_(outdata,1);}
PC1=0xff;
}voiddelay(uchart)
{
for(;t>0;t--)
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
TR0=1;
while(TF0==0);
TF0=0;
}
TR0=0;
}7.7.3Proteus調(diào)試與仿真
參照7.3.3節(jié)建立程序文件、加載目標(biāo)代碼文件,進(jìn)入調(diào)試環(huán)境,單擊ProteusISIS下面的仿真運行鍵,即可看到如圖7-45所示的運行結(jié)果。
圖7-45程序運行結(jié)果7.7.4總結(jié)與提示
采用8255并口擴(kuò)展芯片的PA0口,設(shè)計一個4×4鍵的矩陣鍵盤掃描程序。7.8.1Proteus電路設(shè)計
1.元件清單列表
打開ProteusISIS編輯環(huán)境,按表7-6所列的清單添加元件。7.8定時/計數(shù)器實驗表7-6元件清單
2.電路原理圖
元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-46所示的原理圖連接硬件電路。
圖7-46電路原理圖7.8.2Proteus設(shè)計與仿真
參照7.3.3節(jié)建立程序文件、加載目標(biāo)代碼文件,進(jìn)入調(diào)試環(huán)境執(zhí)行程序,在ProteusISIS界面中,可以看到,LED燈亮1s,關(guān)1s,循環(huán)進(jìn)行,其結(jié)果如圖7-47所示。
圖7-47運行結(jié)果源程序如下:
#include〈at89x51.h〉
sbitD=P1^7;
unsignedchartt;
voidtimer0()interrupt1
{
TH0=-50000/256;
TL0=-50000%256;
tt++;
if(tt==20)
{
D=0;
}if(tt==40)
{
tt=0;
D=1;
}
}
voidinit()
{
TMOD=0x01;
TH0=-50000/256;
TL0=-50000%256;EA=1;
ET0=1;
TR0=1;
tt=0;
}
voidmain()
{
init();
while(1)
{}
}7.8.3總結(jié)與提示
嘗試改變計數(shù)器的值,使延時的時間更長。7.9.1Proteus電路設(shè)計
1.元件清單列表
打開ProteusISIS編輯環(huán)境,按表7-7所列的清單添加元件。7.9外部數(shù)據(jù)存儲器擴(kuò)展表7-7元件清單
2.電路原理圖
元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-48所示的原理圖(復(fù)位和振蕩電路略)連接硬件電路。
圖7-48電路原理圖7.9.2Proteus調(diào)試與仿真
參照7.3.3節(jié)建立程序文件、加載目標(biāo)代碼文件,進(jìn)入調(diào)試環(huán)境,然后執(zhí)行下述操作:
(1)在ProteusISIS界面中,單擊按鈕啟動仿真。
圖7-49程序運行結(jié)果
(2)通過菜單【Debug】→【MemoryContents→U1】,打開6264存儲器窗口。
(3)通過菜單【Debug】→【Debug→WatchWindow】,在彈出的觀察窗口右擊鼠標(biāo),選擇“以觀察項的名稱添加觀察項”,在彈出的對話框中添加累加器ACC和數(shù)據(jù)指針DPTR。
(4)單擊按鈕暫停仿真,可觀察程序運行的中間結(jié)果,如圖7-49所示。7.9.3總結(jié)與提示
受計算機(jī)性能的影響,以及Proteus軟件運行仿真時需要處理大量的數(shù)據(jù),會出現(xiàn)仿真結(jié)果的畫面刷新率跟不上程序運行速度的問題,致使不能看到存儲器內(nèi)容隨程序運行的動態(tài)變化,仿真時可手工刷新畫面觀察。中斷控制是提供給用戶使用的中斷控制手段,實際上就是控制一些寄存器。51系列用于此目的的控制寄存器有四個:TCON、IE、SCON及IP。其中IE、IP的格式如下:
(1)中斷允許控制寄存器(IE)。IE寄存器地址為A8H,可進(jìn)行字節(jié)尋址和位尋址,位地址為AFH~A8H。其格式如表7-8所示。7.10外部中斷實驗表7-8IE寄存器
(2)中斷優(yōu)先級控制寄存器(IP)。
IP寄存器地址為B8H,也可進(jìn)行字節(jié)尋址和位尋址,位地址為BFH~B8H,各位定義如表7-9所示。表7-9IP寄存器7.10.1Proteus電路設(shè)計
1.元件清單列表
打開ProteusISIS編輯環(huán)境,按表7-10所列的清單添加元件。表7-10元件清單
2.電路原理圖
元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-50所示的原理圖(晶振和復(fù)位電路略)連接硬件電路。
圖7-50電路原理圖7.10.2Proteus調(diào)試與仿真
參照7.3.3節(jié)建立程序文件,加載目標(biāo)代碼文件,進(jìn)入調(diào)試環(huán)境執(zhí)行程序,在ProteusISIS界面中,按動開關(guān),可看到數(shù)碼管顯示的變化,如圖7-51所示。
圖7-51程序運行結(jié)果7.10.3總結(jié)與提示
在有多個中斷同時存在時,應(yīng)注意中斷優(yōu)先級的設(shè)置以及中斷的觸發(fā)方式;
在Proteus與Keil的聯(lián)調(diào)過程中,可以綜合運用Keil中的多種調(diào)試功能來詳細(xì)觀察電路的工作情況;
在某些情況下中斷子程序中需要對各寄存器進(jìn)行保護(hù)。7.11.1Proteus電路設(shè)計
1.元件清單列表
打開ProteusISIS編輯環(huán)境,按表7-11所列的清單添加元件。7.11單片機(jī)與PC機(jī)間的串行通信表7-11元件清單
2.串口模型介紹
串口模型COMPIM及其引腳功能如圖7-52(a)所示。需要注意的是,在ProteusISIS元件庫的“Connectors”類的“D-Type”子類中,也有一個串口模型器件CONN-D9F,如圖7-52(b)所示,因該器件在使用時沒有仿真模型,將導(dǎo)致仿真失敗,所以要避免選用。
圖7-52Proteus串口模型
3.電路原理圖
元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-53所示的原理圖(晶振和復(fù)位電路略)連接硬件電路。
圖7-53電路原理圖
4.串口模型屬性設(shè)置
串口模型屬性設(shè)置:波特率為4800;數(shù)據(jù)位為8;奇偶校驗為無;停止位為1,如圖7-54所示。
圖7-54串口模型屬性設(shè)置
5.虛擬終端屬性設(shè)置
PCT代表計算機(jī)發(fā)送數(shù)據(jù),PCR用來監(jiān)視PC接收到的數(shù)據(jù),它們的屬性設(shè)置完全一樣,如圖7-55所示。SCMT和SCMR分別是單片機(jī)的數(shù)據(jù)發(fā)送和接收終端,用來監(jiān)視單片機(jī)發(fā)送和接收的數(shù)據(jù),它們的屬性設(shè)置也完全一樣,如圖
7-56所示。圖7-55PC機(jī)虛擬終端屬性設(shè)置圖7-56單片機(jī)虛擬終端屬性設(shè)置7.11.2Proteus調(diào)試與仿真
參照7.3.3節(jié)建立程序文件,加載目標(biāo)代碼文件,進(jìn)入調(diào)試環(huán)境執(zhí)行程序,進(jìn)行以下操作:
(1)在ProteusISIS界面中的PCT虛擬終端上單擊右鍵,在彈出的快捷菜單中選擇“EchoTypedCharacters”項。
(2)鼠標(biāo)指針在PCT終端窗口單擊,該窗口出現(xiàn)閃爍的光標(biāo),從鍵盤輸入數(shù)字“8”,在PCS終端窗口中就出現(xiàn)“8”,表明PC機(jī)發(fā)送數(shù)據(jù)“8”,按照設(shè)計好的程序,單片機(jī)將接收到“8”,所以在單片機(jī)接收虛擬終端SCMR上會顯示“8”,同時又將數(shù)字“8”送顯到數(shù)碼管上。接下來,單片機(jī)又將該數(shù)回發(fā)給PC機(jī),因此在單片機(jī)發(fā)送終端SCMT上也顯示“8”,PC機(jī)接收
到數(shù)據(jù)后在接收終端PCR上同樣顯示“8”,結(jié)果如圖7-57所示。根據(jù)程序設(shè)計,當(dāng)在鍵盤上輸入0~9以外的字符時,單片機(jī)輸出到數(shù)碼管上顯示的則是該字符的ASCII碼,如圖7-58所示。圖7-57程序運行結(jié)果1圖7-58程序運行結(jié)果27.11.3總結(jié)與提示
在原理圖中的電阻R1不能少,否則虛擬終端PCR將收不到信息;
在Proteus與Keil的聯(lián)調(diào)過程中,可以綜合運用Keil中的多種調(diào)試功能來詳細(xì)觀察系統(tǒng)的工作過程;
在Proteus仿真中,單片機(jī)和COMPIM之間也可以不用加MAX232器件。7.12.1Proteus電路設(shè)計
1.元件清單列表
打開ProteusISIS編輯環(huán)境,按表7-12所列的清單添加元件。7.12單片機(jī)與步進(jìn)電機(jī)的接口技術(shù)表7-12元件清單
2.步進(jìn)電機(jī)元件介紹
Proteus軟件中的單極性步進(jìn)電機(jī)元件為6線制,其原理圖及屬性編輯框如圖7-59所示,各屬性值可根據(jù)需要修改。本例中所設(shè)置的屬性值均如圖7-59所示。
圖7-59單極性步進(jìn)電機(jī)原理圖及屬性
3.電路原理圖
元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-60所示的原理圖連接硬件電路。
圖7-60電路原理圖7.12.2Proteus調(diào)試與仿真
參照7.3.3節(jié)建立程序文件,加載目標(biāo)代碼文件,進(jìn)入調(diào)試環(huán)境執(zhí)行程序,進(jìn)行如下操作:
(1)在ProteusISIS界面中,按“正轉(zhuǎn)”、“反轉(zhuǎn)”按鈕,觀察步進(jìn)電機(jī)的狀態(tài),如圖7-61所示。
(2)觀察步進(jìn)電機(jī)的單拍轉(zhuǎn)動角度,從而體會4相8拍的含義。圖7-61程序運行結(jié)果7.12.3總結(jié)與提示
在進(jìn)行仿真時,可以在單片機(jī)的P1.0~P1.3口上接入邏輯分析儀來監(jiān)測控制信號的工作狀態(tài)(本例略)。
可修改步進(jìn)電機(jī)屬性中的步進(jìn)角以觀察不同的仿真結(jié)果。
在Proteus與Keil的聯(lián)調(diào)過程中,可以綜合運用Keil中的多種調(diào)試功能來詳細(xì)觀察電路的工作情況。7.13.1Proteus電路設(shè)計
1.元件清單列表
打開ProteusISIS編輯環(huán)境,按表7-13所列的清單添加元件。7.13單片機(jī)與直流電動機(jī)的接口技術(shù)表7-13元件清單
2.電路原理圖
元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-62所示的原理圖連接硬件電路。
圖7-62電路原理圖7.13.2Proteus調(diào)試與仿真
參照7.3.3節(jié)建立程序文件,加載目標(biāo)代碼文件,進(jìn)入調(diào)試環(huán)境執(zhí)行程序。在ProteusISIS界面中,調(diào)節(jié)電位器RV1,可以看到電機(jī)轉(zhuǎn)速隨著電位器的調(diào)節(jié)發(fā)生相應(yīng)的變化,如圖7-63所示。同時通過示波器觀察單片機(jī)輸出的PWM控制脈沖信號,如圖7-64所示。切換開關(guān)SW1的狀態(tài)可切換電機(jī)的正、反轉(zhuǎn)。圖7-63程序運行結(jié)果圖7-64單片機(jī)輸出的PWM控制脈沖信號7.13.3總結(jié)與提示
嘗試直接給電動機(jī)加相同幅值的直流電壓,并觀察其轉(zhuǎn)速大小,如圖7-65所示,與單片機(jī)控制下直流電動機(jī)的最大轉(zhuǎn)動速度做比較,觀察差別并思考其中的原因。
在ProteusISIS界面中雙擊直流電機(jī),可打開其屬性編輯框,并根據(jù)需要修改其屬性值,包括標(biāo)稱電壓和轉(zhuǎn)速等。圖7-65直接加工作電壓的直流電機(jī)7.14.1Proteus電路設(shè)計
1.元件清單列表
打開ProteusISIS編輯環(huán)境,按表7-14所列的清單添加元件。7.14基于DAC0832數(shù)/模轉(zhuǎn)換器的數(shù)控電源表7-14元件清單
2.電路原理圖
元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-66所示的原理圖(復(fù)位與振蕩電路略)連接硬件電路。
圖7-66電路原理圖其程序流程如圖7-67所示。
圖7-67程序流程圖7.14.2Proteus調(diào)試與仿真
參照7.3.3節(jié)建立程序文件,加載目標(biāo)代碼文件,進(jìn)入調(diào)試環(huán)境執(zhí)行程序,在ProteusISIS界面中,觀察LM317輸出端的數(shù)字電壓表示值發(fā)生的變化,仿真片段如圖7-68所示。圖7-68程序運行結(jié)果7.14.3總結(jié)與提示
對本例程序進(jìn)行修改,可產(chǎn)生不同波形連續(xù)變化的輸出電壓。
LM317可調(diào)輸出電壓的最低值為1.25V,通過本例也能觀察到這一點。
由于LM358輸出沒有調(diào)零電路,不能校準(zhǔn),因此數(shù)/模轉(zhuǎn)換輸出結(jié)果存在一定的誤差,導(dǎo)致可調(diào)電壓源的輸出也存在誤差,在本例中亦有所體現(xiàn)。7.15.1Proteus電路設(shè)計
1.元件清單列表
打開ProteusISIS編輯環(huán)境,按表7-15所列的清單添加元件。7.15基于ADC0808模/數(shù)轉(zhuǎn)換器的數(shù)字電壓表表7-15元件清單
2.電路原理圖
元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-69所示的原理圖連接硬件電路。
圖7-69電路原理圖7.15.2源程序設(shè)計
ADC0808在進(jìn)行A/D轉(zhuǎn)換時需要有CLOCK信號,我們在硬件電路設(shè)計中將ADC0808的CLOCK信號接在了AT89C51單片機(jī)的P3.3端口上,即通過P3.3端口為ADC0808提供CLOCK信號,因此在程序編寫時要由軟件產(chǎn)生該時鐘信號。
其程序流程如圖7-70所示。圖7-70程序流程圖程序源代碼如下:
#include〈reg51.h〉
#defineucharunsignedchar
#defineuintunsignedint
ucharcodea[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
ucharcodea1[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
ucharcodeb[4]={0xfe,
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年安全員-C證考試題庫
- 河流黃河課程設(shè)計
- 算法課程設(shè)計 主觀題
- 線性課程設(shè)計分享
- 紋繡技巧教學(xué)課程設(shè)計
- 組成原理課程設(shè)計體會
- 水位報警器課程設(shè)計
- 電機(jī)轉(zhuǎn)速測量儀課程設(shè)計
- 用dft計算線性卷積課程設(shè)計
- 2024年遠(yuǎn)程醫(yī)療服務(wù)系統(tǒng)建設(shè)借款合同
- 抖音小店客服管理制度及考核機(jī)制
- 航天企業(yè)員工入股協(xié)議書樣本
- 門面房買賣合同范本簡單版
- 2024年臨汾翼城縣就業(yè)困難高校畢業(yè)生公益性崗招考聘用70人重點基礎(chǔ)提升難、易點模擬試題(共500題)附帶答案詳解
- 農(nóng)產(chǎn)品電子商務(wù)智慧樹知到期末考試答案章節(jié)答案2024年浙江農(nóng)林大學(xué)
- 羽毛球教學(xué)與實戰(zhàn)智慧樹知到期末考試答案章節(jié)答案2024年阜陽師范大學(xué)
- 2024屆廣東省深圳市羅湖區(qū)中考適應(yīng)性考試化學(xué)試題含解析
- 醫(yī)保信息系統(tǒng)管理制度范文
- 停車場服務(wù)培訓(xùn)課件
- 《工業(yè)數(shù)據(jù)采集技術(shù)》課程標(biāo)準(zhǔn)
- 半導(dǎo)體芯片知識講座
評論
0/150
提交評論