標(biāo)題: 51單片機A/D,D/A的應(yīng)用 [打印本頁]
作者: 125@ 時間: 2020-7-7 15:29
標(biāo)題: 51單片機A/D,D/A的應(yīng)用
這是我自己做的關(guān)于A/D,D/A技術(shù)應(yīng)用相關(guān)實驗的程序,已經(jīng)驗證過可以仿真
1、設(shè)計51單片機和ADC0809 的接口,使用中斷方式順序采集八路模擬量,存入地址為20~27H的內(nèi)部RAM中,循環(huán)往復(fù),不斷采集。
#include<reg51.h>
#include<absacc.h>
unsigned char xdata *adc_port;
unsigned char data *adc_result;
void main()
{
adc_port=0x7ff8;
adc_result=0x20;
EX1=1;
IT1=1;
EA=1;
*adc_port=0;
while(1) { ; }
}
extint1() interrupt 2
{
*adc_result=*adc_port;
if(adc_port=0x7fff)
{
adc_port=0x7ff8;
adc_result=0x20;
}
else
{
adc_port++;
adc_result++;
}
*adc_port=0;
}
2、設(shè)計51單片機和DAC0832的接口,要求地址為F7FFH,滿量程電壓為5V,采用單緩沖方式,畫出電路圖,編寫程序,輸出下列要求的模擬電壓。
(1) 幅值為4V,周期為2ms 的方波。
#include <reg51.h>
#include <absacc.h>
#define DAC0832 XBYTE[0xF7FF]
void delay()
{
TMOD=0x01;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
TR0=1;
do{;} while(!TF0);
TF0=0;
}
main ()
{ unsigned a=0;
while(1)
{
DAC0832=a;
delay();
a=a^0xcc;
}
}
2)周期為5ms的階梯波,階梯的電壓幅值分別為1V、2V、3V、4V、5V,每一個階梯1ms。
#include <reg51.h>
#include <absacc.h>
#define DAC0832 XBYTE[0xF7FF]
unsigned char dat=51;
void main()
{
EA=1;
TR0=1;
ET0=1;
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
while(1)
{
DAC0832=dat;
}
}
void DAC() interrupt 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
dat=dat+51;
if(dat>256){dat=51;}
}
2)周期為5ms的階梯波,階梯的電壓幅值分別為1V、2V、3V、4V、5V,每一個階梯1ms。
#include <reg51.h>
#include <absacc.h>
#define DAC0832 XBYTE[0xF7FF]
unsigned char dat=51;
void main()
{
EA=1;
TR0=1;
ET0=1;
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
while(1)
{
DAC0832=dat;
}
}
void DAC() interrupt 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
dat=dat+51;
if(dat>256){dat=51;}
}
-
圖片1.png
(86.18 KB, 下載次數(shù): 34)
下載附件
2020-7-7 15:28 上傳
仿真電路圖
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |