单片机采集脉冲信号编程

单片机采集脉冲信号编程,第1张

楼上回答有误,很明显输出入信号多于2路,用普通IO口可以。

程序中主要做好扫描和判断,不停读P1.0口,如果上次读到的为1,这次读到的是0,既可以判断为下降沿,这时可以设一个标记位,标示1秒脉冲来了。

然后进入P11~P14的判断,同理,判断上次和当前次电平,每个下降沿或者上升沿计数一次(开4个变量),当P1.0的标记位没有的时候(1秒过了),读出变量值即为脉冲个数,也就是频率了

MCS-51单片机内部没有AD转换器,需要外接AD转换器。比较常用的有ADC0809,这是款8位的AD转换芯片。不知道你要采集的信号是什么信号?如果变化比较缓慢的话就不用加采样保持电路,如果信号变化比较快的话就要加采样保持电路。芯片的编程也比较简单。

下面是ADC0809的程序:

//ADC0809采样程序

#include<reg51.h>

sbit a1=P1^0

sbit b1=P1^1

sbit c1=P1^2

sbit eoc=P1^3

sbit st=P1^4

sbit oe=P1^6

unsigned long dat

unsigned char show_char[]={0xc0,0xf9,0xa4,0xb0,0X99,

0X92,0x82,0xf8,0x80,0x90,

0x40,0x79,0x24,0x30,0x19,

0x12}

unsigned char buf[4]={3,4,5,0}

unsigned char bit_sel[3]={0xfd,0xfe}

int i,j

void delay(us)

{ while(us--)

{for(i=0i<100i++)}

}

main()

{ //初始化adc0809

st=0

oe=0

a1=0

b1=0

c1=0

while(1)

{ //启动AD转换获得数据

//

st=0

st=1

delay(1)

st=0

while(eoc==0)

oe=1

dat=P3

delay(1)

oe=0

//处理数据

//dat=0xf0

dat=(int)dat*5.0/255.0*100.0

buf[0]=dat/100

buf[0]=buf[0]+10

dat=dat%100

buf[1]=dat/10

buf[2]=dat%10

//数据显示

for(j=0j<2j++)

{ P2=bit_sel[j]

P0=show_char[buf[j]]

delay(1)

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11083031.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存