标题: 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;
                        
    ifadc_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的阶梯波,阶梯的电压幅值分别为1V2V3V4V5V,每一个阶梯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的阶梯波,阶梯的电压幅值分别为1V2V3V4V5V,每一个阶梯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