Proteus仿真MSP430單片機的若干問題記錄


1.支持的具體型號:

P7.8:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Proteus8.9:

 

 

 

Proteus8.9能夠支持的類型明顯要多於Proteus7.8。但是對於仿真而言,目前個人還是覺得Proteus7.8更穩定。這也是目前能用P7不用P8的原因。

2.時鍾設置

在仿真中,外置晶振電路不論如何設計都不會影響單片機的真正運行時鍾。MSP430的時鍾通過點擊芯片“Edit Component”進行設計。下圖可以看出可以直接設置MCLK,SMLK和ACLK。經過實際測試可以在程序中選擇不同的時鍾源,並且可以設計分頻。

在仿真的時候可以將幾個時鍾全部設置成8M,省去配置時鍾的麻煩,所有時鍾一個標准。

 

3.精確的延時函數

 

 MSP430單片機內部含有Timer,ADC,中斷等等設計,可以通過內部資源進行一些類型的仿真。如果需要外掛芯片,尤其是串行通信的芯片,一個精確穩定的延時函數就必不可少。如果一個延時函數精確,那么幾乎所有的51芯片外掛芯片的仿真,應該都可以移植到msp430上來。同理,stm32的仿真也是類似的。

這一點這篇帖子的分析還是比較到位的:

https://www.cnblogs.com/memset/archive/2013/07/05/3173502.html

IAR中實現了__intrinsic void __delay_cycles(unsigned long __cycles)這個內聯函數進行系統時鍾次數的延時。所以在IAR中可以這樣寫來實現延時:

#define CPU_CLOCK 8000000

#define delay_us(us) __delay_cycles(CPU_CLOCK/1000000*(us))

#define delay_ms(ms) __delay_cycles(CPU_CLOCK/1000*(ms))

我在實際的仿真中測試過,這套延時函數比實際時鍾慢1倍左右。delay_ms(1000)大概在2s左右,所以實際仿真時候應該適當更正一下這個函數。

#define CPU_CLOCK 4000000

#define delay_us(us) __delay_cycles(CPU_CLOCK/1000000*(us))

#define delay_ms(ms) __delay_cycles(CPU_CLOCK/1000*(ms))

這樣的延時時間是相當准的,用這個移植51的程序應該有很大希望。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM