4.例子
例如需要一个f(t)=3.95sin240πtV的正弦激励信号,按照软件框图获得此激励信号的方法如下。在开始编程之前,首先进行端口分配,I/O模块C口的地址为Address,设C2为RD的控制口,C3为DATA的控制口,C4为CLK的控制口。程序首先要将移位寄存器复位,即对C口的C2位进行操作,如下所述: Ootp(Address,0x04); //使C2口输出0 Delay(0.01); Outp(Address,0x05); //使C2口输出1 Delay(0.01); 输入幅值为:3.956,即a=3.956:则b=100*3.956=395.6,四舍五入得396; 396除以10取余得6,所以C1=6: 396整除lO得到39,39除以10取余得到9,所以C2=9; 396整除100得到3,所以C3=3。 将C1、C2、C3按照5421码序列进行编码,编码规则见表1,根据表1的规则转换后,得: C1’=0000 0110=0x06 C2’=0000 1100=0x0C C3’=0000 0011=0x03 将C1’的数值赋予d1(即1=0000 0110);将C2’左移4位后,变成0000 1100 0000,赋予d2(即d2=0000 1100 0000);将C3’左移8位后,变成0011 0000 0000,赋予d3(即将上面得到的12位二进制数的每一位依次赋与数组。然后分12次将数组中的数据作为控制信号输入到寄存器中,得到相应的控制权值,用来控制输出正弦激励信号幅值的大小。C3为DATA的控制口,C4为CLK的控制口,具体实现过程如下: 当输出数据bit[I]=1时:
outp(Address,0x08); //脉冲信号为低电平。 Delay(0.01); Outp(Address,0x07); //位操作置1。 Delay(0.01); Outp(Address,0x09); //脉冲信号为高电平。 当输出数据bit[I]=0时: oout(Address,0x08); //脉冲信号为低电平。 Delay(0.01); Outp(Address,0x06); //位操作置0. Delay(0.01); Outp(Address,0x09); //脉冲信号为高电平。 |
 |