=0; /*CPU屏蔽所有的中断申请*/
delay_ms(1);
i2cinit();
i2cstart();
i2csentbyte(0x70); /*ZLG7290的从地址为70H*/
i2csentbyte(0x07); /*命令缓冲区0地址*/
i2csentbyte(i); /*写命令缓冲区0*/
i2csentbyte(k); /*地址自动增加,写命令缓冲区1*/
i2cstop();
EA=1; /*CPU开放所有的中断申请*/
}
unsigned char read7290(unsigned char i)
{unsigned char x=0;
EA=0; /*CPU屏蔽所有的中断申请*/
delay_ms(1);
i2cinit();
i2cstart();
i2csentbyte(0x70); /*ZLG7290的从地址为70H*/
i2csentbyte(i);
i2cstart();
i2csentbyte(0x71); /*71H ?*/
x=i2creceivebyte();
sendacknomlege(0x1);
i2cstop();
return x;
// EA=1; /*中断开放在后边的中断子程序执行完之后才开放*/
}
/*I2C OPERATION 2*/
/* 5618 operation */
void write5618(unsigned int k)
{unsigned int i,j;
EA=0; j=k; /*CPU屏蔽所有的中断申请*/
P1=P1&0x5f; /*5618地址,使能芯片*/
_nop_();
for (i=0;i<16;i++) /*发送2字节数据:高四位是编程位,低12位是需要转换的数据*/
{
if (j&0x8000)
sdi=1;
else
sdi=0;
j<<=1;
sclk=0;
_nop_();
sclk=1;
};
_nop_();
_nop_();
P1=0xff; /*使能结束*/
EA=1; /*CPU开放所有的中断申请*/
}
/* 5618 operation */
/*initial COUNTER0*/
void init_time0() /*初始化计数器0*/
{ TMOD=0x85; /*T0:不受外部引脚控制,外部事件计数方式,工作方式为方式1,16位计数器*/
TH0=0; /*加计数寄存器高八位为0*/
TL0=0; /*加计数寄存器低八位为0*/
TCON=0x10; /*中断控制寄存器:计数器运行控制位TR0=1;外部中断源触发方式控制位IT0=0,电平触发*/
}
/*initial COUNTER0*/
main()
{ unsigned int temp,t3=0xc100;
unsigned char i=0;
IE=0x95;IP=0x01; /*IE:EA=1中断开放,ES=1允许串口中断,EX1=1,EX0=1外部中断1,0允许*/
/*IP:PX0=1 外部中断0定义为高优先级中断*/
P1=0xff;P3=P3|0x30; /*端口初始化:P1为高电平;P3_5=1读AD7865信号无效,P3_4=1*/
init_time0();
/*initiate 5618*/
write5618(0x4000); /*设置DAC B为输出,选择快速模式*/
write5618(0xc000); /*设置DAC A为输出,选择快速模式*/
/*initiate 5618*/
/* motor measure start */
P1=P1&0x3f; /* triger 555 电机测速使能*/
_nop_();
P1=0xff;
/* motor messure start */
/*7290*/
writedata7290(0x65,0); /*按位下载数据且译码指令:第五位显示'0',不闪烁,小数点不点亮*/
writedata7290(0x67,0); /*按位下载数据且译码指令:第七位显示'
实验一转速测量与控制(三)相关范文