单片机实验32试验六DAC0832采用单缓冲器方式的实验一实验目的1.了解和掌握D/A转换器的基本工作原理和主要技术指标。2.掌握8位D/A转换器DAC0832的内部结构、工作原理和引脚功能。3.掌握DAC0832与MAC-51单片机单缓冲器方式和双缓冲方式的接口电路设计与软件编程。二实验内容采用单缓冲方式进行D/A换转,输出正弦波、锯齿波、三角波,并用示波器观察输出的波形。三、实验程序#includereg51.h#defineucharunsignedchar#defineuintunsignedintsbitcsda=P2^2;sbitwr=P2^1;sbits1=P3^2;sbits2=P3^3;uchark=0,p=0,delay=0;ucharbxxz=0;pinglv=0;uchara=1,b=0,c=0,d=0,e=0;ucharcodesin[64]={135,145,158,167,176,188,199,209,218,226,234,240,245,249,252,254,254,253,251,247,243,237,230,222,213,204,193,182,170,158,146,133,121,108,96,84,72,61,50,41,32,24,17,11,7,3,1,0,0,2,5,9,14,20,28,36,45,55,66,78,90,102,114,128};ucharcodejuchi[64]={0,4,8,12,16,20,24,28,32,36,40,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,130,134,138,142,146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,215,219,223,227,231,235,239,243,247,251,255单片机实验33};ucharcodesanjiao[64]={0,8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128,136,144,152,160,168,176,184,192,200,208,216,224,232,240,248,248,240,232,224,216,208,200,192,184,176,168,160,152,144,136,128,120,112,104,96,88,80,72,64,56,48,40,32,24,16,8,0};voiddelay1(){inta,b;for(a=1;a0;a--)for(b=122;b0;b--);}voidint0()interrupt0{EX0=0;delay1();if(s1==0){bxxz++;if(bxxz==3)bxxz=0;switch(bxxz){case0:{a=1,b=0,c=0,d=0,e=0;}break;case1:{a=0,b=1,c=0,d=0,e=0;}break;case2:{a=0,b=0,c=1,d=0,e=0;}break;}delay1();while(!s1);}while(!s1);EX0=1;}voidint1()interrupt2{EX1=0;delay1();单片机实验34if(s2==0){p++;if(p==8)p=0;switch(p){case1:pinglv=3;break;case2:pinglv=6;break;case3:pinglv=9;break;case4:pinglv=12;break;case5:pinglv=15;break;case6:pinglv=18;break;case7:pinglv=21;break;default:pinglv=0;break;}delay1();while(!s2);}while(!s2);EX1=1;}voidmain(){csda=0;wr=0;EA=1;IT0=1;EX0=1;单片机实验35IT1=1;EX1=1;while(1){while(a){delay=pinglv;P0=sin[k];k++;if(k==64)k=0;while(delay)delay--;}while(b){delay=pinglv;P0=juchi[k];k++;if(k==64)k=0;while(delay)delay--;}while(c){delay=pinglv;P0=sanjiao[k];k++;if(k==64)k=0;while(delay)delay--;}}}四、实验流程图单片机实验36五、实验原理图开始初始化根据a,b,c,d,e的值进入相应的while循环While循环根据地址标志位查表输出数字量给DACX1832数据口地址标志位加1地址标志位是否等于64?地址位置标志0相应延时(对应频率)否是单片机实验37六、实验仿真及结果1.正弦波2.锯齿波3.三角波单片机实验38七、实验总结本次实验让我深刻体会到了科学的严谨性,在刚开始写的测试程序输出的波形失真很大,经过谨慎的思考,觉得可能是波形的ROM表里的数据值过小,导致DA输出的误差很大,因此将波形的ROM表里的数据值调大,在测试时发现波形失真明显小了很多。但是本实验在频率太小时矩形波仍会有些失真。