#include //SRAM引脚 //片选端由74LS138引出 sbit SRAMWE = P3^6; sbit SRAMOE = P3^7; //P0、P2^0~P2^6充当地址线 //DAC0832引脚 sbit DACCS = P3^1; //74HC573引脚 sbit LE=P3^0; //74LS138引脚 sbit LSA0 = P1^0; sbit LSA1 = P1^1; sbit LSA2 = P1^2; sbit LSOE = P1^3; void main() { //读出的数据高位是较早的AD转换数据 int addr; unsigned char page; char temp,temp1,getdata1=0,getdata2; // LE=0; DACCS=1; P1=0xf0; //11111000 SRAMWE=1; SRAMOE=1; TMOD=0x01; for(page=0;page<4;page++) { P1=(0xf8|page); for(addr=0;addr<0x7fff;addr++) { P0=0xff; //读一次数据操作代码 P2=((addr>>8)&0xff); P0=(addr&0xff); LE=1; LE=0; SRAMOE=0; getdata2=P0; //读一次RAM中的数据 SRAMOE=1; temp1=(getdata2>>7); if(temp1==0) //差值为正 { temp=((getdata2>>4)+getdata1); P0=temp; //发送数据给DAC0832 DACCS=0; getdata1+=(getdata2>>4); } else //差值为负 { temp=(getdata1-((getdata2>>4)&0x07)); P0=temp; //发送数据给DAC0832 DACCS=0; getdata1-=((getdata2&0x70)>>4); } TH0 = 0xff; TL0 = 0x88; TR0 = 1; while(TF0!=1); TR0 = 0; TF0 = 0; DACCS=1; temp1=((getdata2&0x08)>>3); if(temp1==0) //差值为正 { temp=((getdata2&0x07)+getdata1); P0=temp; //发送数据给DAC0832 DACCS=0; getdata1+=(getdata2&0x07); } else //差值为负 { temp=(getdata1-(getdata2&0x07)); P0=temp; //发送数据给DAC0832 DACCS=0; getdata1-=(getdata2&0x07); } TH0 = 0xff; TL0 = 0x88; TR0 = 1; while(TF0!=1); TR0 = 0; TF0 = 0; DACCS=1; } } while(1); }