小第的两个程序要合并为一个程序 哪位大虾帮帮忙
#define TIM *(int *)0x24 #define RD *(int *)0x25 #define TCR *(int *)0x26 #define IMR *(int *)0x0 #define IFR *(int *)0x1 #define MST *(int *)0x1d
ioport unsigned int port3,port4,port2;
#define AD_DATA port2 #define AD_SEL port3 #define AD_HOLD port4
void interrupt time(void); int *ptr,k0,k1; signed int uWork0,uWork,uWork1;
main() { int i,j; asm(" ssbx INTM"); // 关闭可屏蔽中断 k0=k1=0; ptr=(int *)0x3000; // 转换数据的保存区,从数据区3000H开始 // 3000H-3200H保存第1通道(AIN1)的转换结果 // 3200H-3400H保存第2通道(AIN2)的转换结果 for(i=0;i<0x400;i++) // 将转换数据的保存区清0 *(ptr+i)=0; j= PMST;  MST = j&0xff; IMR = 0x8; TCR = 0x411; // 计数器分频系数=2 TIM = 0;  RD = 0x100; // 定时器周期=256,采样周期=周期*分频系数*时钟周期 TCR = 0x421; // =512时钟=64us IFR = 0x100; // 其中,时钟周期为8MHz
AD_SEL=6; // 通道选择 A0,A1
asm(" ssbx INTM"); // 开中断进行转换 while ( 1 ); }
// 定时器中断服务程序,完成:保存转换结果、启动下次转换 void interrupt time(void) { uWork0=AD_DATA; // 从FIFO中读取转换结果 uWork1=AD_DATA; // 从FIFO中读取转换结果 uWork=uWork0&0x0f000; if ( uWork==0x8000 ) { uWork0<<=4; // 去掉高4位 uWork0>>=4; // 取低4位有效值 *(ptr+k0)=uWork0; // 保存结果 k0++; if ( k0>=0x200 ) { k0=0; // 软中断位置 } } else if ( uWork==0x9000 ) { uWork0<<=4; // 去掉高4位 uWork0>>=4; // 取低4位有效值 *(ptr+k1+0x200)=uWork0; // 保存结果 k1++; k1%=0x200; } uWork=uWork1&0x0f000; if ( uWork==0x8000 ) { uWork1<<=4; // 去掉高4位 uWork1>>=4; // 取低4位有效值 *(ptr+k0)=uWork1; // 保存结果 k0++; if ( k0>=0x200 ) { k0=0; // 软中断位置 } } else if ( uWork==0x9000 ) { uWork1<<=4; // 去掉高4位 uWork1>>=4; // 取低4位有效值 *(ptr+k1+0x200)=uWork1; // 保存结果 k1++; k1%=0x200; } AD_HOLD =0; // 送转换信号 for ( uWork=0;uWork<10;uWork++ ); AD_HOLD=1; }
ioport unsigned int port1000,port1001,port1002,port1003,port1004; #define DAC0 port1000 #define DAC1 port1001 #define DAC2 port1002 #define DAC3 port1003 #define LDAC port1004 main() { unsigned int uDA0,uDA1,uDA2,uDA3;
uDA0=0; uDA1=1023; uDA2=2047; uDA3=3071; for(;;) { DAC0=uDA0; // 通道0赋值 DAC1=uDA1; // 通道1赋值 DAC2=uDA2; // 通道2赋值 DAC3=uDA3; // 通道3赋值 LDAC=0x1f; // 通道4赋值 uDA0+=0x10; uDA0%=4096; uDA1+=0x10; uDA1%=4096; uDA2+=0x10; uDA2%=4096; uDA3+=0x10; uDA3%=4096; } |