我这里有一段已经编好的用ADC0809进行模数转换的程序,只不过原有的电路中,ADC0809使用的时钟脉冲是由外部脉冲激励给的,我想用单片机的P3.3口输出一个500k的时钟脉冲,能不能在不改变原有程序功能的前提下加入这个功能,原来的程序如下:
#include <AT89X51.h>
#define uchar unsigned char
#define uint unsigned int
uchar data dispbit[4]={0xfe,0xfd,0xfb,0xf7},dispbuf[4];
sbit eoc=P3^0;
sbit start=P3^1;
sbit oe=P3^2;
unsigned char tc; //软件延时单元
bit flag1=0; //采样标志
code unsigned char ds=5; //软件延时系数__5
void delay (uint count);
void display(void);
uchar ad(void);
void main(void)
{
uchar k,s;
uint ss;
TMOD=0x01; //定时器初始化
TH0=0x4C;
TL0=0x00;
IE=0x82; //开放定时器0中断
tc=ds; //软件延时初值
TR0=1; //启动定时器
for (k=0;k<4;k++) //关显示
{
dispbuf[k]=28;
}
start=0; //AD转换控制信号初始化
oe=0;
do
{
if(flag1==1) //采样时刻到?
{
flag1=0;
s=ad(); //调用AD函数
ss=196*s; //标度变换
ss=ss/100;
ss=ss*4;
dispbuf[0]=ss/1000;
dispbuf[1]=ss%1000/100+10; //送显示
dispbuf[2]=ss%100/10;
dispbuf[3]=ss%10;
}
display();
}while(1);
}
uchar ad(void)
{
uchar ads;
start=1;
start=0;
do
{
}while(eoc==0);
oe=1;
ads=P1;
oe=0;
return(ads);
}
void display(void)
{
const uchar design[20]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
0x7F,0x6F,/*0x77,0x7C,0x39,0x5E,0x79,0x71,*/
0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,
0xFF,0xEF/*,0x76,0x73,0x00,0x40*/};
uchar i;
// dispbit=0x0;
for(i=0;i<4;i++)
{
P2=dispbit[i];
P0=design[dispbuf[i]];
// dispbit++;
delay (2);
}
}
void delay (unsigned int count)
{
unsigned int i,j;
for (i=0;i<count;i++)
for (j=0;j<120;j++);
}
void timer0(void) interrupt 1 //定时器0中断服务函数
{
TH0=0x4C; //再送定时初值
tc--; //软件延时计数
if (tc==0) //中断5次
{
tc=ds; //再设软件延时初值
flag1=1; //建AD标志
}
}