求单片机高手编写程序,主程序设计思路: 程序开始后,先读入 P0.7的值,并以此来选择输出脉冲的波形: P

一、单片机输出数字信号,经DAC0832转换为对应大小的模拟电
流值,再由运算放大器LF356进行电流饨压转换,最终输出模拟
电压值。因为声脉冲信号发生器只需要一路模拟量输出,故
DAC0832可采用单缓冲方式工作。
二、单片机的P0口连接一个8位指拨开关,其低7位实现对脉冲持
续时间的选择,分别对应0.5ms~4ms;高1位实现对脉冲波形的
选择,分别对应方波脉冲和伪随机噪声脉冲。0.5ms~4ms的延时
程序(脉冲持续时间),考虑到延时时间较短,精度要求很高,故
程序的编写应相当精确,所以采用硬件延时。AT89C52内部有两
个可编程的定时/记数器,通过设置其工作模式和计算初值可产
生精确的定时时间。
三、主程序设计思路:程序开始后,先读入P0.7的值,并以此
来选择输出脉冲的波形:P0.7=1时为方波脉冲,P0.7=0时为伪
随机噪声脉冲;然后对DAC的输出进行清零,并延时4s(这是为了
给测试时的操作预留时问);延时时问一到便开始输出方波/伪
随机噪声脉冲;紧跟着再次对DAC的输出清零,保持4s后便结束
程序。

1、确定DAC刷新周期T,如20uS输出,或增加按键控制T的大小;
2、随机数据可以通过rand()函数(需包含 stdlib.h 库函数)获得随机数;
3、通过设定定时器T0,来实现DAC的刷新。定时器T1用于计时。
4、通过改变定时装载初值,来改变刷新周期。
5、硬件上,设计好DAC接口电路。
以下是部分代码,尚需补充和完善:
#include <stdlib.h>
sbit Mode=P0^7;//记得上拉10k电阻。拨动开关。
bit OutMode;
unsigned char Cycle=256-20;
unsigned int mS;
unsigned char Amp;
unsigned char SquartAmp=0x80;
main()
{
TH0=Cycle; TH1=(-1000)>>8; TL1=(-1000)&0xff; TMOD=0x12;
TR1=1;ET1=1;EA=1;
OutMode=Mode;
mS=0;while(mS<4000);
TR0=1;ET0=1;EA=1;
mS=0;while(mS<4000);
while(1);
}
void ISRT0(void) interrupt 0
{
static unsigned char i;
TH0=Cycle;
i++;
if(OutMode==0){ if(i%2) Amp=0;else Amp=SquartAmp; }
else{ Amp=rand();}
WriteDAC(Amp);
}
void ISRT1(void) interrupt 2
{
TH1=(-1000)>>8; TL1=(-1000)&0xff;
mS++;
}
温馨提示:答案为网友推荐,仅供参考
相似回答