-
定時為50ms,軟體計數5次。
org 0000h
ljmp start
org 000bh
ljmp timer0interrupt
start:
mov sp,#60h
mov tmod,#01h
mov th0,#3ch
mov tl0,#0b0h
mov r7,#
setb ;輸出方波引腳。
setb ea
setb et0
setb tr0
sjmp $
timer0interrupt:
mov th0,#3ch
mov tl0,#0b0h
djnz r7,rt
mov r7,#
cplrt: retiend
-
我有 C 語言,但它比你的簡單。
-
我做了乙個純硬體的DDS訊號發生器,這就是你現在要做的——乙個直接的數碼訊號發生器,因為它太複雜了,你必須知道如何程式設計,所以我要給你乙個解決方案。
方案1:純用微控制器生成,我建議採用查表法,用MATLAB對正弦波進行取樣,得到乙個離散的也就是數字正弦波,也就是正弦波表,這裡要注意的是,正弦波的峰值不要超過乙個位元組(當然, 如果用的是8位微控制器),否則就得通過組合語言來處理,當然波形的幅度調節範圍要很大,另外取樣點的數量要適當,才能產生美觀平滑美觀的波形;以程式設計方式查詢表,使用dptr輸出(使用p0、p2埠)來使用,這樣就只能輸出乙個頻率並行的數字正弦波,可以控制兩個相鄰表之間的時間間隔,從而改變正弦波的週期或頻率; 每次訪問表格時,從表格的值中減去所需的幅度步長值,幅度會更容易。 我們希望能夠用示波器來觀察波形,也就是模擬正弦波,現在我們有了數字正弦波,自然要用到數模轉換器,位數越高越好,這取決於你的正弦波表有多少位,如果是乙個位元組(8位), 用8位就夠了,乙個字有16位,當然,位數越高越貴,建議你用8位(推薦DAC0832,好像是13位),便宜(10件左右),這樣你得到乙個模擬正弦波,但是它是階梯形的,原因是你覺得, 加乙個低通濾波器,這樣就完成了,你得到乙個真正的正弦波(在正弦波的輸出埠上加乙個比較器,得到乙個頻率和幅度相同的方波,在方波的輸出口加乙個積分器得到乙個三角波,這不我
三角波的方法與正弦波相同,但方波不需要那麼麻煩,可以直接延時或定時。 剩下的就是程式設計問題了,我就不贅述了。
解決方法二:使用專用的DDS晶元,如AD9850等,使用微控制器來控制DDS晶元,這個很簡單,可以檢視AD9850使用者手冊,需要在輸出端新增濾波等,手冊是可用的。 剩下的就是程式設計問題了,我就不贅述了。
這個事情工作量很大,建議找幾個合適的合作夥伴,希望能幫到你,!
-
需要建立硬體連線:連線到匯流排上的DA轉換器,然後檢測值? 相應的波形。
例如,正弦波方案晶元的值每 1 度儲存一次。 在該方案中,DA轉換器的值以固定的時間間隔取,因此可以獲得DA輸出端的正弦波輸出。
數字波形可以不同。
間隔不同,波形週期可以不同。
-
我自己寫的。 只需使用定時中斷即可。 無外部中斷。
-
你可以發出乙個方波,程式沒有大問題,之所以會出現這些警告,是因為你的專案裡有這個東西,你可以刪除它,這個檔案沒有效果。
在高階程式語言中可以完成的工作在組合語言中通常是可能的。 只不過,在使用組合語言編寫程式時,需要掌握相關的硬體知識,比如微處理器內部的暫存器結構、對主儲存器的訪問、輸入輸出介面電路的硬體結構等等,所以組合語言是一種面向硬體的程式語言,與高階程式語言的程式設計風格有很大的不同, 而且人們可能會覺得很難學,但實際上,上手後學習組合語言要簡單得多。