标题: 51单片机A/D,D/A的应用 [打印本页]
作者: 125@ 时间: 2020-7-7 15:29
标题: 51单片机A/D,D/A的应用
这是我自己做的关于A/D,D/A技术应用相关实验的程序,已经验证过可以仿真
1、设计51单片机和ADC0809 的接口,使用中断方式顺序采集八路模拟量,存入地址为20~27H的内部RAM中,循环往复,不断采集。
#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、设计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, 下载次数: 34)
仿真电路图
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |