EDA仿真工具proteus
proteus是由英國Labcenter Electronics公司研發的EDA仿真工具軟件,EDA主要用于自動化控制系統電路設計和仿真。我們使用proteus主要完成兩部分工作:一部分工作用于設計單片機應用電路,包括單片機與外圍芯片、電子器件的布局和連線;一部分工作用于電路仿真,在仿真單片機內運行keil開發工具編寫的嵌入式程序,驗證電路設計和嵌入式程序運行結果,降低學習嵌入式開發對硬件操作的依賴程度。
proteus支持ARM、51等單片機仿真,51單片機主要支持ATMEL公司研制的51系列單片機,但不影響使用其它51系列單片機編寫的嵌入式程序,因為51系列單片機的指令架構都是相同的。proteus仿真的單片機可以運行keil、matlab、IAR等軟件開發的嵌入式程序,并可以進行源代碼級調試。
proteus正版軟件費用比較高,可以在proteus官網下載演示版,演示版是免費的且沒有時間限制。但演示版只能在現有的示例上運行自己編寫的程序,不能仿真調試,不能保存設計文件,若演示版不能滿足要求,可以通過搜索引擎查詢其它安裝方式。
點亮二極管實驗任務
實驗目的
設計51單片機最小系統電路,包括單片機晶振電路、復位電路和發光二級管控制電路,加載前面實驗用keil編寫的單片機嵌入程序,驗證程序的運行結果,實驗用單片機型號為AT89C52。
1.1.2.2.實驗步驟
實驗步驟如下:① 認識晶振、電容、電阻、發光二極管元器件;② 了解晶振電路、復位電路、發光二極管控制電路;③ 使用proteus設計電路模型;④ 加載運行keil編寫的單片機程序。
實驗用相關電子元器件
晶振
晶振(Crystal)——單片機的心臟,為單片機提供時鐘脈沖,單片機所有操作都在時鐘脈沖下執行。
時鐘脈沖除時間外,一般要注意上升沿、下降沿、高電平、低電平,上圖有8個時序脈沖,開始是低電平,過一段時間后出現一個上升沿,并躍變到高電平,高電平持續一段時間后,出現下降沿,并躍變到低電平。
時鐘周期是晶振工作頻率的倒數,例如12M的晶振,它的時鐘周期就是1/12 μs,若采用了1MHZ的時鐘頻率,則時鐘周期為1μs;若采用4MHZ的時鐘頻率,則時鐘周期為250ns。
下圖是晶振電子元器件的實物圖和電路符號。
電容
電容(capacitance)——兩個相互靠近的導體,中間夾一層不導電的絕緣介質,就構成了電容器,電容器可以儲存電荷,在交變電路內會交替充放電,因此電容可以通交流,隔直流,電容可以與晶振構成時鐘脈沖電路,與電阻構成單片機復位電路,另外濾波、諧振、整流等電路都要用到電容。
電容的容量單位為:法拉(F),其它單位有:毫法(mF)、微法(uf)、納法(nF)、皮法(pf),單位的換算進率是1000。
下圖是電容電子元器件的實物圖和電路符號。
電阻
電阻(resistance)——又稱為電阻器,該器件在電路中阻礙電流的流動,是電路內主要的負載器件。電阻的單位是歐姆,簡稱歐,用希臘字母“Ω”表示。常用的電阻單位還有千歐姆(KΩ),兆歐姆(MΩ)。
換算關系:1KΩ=1000Ω,1MΩ=1000KΩ
在電路圖中一般將電阻值中的Ω省去,凡阻值在千歐以下的電阻,直接用數字表示,阻值在千歐以上的,用K表示;兆歐以上的用M表示。
下圖是電阻電子元器件的實物圖和電路符號。
發光二極管
發光二級管(LED)——是一種光電子器件,該器件通電后,電能轉換為光能。
下圖是發光二極管電子元器件的實物圖和電路符號。
實驗用相關電路
晶振電路
晶振電路構成時鐘脈沖振蕩電路,為單片機提供時鐘脈沖,下圖為AT89C52單片機的外部晶振電路。
晶振電路由晶振和兩個相同容量的電容構成,這兩個電容一般稱為匹配電容或負載電容,并聯到晶振兩端,為晶體振蕩提供電流回路,若沒有這兩個電容,晶振的振蕩會因為沒有電流回路而停振,這兩個電容的容量都很小,選擇幾十皮法即可,兩個電容的另一端都需要接地。
AT89C52單片機的XTAL1和XTAL2是外接時鐘引腳,XTAL1為片內振蕩電路的輸入端,XTAL2為片內振蕩電路的輸出端,這兩個引腳外接晶振和電容,晶振一般取值為12MHZ,電容一般取值為10P~30P。
復位電路
復位電路讓單片機恢復到初始狀態,讓單片機的程序從頭開始執行。AT89C52單片機的RST引腳為復位引腳,該引腳連續輸入兩個機器周期以上高電平時有效,機器周期是單片機完成一個基本操作所需要的時間,一個機器周期大約為12個時鐘周期。下圖為AT89C52的復位電路。
復位電路由一個極性電容和一個電阻串聯構成,電容的正極接5V電源,負極接1K的電阻,電阻的一端接地,RST引腳接電容的負極。該電路為上電復位,當單片機在通電瞬間,確保復位端為高電位并持續大約2個機器周期。當單片機加電時,復位電路通過電容給RST端加一個高電平,此高電平信號隨著對電容的充電而逐漸降低,因此要保持電容充電時間足夠長來完成復位操作。
發光二極管控制電路
發光二極管控制電路用于控制二極管的發光狀態,下圖為發光二級管控制電路。
電路圖的D1為發光二極管,一端接單片機P1第0位,一端接200歐姆的電阻,電阻的一端接5V電源,該電阻對電路進行限流,因為發光二級管允許流過的電流較小,所以需要串聯一個幾百歐姆的電阻。
在當前電路下,單片機加電后,發光二級管并不會點亮,因為單片機I/O口(包括P1口)所有位引腳都輸出高電平,該電路無電流流通。前面我們使用keil編寫了一個嵌入程序,該嵌入程序將P1口第0位改變為低電平,在這種情況下,該電路將有電流通過,發光二級管被點亮。
實驗過程
新建電路設計模型
proteus安裝完成后程序名稱為“ISISX Professional”,其中‘X’是版本號。啟動proteus,啟動后的proteus工作窗口如下圖所示。
展開【File】菜單,選擇【New Design…】命令,或按下Ctrl+O快捷鍵,在彈出的“Create New Design”對話框中,選擇“DEFAULT”模板,單擊【OK】按鈕。如下圖所示。
展開【File】菜單,選擇【Save Design】命令,或按下Ctrl+S快捷鍵,在彈出的“Save ISIS Design File”對話框,輸入文件名稱,單擊“保存”按鈕保存電路模型。
1.1.5.2.添加單片機到電路模型
proteus提供了仿真電子元器件庫,后面統稱為元件庫,單擊下圖所示的“P”按鈕可以打開元件庫窗口。
元件庫窗口如下圖。
“keywords”輸入域可以輸入要查找的元器件英文名稱的關鍵詞、或者元器件的型號。proteus會將與關鍵詞或型號相匹配的項列在“Results”列表窗口,在列表窗口選擇需要添加的元器件項,單擊“OK”按鈕即可將選擇的元器件添加到當前電路模型的存儲庫,以備使用。
例如在“keywords”輸入域輸入要查找的單片機型號“AT89”,proteus會在列表窗口列出與關鍵詞“AT89”相關的元器件,在列表窗口選擇“AT89C52”單片機,proteus會在“Preview”窗口預覽“AT89C52”單片機的電路模型符號。單片機型號確定后,單擊“OK”按鈕將選擇的單片機添加到電路模型元器件庫。
在電路模型元器件庫選擇“AT89C52”,在電路模型設計窗口合適位置單擊鼠標左鍵,放置到單片機,并可以拖動單片機到電路模型的合適位置,位置確定后雙擊鼠標左鍵,將單片機添加到電路模型。
為單片機添加晶振電路
前面說過晶振電路需要晶振、電容、電源元器件,打開元件庫,分別使用關鍵詞“crystal”和“cap”搜索晶振和電容元器件,添加晶振、電容到電路模型元器件庫。
晶振電路還需要5V的電源,用鼠標單擊proteus窗口左側工具條的“Terminals Mode”模式,該模式包含了電源(POWER)、接地(GROUND)等電路器件。如下圖所示。
從“Terminals Mode”模式切換到電路模型元器件庫,用鼠標單擊proteus窗口左側工具條的“Component Mode”模式即可完成切換。
從電路模型元器件庫添加兩個電容、一個晶振、一個接地點到電路模型,如下圖所示。
為方便元器件連接,可以對元器件進行旋轉。例如旋轉名稱為X1的晶振器件:用鼠標選中X1元器件,單擊鼠標右鍵,在彈出的菜單中選擇“Rotate Anti-clockwise”命令,X1元器件會在當前狀態下逆時針旋轉90度。
添加的電子元器件默認顯示元器件多個參數,如元器件名稱、元器件值的大小、元器件文字說明等。設計者可以自定義是否顯示和修改這些參數。例如修改名稱為C1的電容元器件,用鼠標選中C1元器件,雙擊該C1元器件,proteus會彈出C1元器件參數修改對話框,如下圖所示。
在輸入域“Component Reference”可以修改元器件的名稱,在輸入域“Capacitance”可以修改C1電容的容量,在這里修改為22pf,若不需要在電路模型顯示C1電容的名稱和容量,可以選上Hidden檢查框。
按照上述步驟,分別修改電容器件C1和C2的容量為22pf,修改X1晶振的振蕩頻率為12MHZ。修改后電路模型如下圖所示。
我們發現電路模型內電子元器件的文本說明沒有隱藏,若需要隱藏文本說明,展開【Template】菜單,選擇“Set Design Defaults……”命令,在彈出的對話框(如下圖所示)去掉“Show Hidden text”檢查。
元器件參數配置完成后的電路模型如下圖所示。
下一步的工作是將單片機、電容、晶振、電源通過導線連接在一起,連接方式可以參照前面的晶振電路圖。連接方法是將鼠標移動到元器件的一端或電路的節點,當鼠標變為綠色的鉛筆時,按下鼠標左鍵,同時拖動鼠標繪制出導線,拖動導線到合適位置后,雙擊鼠標左鍵導線繪制完成。
繪制晶振電路時,可以分別從單片機的XTAL1腳和XTAL2腳引出導線連接C1和C2的一端,同時連接到晶振的兩端,然后將C1和C2另一端分別連接到接地點。
為單片機添加復位電路
復位電路需要一個22uF的極性電容,一個1K的電阻,一個+5V的直流電源。打開元件庫,使用關鍵詞“res”搜索電阻元器件,添加電阻到電路模型元器件庫,使用關鍵詞“cap-pol”搜索極性電容元器件,添加極性電容到電路模型元器件庫。
從電路模型元器件庫添加一個極性電容、一個電阻、一個電源到電路模型,如下圖所示。
修改C3電容容量參數為22uf,修改R1電阻值為1K,電源默認為+5V電源,無需修改。
復位電路元器件參數配置完成后的電路模型如下圖所示。
參照前面的復位電路圖,將單片機、C3、R1、電源通過導線連接在一起,連接之前添加接地點到電路模型。
為單片機添加發光二極管控制電路
發光二級管控制電路需要一個200歐姆的電阻,一個發光二極管,一個+5V的直流電源。打開元件庫,使用關鍵詞“LED-RED”搜索發光二極管元器件,添加發光二極管到電路模型元器件庫。
從電路模型元器件庫添加一個發光二極管、一個電阻、一個電源到電路模型,修改元器件參數,調整元器件到合適位置,如下圖所示。
參照前面的發光二極管電路圖,將單片機、D1、R2、電源通過導線連接在一起。
裝載和運行Keil編寫的嵌入式程序
實際上51單片機要正常工作,還需要在Vcc引腳接入電源,在Vss引腳或GND引腳接公共接地端。proteus默認單片機已經接電源和接地,無需再進行導線連接。
在前面的“Keil開發環境與第一個單片機實驗”課程中,我們編寫了控制單片機P1口第0位輸出低電平的程序,程序代碼如下:
#include
sbit led1 = P1^0;
void main()
{
led1 = 0;
}
51單片機只能運行HEX或BIN文件,HEX是十六進制文件,英文全稱為“hexadecimal”,BIN文件是二進制文件,英文全稱為binary,這兩種文件可以通過軟件相互轉換。若需要Keil編譯后輸出HEX文件,需要對Keil輸出選項進行配置。在Keil工作窗口,展開【Project】菜單,選擇“Options for Targets”命令,在彈出的對話框中,選擇“Output”標簽頁,確定“Create Hex File”被選中。
重新編譯C源代碼,在項目的輸出目錄可以看到擴展名為“hex”的HEX文件。
C程序編譯完成后,回到proteus工作窗口,在電路模型窗口使用鼠標雙擊單片機,或選中單片機后單擊鼠標右鍵,在彈出的菜單中選擇“Edit Properties”命令,proteus彈出Edit Component對話框(見下圖),選擇使用keil編譯的HEX文件,單擊【OK】按鈕即可裝載C程序到單片機。
在電路模型內仿真運行前面裝載的單片機程序,運行程序有兩種方式:一種方式是展開【Debug】菜單,選擇“Start/Restart Debugging”命令來運行程序;一種方式是用鼠標單擊調試工具條的啟動按鈕(見下圖)來運行程序。
程序運行后電路模型各端口狀態如下圖所示。
觀察電路模型狀態,D1發光二級管已經點亮,藍色方塊表示該端口為低電平,紅色方塊表示該端口為高電平,灰色方塊表示電壓不確定。下一節實驗課程解釋P0口電壓不確定的問題。
實驗小結
通過這次實驗,掌握了proteus設計單片機電路模型的過程,并仿真運行由Keil編寫的嵌入式C程序,點亮了發光二極管。下次實驗目標主要是應用proteus結合keil對嵌入式程序進行源代碼級調試,并解釋在實驗過程中,P0口電壓不確定的問題。
-
單片機
+關注
關注
6035文章
44554瀏覽量
634631 -
電路設計
+關注
關注
6673文章
2451瀏覽量
204154 -
Proteus
+關注
關注
79文章
1692瀏覽量
106515 -
仿真
+關注
關注
50文章
4070瀏覽量
133552 -
51單片機
+關注
關注
274文章
5702瀏覽量
123490
發布評論請先 登錄
相關推薦
評論