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