利用 DAC0832 輸出模擬電壓

2021-07-09 15:01:56 字數 3348 閱讀 3410

以前,做而論道寫過一篇關於 dac0832 的博文,**鏈結是:

當時,為了直觀的說明 dac0832 的基本功能,就使用了撥動開關來輸入數字量。

其實,用微控制器輸出數字量,還真是很簡單方便的。

電路,也不用像課本裡面畫的那麼複雜,用任意乙個微控制器的並行口連線到 dac0832 的資料輸入口即可。

用 p1 口,驅動 0832 的電路如下:

按照這個電路,寫入、

執行下列的小

程式,可以看到輸出的鋸齒波電壓的波形圖如下所示:

org   0000h

jmp   start

start:

mov   r2,  #0

loop:

mov   p1,  r2      ;輸出

call  delay        ;延時

inc   r2

sjmp  loop

delay:                 ;延時子程式

mov   r6,  #2;1;127

del1:

mov   r7,  #200

del2:

djnz  r7,  del2    ;內迴圈200遍

djnz  r6,  del1    ;外迴圈127遍

看波形,還是稍微有些失真呵。

同樣還是這個電路,執行下列的程式,看看,會出現什麼波形?

org   0000h

jmp   start

start:

;------------------------------------------

sine:

mov   r1, #00h

mov   dptr, #sintab

loop:

mov   a, r1

movc  a, @a + dptr  ;取資料

mov   p1, a         ;輸出,d/a 轉換

inc   r1

call  delay         ;延時

sjmp  loop

;---------------

sintab:                 ;正弦波資料表

db  07fh, 083h, 086h, 089h, 08ch, 08fh, 092h, 095h

db  098h, 09bh, 09eh, 0a1h, 0a4h, 0a7h, 0aah, 0adh

db  0b0h, 0b3h, 0b6h, 0b9h, 0bbh, 0beh, 0c1h, 0c3h

db  0c6h, 0c9h, 0cbh, 0ceh, 0d0h, 0d2h, 0d5h, 0d7h

db  0d9h, 0dbh, 0deh, 0e0h, 0e2h, 0e4h, 0e5h, 0e7h

db  0e9h, 0ebh, 0ech, 0eeh, 0efh, 0f1h, 0f2h, 0f4h

db  0f5h, 0f6h, 0f7h, 0f8h, 0f9h, 0fah, 0fbh, 0fbh

db  0fch, 0fdh, 0fdh, 0fdh, 0feh, 0feh, 0feh, 0feh

db  0ffh, 0feh, 0feh, 0feh, 0feh, 0fdh, 0fdh, 0fdh

db  0fch, 0fbh, 0fbh, 0fah, 0f9h, 0f8h, 0f7h, 0f6h

db  0f5h, 0f4h, 0f2h, 0f1h, 0efh, 0eeh, 0ech, 0ebh

db  0e9h, 0e7h, 0e5h, 0e4h, 0e2h, 0e0h, 0deh, 0dbh

db  0d9h, 0d7h, 0d5h, 0d2h, 0d0h, 0ceh, 0cbh, 0c9h

db  0c6h, 0c3h, 0c1h, 0beh, 0bbh, 0b9h, 0b6h, 0b3h

db  0b0h, 0adh, 0aah, 0a7h, 0a4h, 0a1h, 09eh, 09bh

db  098h, 095h, 092h, 08fh, 08ch, 089h, 086h, 083h

db  7fh, 7ch, 79h, 76h, 73h, 70h, 6dh, 6ah

db  67h, 64h, 61h, 5eh, 5bh, 58h, 55h, 52h

db  4fh, 4ch, 49h, 46h, 44h, 41h, 3eh, 3bh

db  39h, 36h, 34h, 31h, 2fh, 2ch, 2ah, 28h

db  26h, 23h, 21h, 1fh, 1dh, 1bh, 19h, 18h

db  16h, 14h, 12h, 11h, 0fh, 0eh, 0dh, 0bh

db  0ah, 09h, 08h, 07h, 06h, 05h, 04h, 03h

db  03h, 02h, 02h, 01h, 01h, 01h, 01h, 00h

db  00h, 00h, 01h, 01h, 01h, 01h, 02h, 02h

db  03h, 03h, 04h, 05h, 06h, 07h, 08h, 09h

db  0ah, 0bh, 0dh, 0eh, 0fh, 11h, 12h, 14h

db  16h, 18h, 19h, 1bh, 1dh, 1fh, 21h, 23h

db  26h, 28h, 2ah, 2ch, 2fh, 31h, 34h, 36h

db  39h, 3bh, 3eh, 41h, 44h, 46h, 49h, 4ch

db  4fh, 52h, 55h, 58h, 5bh, 5eh, 61h, 64h

db  67h, 6ah, 6dh, 70h, 73h, 76h, 79h, 7ch

;---------------

delay:                  ;延時子程式

mov   r6,   #1;127

del1:

mov   r7,   #200

del2:

djnz  r7,   del2    ;內迴圈200遍

djnz  r6,   del1    ;外迴圈127遍

確實是個正弦波。

想要改變波形的形狀,修改程式中的資料表內容即可。

想要改變波形的週期,修改程式中的延時子程式即可。

利用異或求解 N N 0 N 0 N

1題 1 1000放在含有1001個元素的陣列中,只有唯一的乙個元素值重複,其它均只出現 一次。每個陣列元素只能訪問一次,設計乙個演算法,將它找 出來 不用輔助儲存空 間,能否設計乙個演算法實現?顯然已經有人提出了乙個比較精彩的解法,將所有數加起來,減去1 2 1000的和。這個演算法已經足夠完美了...

利用微控制器DAC和C語言產生正弦波資料

以下為適用於各類微控制器 改變微控制器的dac輸出電壓,可以得到需要的電壓波形輸出,下面介紹正弦波所需的dac資料是如何計算的。首先既然是正弦波,那麼就要確定輸出乙個週期正弦波的取樣點數point,即由多少點組成了一週期的正弦波,還要知道微控制器輸出dac的數字值maxnum是多少,比如8位dac,...

msf利用0DAY漏洞獲取shell

安裝cve 2018 8174 exp 然後發現沒轉殖下來,所以這裡我直接用xshell上傳了zip包並解壓在本目錄 進入我們的檔案目錄 cd cve 2018 8174 exp master 生成惡意html檔案 將檔案移動到apache根目錄 mv exploit.html var www ht...