首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

急急急求AD与DA的组合程序

急急急求AD与DA的组合程序

小第的两个程序要合并为一个程序 哪位大虾帮帮忙


#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;
 }

呵呵 很高兴认识大家
返回列表