这是我自己做的关于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;} }
|