久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4788|回復: 3
打印 上一主題 下一主題
收起左側

一個經典的單片機正弦波程序,程序很短但處處是精華

  [復制鏈接]
跳轉到指定樓層
樓主

這是網上找的關于C8051F020利用自身的DAC輸出1K HZ的正弦波的程序。我已經用示波器把波形顯示出來了,非常完美。程序和示波器的波形已經上傳網上了。
但是針對這個程序我有太多的疑問,請高手幫我看一下:
第一:sfr16 RCAP4    = 0xE4;                 // Timer4 capture/reload
         sfr16 TMR4     = 0xF4;                 // Timer4
         sfr16 DAC0     = 0xd2;                 // DAC0 data
         sfr16 DAC1     = 0xd5;                 // DAC1 data

程序有這個定義,我想知道是干什么用的?好像沒看到有什么作用。

第二:#define SAMPLE_RATE_DAC 100000L        // DAC sampling rate in Hz
這是DAC的采樣率,請問L 是什么單位。
         // <PHASE_ADD> is the change in phase between DAC samples; It is used in
// the set_DACs routine.

unsigned int PHASE_ADD = FREQUENCY * PHASE_PRECISION / SAMPLE_RATE_DAC;
這時兩個dac的相位變化,我想知道為什么是這個公式,怎么來的。

第三:TIMER4_Init(SYSCLK/SAMPLE_RATE_DAC);// Initialize Timer4 to overflow
定時器4的溢出為什么是  SYSCLK/SAMPLE_RATE_DAC  ?

第四: DAC0 = SIN_temp ^ 0x8000;
          DAC1 = COS_temp ^ 0x8000;           // Write to DAC1
為什么要或上8000?

最后附上程序和波形圖
C8051F020程序: 正弦波輸出.zip (36 KB, 下載次數: 39)
視頻: 正弦波視頻.zip (4.47 MB, 下載次數: 26)


評分

參與人數 1黑幣 +80 收起 理由
admin + 80 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏9 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:624769 發表于 2021-12-8 18:51 | 只看該作者
第一:sfr16 RCAP4    = 0xE4;                 // Timer4 capture/reload
         sfr16 TMR4     = 0xF4;                 // Timer4
         sfr16 DAC0     = 0xd2;                 // DAC0 data
         sfr16 DAC1     = 0xd5;                 // DAC1 data

程序有這個定義,我想知道是干什么用的?好像沒看到有什么作用。

=> 這是寄存器定義,等同于 SFR  P0 = 0x80;  只不過這是16位的。

第二:#define SAMPLE_RATE_DAC 100000L        // DAC sampling rate in Hz
這是DAC的采樣率,請問L 是什么單位。
         // <PHASE_ADD> is the change in phase between DAC samples; It is used in
// the set_DACs routine.

=>  L 是 long型的意思,在Keil3 以上時可以不需要加L,但是有些編譯器不加 L 的話,默認最大只支持到 65535 , 總之加了絕對不會錯。

unsigned int PHASE_ADD = FREQUENCY * PHASE_PRECISION / SAMPLE_RATE_DAC;
這時兩個dac的相位變化,我想知道為什么是這個公式,怎么來的。

=> 這個指示程序員自己擬定的一個計算公式,大致的意思是: 頻率 * 脈沖精度 / DAC的采樣率
至于,具體怎么來的,要問程序員了。


第三:TIMER4_Init(SYSCLK/SAMPLE_RATE_DAC);// Initialize Timer4 to overflow
定時器4的溢出為什么是  SYSCLK/SAMPLE_RATE_DAC  ?
=> 和上面類似,也就是 系統時鐘 / DAC的采樣率

第四: DAC0 = SIN_temp ^ 0x8000;
          DAC1 = COS_temp ^ 0x8000;           // Write to DAC1
為什么要或上8000?

=> 這里不是或,是 與或  也就是反轉最高位,結合 SIN COS來看,就是把正的變負的負的變正的吧。


好像,你就這些問題吧?

評分

參與人數 1黑幣 +5 收起 理由
waerdeng + 5 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:58835 發表于 2025-3-12 12:18 | 只看該作者
不錯 很棒的程序
回復

使用道具 舉報

地板
ID:1110477 發表于 2025-3-13 06:15 | 只看該作者
100000L,長整型?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品一区二区在线 | 国产一级在线视频 | 亚欧性视频 | 综合色站导航 | 精品国产高清一区二区三区 | 久久久精品一区二区三区 | 国产精品欧美一区二区三区 | 精品久久久精品 | 一区在线视频 | 欧美精品成人一区二区三区四区 | 99热首页| 亚洲视频在线免费观看 | 高清一区二区三区 | 成人精品一区 | 福利视频一区二区 | 日韩午夜精品 | 午夜视频网 | 国产成人精品一区二区三区在线观看 | 中文字幕日韩在线 | 精品乱码一区二区三四区 | 国产一区二区三区免费 | 玖玖国产| 国产精品日本一区二区在线播放 | 最新中文字幕久久 | 日韩欧美在 | 亚洲一区二区在线播放 | 中文字幕在线观看一区二区 | 亚洲精品一区二区在线观看 | 视频二区在线观看 | 午夜一区二区三区 | 91一区二区 | 国产亚洲精品美女久久久久久久久久 | 99re6在线视频精品免费 | 亚洲国产一区二区视频 | 久久91| 欧美日在线 | 国产日韩欧美在线观看 | 人人干人人爽 | 自拍偷拍视频网 | 成人午夜视频在线观看 | 亚洲免费人成在线视频观看 |