本文引自 http://blog.ednchina.com/likee/25421/category.aspx
通常大家都說keil的純軟體模擬功能無比的強大,它到底強大到哪種程度呢?簡單地來說,它能夠模擬到幾乎所有的內部資源及外圍的IO口。
如所示,幾乎所有的IO口、串口、I2C、SPI、AD等,都能夠模擬。呵呵,夠強大了吧?下面以外圍IO口的流水燈模擬及AD轉換為例,來慢慢說明。
大家可以下載下面這個軟體包進行結合我的例子同步:
下載完後直接可以編譯,編譯後,沒有錯誤和警告,然後就可以點擊中的那個紅色的d字形按鈕進行 debug,然後點擊“peripherals”按鈕,選擇GPIO,再在子功能表中選擇Port0(因為在程式中我是將流水燈寫在對應的Port0管腳上的)。再按一下全速運行,呵呵,是不是發現IO0SET的第十六位到第二十三位的鉤依次打上呢?這是因為它們依次就高電平,如果我們在實際的開發板上接上LED(陽極接限流電阻再接IO口,陰極接地)的話,這樣就會使我們的LED閃啊閃的,像流水一樣~~~~~~~~
而AD轉換呢?我們有AD轉換,首先要類比出一個類比電壓才行。點擊Debug後,不要點全速運行,在Debug菜單中選擇function editor (open Ini file),會提示我們開啟一個指令檔,把下面這樣檔案加進去:
指令檔的內容是:
//
// Generate Sine Wave Signal on AD Channel 0
//
signal void AIN0(void) {
float volts; // peak-to-peak voltage
float frequency; // output frequency in Hz
float offset; // voltage offset
float duration; // duration in Seconds
float val;
long i, end;
volts = 1.5;
offset = 1.6;
frequency = 1800;
duration = 0.1;
printf ("Sine Wave Signal on AD Channel 0."n");
end = (duration * 100000);
while(1) {
val = __sin (frequency * (((float) STATES) / CLOCK) * 2 * 3.1415926);
AIN0 = (val * volts) + offset;
swatch (0.00001); // in 10 uSec steps
}
}
進行儲存,編譯,下面按下全速運行,再開啟邏輯分析視窗,這個時候你看到正弦波了嗎?肯定看不到啦!
這是為什麼呢?因為我們還沒有把它加到類比IO口呢!那麼怎麼添加呢?在下面這個視窗中:
我們再看看前面這樣指令碼的內容,那個函數是將一個正弦波訊號加到一個叫AIN0的管腳,這可以在command 視窗中輸入 “dir vtreg”命令來查看這個類比的CPU有哪些類比資源。那麼,我們將這個函數添加到類比連接埠,輸入這個指令碼函數的名稱:“AIN0()”,這個時候看到正弦波了嗎?看到了!看到一個正弦波在跳啊跳的,多開心啊!
總體如: