Proteus模擬MSP430微控制器的若干問題記錄

龍行微控制器發表於2021-06-08

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的程式應該有很大希望。

相關文章