《DA转换程序设计.ppt》由会员分享,可在线阅读,更多相关《DA转换程序设计.ppt(9页珍藏版)》请在优知文库上搜索。
1、D/A转换及其程序设计oDA的Proteus图形连接开头 o#include o#include o o/8155 各部件地址o#define STATE8155 XBYTE0 x7FF8o#define IOA XBYTE0 x7FF9o#define IOB XBYTE0 x7FFAo#define IOC XBYTE0 x7FFBo#define TIMERH XBYTE0 x7FFDo#define TIMERL XBYTE0 x7FFCo/adc0808 各通道地址o#define IN0 XBYTE0 xFEF8 /11111110 11111000o#define IN1 XBY
2、TE0 xFEF9 /11111110 11111001o#define IN2 XBYTE0 xFEFA /11111110 11111010全局变量定义ovolatile unsigned char addr=0; /采集通道编号ounsigned char dig_data2=0; /保存采集数据ounsigned char temp1=0; /将显示第一路,8位二进制数据ounsigned char temp2=0; /将显示第二路,8位二进制数据ofloat value1=0.0; /8位二进制,转电压值时中间变量,第一路ofloat value2=0.0; /8位二进制,转电压值时
3、中间变量,第二路ounsigned int temp1_u=0; /计算后电压值*100,第一路ounsigned int temp2_u=0; /计算后电压值*100,第二路obit flag=1; /定时器T0,选路标志 ounsigned char code DIG_CODE16=0 xC0, 0 xF9, 0 xA4, 0 xB0, 0 x99, 0 x92, 0 x82, 0 xF8,o 0 x80, 0 x90, 0 x88, 0 x83, 0 xC6, 0 xA1, 0 x86, 0 x8E;/共阳代码 /code类型数组全局函数声明odelay();omain()ooo/815
4、5初始化oSTATE8155=0 x03;oIOB=0 x00;o o/初始中断oEA=1;oEX0=1;oIT0=1;oET0=1;oo/初始化定时器T0oTMOD=0 x01;oTH0=(65536-50000)/256; oTL0=(65536-50000)%256;oTR0=1;o while(1)o o /*/ o /*显示采集到8位二进制数,的十进制形式*/o /*/oo temp2=dig_data1;o o IOB=0 x20;o IOA=DIG_CODEtemp2/100;o delay();ooooo IOB=0 x40;o IOA=DIG_CODEtemp2%100/10
5、;o delay();o o IOB=0 x80;o IOA=DIG_CODEtemp2%10;o delay(); o o o temp1=dig_data0;o odelay();o IOB=0 x01;o IOA=DIG_CODEtemp1/100;o delay();o oo IOB=0 x02;o IOA=DIG_CODEtemp1%100/10;o delay();o o o IOB=0 x04;o IOA=DIG_CODEtemp1%10;o delay(); o /显示第一路采集的电压值o /* temp1=dig_data0;o value1=(float)temp1*5.0
6、/256; / 公式:value/5V=temp2/256o temp1_u=value1*100; / 以整型形式显示 o o delay();o IOB=0 x01;o IOA=DIG_CODEtemp1_u/100&0 x7f;/第一位数码管,显示小数点,其余位不显示o delay();o oo IOB=0 x02;o IOA=DIG_CODEtemp1_u%100/10;o delay();o o o IOB=0 x04;o IOA=DIG_CODEtemp1_u%10;o delay();o /显示第二路采集的电压值o temp2=dig_data1;o value2=(float)
7、temp2*5.0/256; / 公式:value/5V=temp2/256o temp2_u=value2*100; / 以整型形式显示o o IOB=0 x20;o IOA=DIG_CODEtemp2_u/100&0 x7f; /第一位数码管,显示小数点,其余位不显示o delay();ooo IOB=0 x40;o IOA=DIG_CODEtemp2_u%100/10;o delay();o o IOB=0 x80;o IOA=DIG_CODEtemp2_u%10;o delay();*/ o o o o void T0_srv(void)interrupt 1 using 1 /定时器
8、T0,每隔50ms来一次中断o o TH0=(65536-50000)/256; / 初值重装oTL0=(65536-50000)%256; / 初值重装o flag=flag; / 置标志位o if(flag=0)oIN0=0; addr=0; /开启第一路转换oelse oIN1=0; addr=1; /开启第二路转换o ovoid Int0_srv(void)interrupt 0 using 2oo oswitch(addr)oo case 0: o dig_data0=IN0; /读取第一路转换结果o break;o case 1: o dig_data1=IN1; /读取第二路转换结果o break;o default: break;ooo delay()o o o unsigned int a=500;o while(a-);o o