DA转换程序设计.ppt
D/A转换及其程序设计,DA的Proteus图形连接,开头,#include#include/8155 各部件地址#define STATE8155 XBYTE0 x7FF8#define IOA XBYTE0 x7FF9#define IOB XBYTE0 x7FFA#define IOC XBYTE0 x7FFB#define TIMERH XBYTE0 x7FFD#define TIMERL XBYTE0 x7FFC/adc0808 各通道地址#define IN0 XBYTE0 xFEF8/11111110 11111000#define IN1 XBYTE0 xFEF9/11111110 11111001#define IN2 XBYTE0 xFEFA/11111110 11111010,全局变量定义,volatile unsigned char addr=0;/采集通道编号unsigned char dig_data2=0;/保存采集数据unsigned char temp1=0;/将显示第一路,8位二进制数据unsigned char temp2=0;/将显示第二路,8位二进制数据float value1=0.0;/8位二进制,转电压值时中间变量,第一路float value2=0.0;/8位二进制,转电压值时中间变量,第二路unsigned int temp1_u=0;/计算后电压值*100,第一路unsigned int temp2_u=0;/计算后电压值*100,第二路bit flag=1;/定时器T0,选路标志 unsigned char code DIG_CODE16=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90,0 x88,0 x83,0 xC6,0 xA1,0 x86,0 x8E;/共阳代码/code类型数组,全局函数声明,delay();main()/8155初始化STATE8155=0 x03;IOB=0 x00;/初始中断EA=1;EX0=1;IT0=1;ET0=1;/初始化定时器T0TMOD=0 x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;,while(1)/*/*显示采集到8位二进制数,的十进制形式*/*/temp2=dig_data1;IOB=0 x20;IOA=DIG_CODEtemp2/100;delay();,IOB=0 x40;IOA=DIG_CODEtemp2%100/10;delay();IOB=0 x80;IOA=DIG_CODEtemp2%10;delay();temp1=dig_data0;delay();IOB=0 x01;IOA=DIG_CODEtemp1/100;delay();IOB=0 x02;IOA=DIG_CODEtemp1%100/10;delay();IOB=0 x04;IOA=DIG_CODEtemp1%10;delay();,/显示第一路采集的电压值/*temp1=dig_data0;value1=(float)temp1*5.0/256;/公式:value/5V=temp2/256 temp1_u=value1*100;/以整型形式显示 delay();IOB=0 x01;IOA=DIG_CODEtemp1_u/100*/,void T0_srv(void)interrupt 1 using 1/定时器T0,每隔50ms来一次中断 TH0=(65536-50000)/256;/初值重装TL0=(65536-50000)%256;/初值重装 flag=flag;/置标志位 if(flag=0)IN0=0;addr=0;/开启第一路转换else IN1=0;addr=1;/开启第二路转换,void Int0_srv(void)interrupt 0 using 2 switch(addr)case 0:dig_data0=IN0;/读取第一路转换结果 break;case 1:dig_data1=IN1;/读取第二路转换结果 break;default:break;delay()unsigned int a=500;while(a-);,