单片机实验-DA实验
一、實驗目的
1、了解 D/A 轉換的基本原理。
2、了解 D/A 轉換芯片 0832 的性能及編程方法。
3、了解單片機系統中擴展 D/A 轉換的基本方法。
二.實驗設備和器件
1.KEIL軟件
2.實驗箱
三.實驗內容
利用 DAC0832,編制程序產生鋸齒波、三角波、正弦波。三種波輪流顯示,用示波器觀看。
- 電路圖及連線:
| 連線 | 連線孔1 | 連線孔2 |
| 1 | DA_CS | CS2 |
| 2 | -5V-+5V | 電壓表測量端 |
| 3 | 電壓表地端 | 實驗箱地 |
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?
- 代碼:
#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define DAC0832 XBYTE[0x8000]
uchar sindata[64]=
{0x80,0x8c,0x98,0xa5,0xb0,0xbc,0xc7,0xd1,0xda,0xe2,0xea,
?0xf0,0xf6,0xfa,0xfd,0xff,0xff,0xff,0xfd,0xfa,0xf6,0xf0,
?0xea,0xe3,0xda,0xd1,0xc7,0xbc,0xba,0xa5,0x99,0x8c,0x80,
?0x73,0x67,0x5b,0x4f,0x43,0x39,0x2e,0x25,0x1d,0x15,0xf,
?0x9,0x5,0x2,0x0,0x0,0x0,0x2,0x5,0x9,0xe,0x15,0x1c,0x25,
?0x2e,0x38,0x43,0x4e,0x5a,0x66,0x73};
?void delay(uchar m)//延時函數
{uchar i;for(i=0;i<m;i++) ;}
void juchi() ??//鋸齒函數
{uchar i1;
for (i1=0;i1<0xff;i1++) ?DAC0832=i1;
i1=0;}
void sanjiao() //三角函數
{ uchar i2;
for(i2=0;i2<0xff;i2++) ?DAC0832=i2;
for(i2=0xff;i2>0;i2--) ?DAC0832=i2;
i2=0;}
void zhengxian() //正弦函數
{uchar k;
for(k=0;k<64;k++)
{DAC0832=sindata[k];delay(1);}}
void main() ???//主函數
{uchar j=2;
while(1)
{
while(j--)
{juchi();}j=2;
while(j--)
{sanjiao();}j=2;
while(j--)
{zhengxian();}j=2;}}
- 波形圖:
?
- 分析:
8 位 D/A 轉換器的輸入數據與輸出電壓的關系為
U(-5V ~ +5V)=2·Uref/256×N-5V ????(這里 Uref 為+5V)
2、本實驗DA選擇模塊地址控制端口DA_CS與實驗箱上的CS0相連,根據查實驗箱相關資料可知,CS0提供的地址為8000H-8fffH,本實驗選取的8000H作為地址
3、第一部分的實驗圖在本實驗中右下角的部分不需要
4、鋸齒的形成原理則是輸入的數字量從0000到ffff,一直循環,可形成無數個鋸齒波
???三角的形成原理則是輸入的數字量從0000到ffff,,再從ffff到0000,一直循環,可形成無數個三角波
???正弦的形成原理則是造一張正弦數字量表。即查函數表得到的值轉換成十六進制數填表。
5、在本實驗形成鋸齒波時,用for(i1=0;i1<=0xff;i1++)這條語句時,這個循環跳不出來,會一直在示波器上一直顯示鋸齒波,改為for(i1=0;i1<0xff;i1++)之后,循環則跳出
6、本實驗中,我們把每個波形的形成寫為一個函數,然后在主函數中調用這三個函數,為防止波形轉換的過快,在主函數中中,while再構成了一個循環,及每個波形圖出現兩個周期。
總結
以上是生活随笔為你收集整理的单片机实验-DA实验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【每日SQL打卡】
- 下一篇: 建议收藏丨sql行转列的一千种写法!!