怎样用51单片机同时采集八路方波信号?采集下降沿个数

作者&投稿:范殷 (若有异议请与网页底部的电邮联系)
怎样利用51单片机定时器/计数器0采集一组方波的高电平个数?~

我有一个1S数方波信号的程序 你应该能用的上
#include
#define uint unsigned int
#define uchar unsigned char
sbit P2_1=P2^1;
sbit dula=P1^1;
sbit wela=P1^2;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar code dispbit[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
uint period ,bai,count, shi,ge,i;
uchar dispbuf[8]={0,0,0,0,0,0,10,10};
uchar temp[8];
bit flag;
unsigned char timecount,dispcount,T0count;
unsigned long x;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);


}
void init()
{
TMOD=0x15;
TH0=0;
TL0=0;
TH1=(65532-5000)/256;
TL1=(65532-5000)%256;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
EA=1;
dula=0;
wela=0;
dispcount=0;
}
void main()
{
uint i;
init();
while(1)
{
if(flag==1)
{
flag=0;
dispcount=0;
x=T0count*65532+TH0*256+TL0;
for(i=0;i<8;i++)
{
temp[i]=0;

}
i=0;
while(x/10)
{

temp[i]=x%10;
x=x/10;
i++;

}
temp[i]=x;
for(i=0;i<6;i++)
{
dispbuf[i]=temp[i];

}
T0count=0;
timecount=0;
TH0=0;
TL0=0;
TR0=1;


}



}

}
void timer0()interrupt 1 using 0
{
T0count++;


}
void timer1() interrupt 3 using 0
{
TH1=(65532-5000)/256;
TL1=(65532-5000)%256;
timecount++;
if(timecount==200)
{
timecount=0;
flag=1;
TR0=0;

}

dula=1;
P0=table[dispbuf[7-i]];
dula=0;
P0=0xff;
wela=1;
P0=dispbit[i];
wela=0;
delay(1);
i++;
if(i==8)
{
i=0;
}

}

首先主程序判断有无大于0.1V电压,同时计算好定时中断周期,把用于产生脉冲的定时器中断开启
方波周期数据由主程序采集AD信号后计算直接赋值给一个变量比如TLL0,THH0,
然后定时器中断后重新加载计数值就
TL0=TLL0;
TH0=THH0;
然后在定时器中断中顺便把输出频率的IO电平修改了
主程序中只是实时的扫描AD转换完成就可以了。

1.硬件电路:八路信号同时接在一个口上(P0~P3),然后用八输入与门(也可用八只二极管搭接,所有正极接在INT中断脚上(P3.2或P3.3),必要时,中断脚接上拉电阻.
2.软件处理:程序利用利用INT低电平中断进行检测;进行中断后检测八路信号,相应脚为L则进行计数,可同时进行八路计数处理.
3.此法处理的信号频率不能太高,应≤20KHz(时钟为12MHz)以下(还要看软件处理速度问题及程序其它占用时间),较为可靠应在5KHz以下.

以上解答,有的可行,有的不行。
个人认为最简单的方式:
八路方波接到P0口的八个引脚上。这样,在任一时刻,八路方波的状态都组成了一个字节。在程序中设8个计数变量,保存各路方波的计数值。
在程序中不停的查询这个字节,哪一位为0,就把对应该位的计数变量加1.
而且,大大节约了查询周期。简化了外围电路。
简单的就是最好的。

用STC带PCA的可以,2路中断采集2路,2路定时器采集2路(51定时器是低电平触发的)他还有4路PCA(可以都设置成下降沿触发中断其实相当于扩展了4路外部中断)正好8路
另付带4路PCA的芯片型号参考STC12C5410PWM系列

如果频率不高的话,建议你直接轮询这8路方波信号算了。没必要再用74系列的数字IC作设计。假设你把8路信号都通过一个P口送进单片机,这样你只需要不停的比较每次从P口进来的数据,只要不同,就说明发生了高低电平的变化。

"每四个输入端接在一个与门上,再分别接在不同的引脚上,发生中断后用查询的方式,在程序中用不同的寄存器记数 "这个办法好。


利用C51单片机控制8个LED灯同时闪烁的程序
include<reg51.h>#define uchar unsigned charvoid delay(uchar a){uchar i;while(a--)for(i=0;i<120;i++);}main(){while(1) { P0=0x00; delay(200); P0=0xff; delay(200); }}

51单片机两个定时器同时使用程序,望大神解答一二!拜谢~~!!
优先级高的能打断优先级低的,就是低优先级的正在执行的时候,优先级高的来了低的就会被打断。执行完高的 再来执行低的,存入65536,中断会出问题的。

我想用51单片机单独控制两台步进电机,实现一台电机停,一台电机转和两...
如果有驱动器的话,步进电机的控制一台只需要两个信号即CW(正转)和CCW(反转)信号就OK了,或者PAUSE(脉冲)+DIR(方向),因此控制两台步进电机只需要4路信号即可,所以任意实验板都可以达到,当然买最便宜的了。

51单片机里面不用中断可以同时控制多个引脚吗
当然要用中断,但不是外部中断,是定时器中断 定时器中断产生时基例如50ms,我的思路是主程序不断地查询P2 口 ,当查询到某一位为0时(如P2.0),立即将对应的P1引脚(如P1.0)置0,点亮LED0,并且对某个变量如TIME0置初值100(100*50ms=5s)在定时器中断程序里,不断查询P1口各引脚的状态,...

51 单片机 2个定时器 同时工作
你的两个定时器的时间都设成一样的了,当两个定时器到了点后,单片机到底该进行处理那一个啊,所以要么你修改时间,要么你把IP优先寄存器设施下PT0或者PT1等于1,就行了。

在51单片机上用C语言实现电子琴功能,但同时数码管可以显示简谱,怎么...
4,建议模块化编程,先搞定按键的,然后搞定数码管的,然后搞定定时器的,然后再考虑如何把它们组合起来。好了不说了,说得有点多了,再说会我都回到大学时代了,哈哈。总之自己一点一点的做,应该不难,51熟练,c语言熟练,板子焊接的结构比较清晰的话,很快就可以搞定的。5,还是建议你自己写一份各个...

51单片机用四个按键同时控制数码管和步进电机,按键作为加减器,数码管...
include "reg52.h"void delay(unsigned int t);\/\/Motor sbit F1 = P1^0;sbit F2 = P1^1;sbit F3 = P1^2;sbit F4 = P1^3;unsigned char code FFW[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6}; \/\/反转 unsigned char code FFZ[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,...

我想用51单片机控制两块AD9850,同时产生两路可控制的正弦波.请问下我应 ...
用一个tmer,tmer只负责计量最小时间单位,然后再tmer中断里设置一个变量 计中断次数,查询这个变量的值来决定2路得pwm输出,这样可以输出2路不同占空比的pwm

急求!!! 菜鸟提问:怎样用51单片机控制200多个LED灯?
你这个应该是驱动不够了吧,如果是一个管脚4个灯同时动作的话,相当于只需要控制50多路IO就可以了,这样的话,你加点74HCT125或者245之类的驱动器试试;如果需要控制每个灯的话,可以试试使用锁存器,复用IO就可以了

一个51单片机可以多(2个定时,6个计数)功能能同时工作吗?
可以办到。常见的时钟,时分秒,就是三个不同的计时器。常见的4*4键盘,就是16个开关,每个开关就可以输入一路信号,当然可以用来计数。不需要添加很多的外设,合理编写软件,就可以办到。

相城区18154805681: 怎样用51单片机同时采集八路方波信号?采集下降沿个数 -
雕忽重酒: 以上解答,有的可行,有的不行.个人认为最简单的方式:八路方波接到P0口的八个引脚上.这样,在任一时刻,八路方波的状态都组成了一个字节.在程序中设8个计数变量,保存各路方波的计数值.在程序中不停的查询这个字节,哪一位为0,就把对应该位的计数变量加1.而且,大大节约了查询周期.简化了外围电路.简单的就是最好的.

相城区18154805681: 51单片机怎样产生多路方波信号 -
雕忽重酒: #include unsigned char a; sbit pl1=P1^0; sbit pl2=P1^1; sbit pl3=P1^2; sbit pl4=P1^3; void t0isr() interrupt 1 { a++; a%=3; pl1=~pl1; if(a==1)pl2=~pl2; if(a==2)pl3=~pl3; if(a==3)pl4=~pl4; } main() { TMOD=0x02; TH0=156; TL0=156; ET0=1; TR0=1; EA=1; while(1); }

相城区18154805681: 小弟想把方波信号借助51单片机测量其频率,请问那单片机部分应该怎么设计??
雕忽重酒: 频率比较低的信号适合用 qq335702318 的方法 被测信号频率相对较高的话计数的方式比较精确. 测量原理: 由单片机输出一个确定时间长度的 闸门 信号. 闸门信号起选通作用,和输入信号经过逻辑门一起作为计数器的外部输入. 这样测得单位时间内被测量信号的周期数. 经过计算得到信号频率. (闸门信号的时间长度可以通过测量精度和被测信号频率范围来确定.) 程序方面,需要一段计时程序. 例如,P1.0输出闸门信号,与输入信号经与非门作为计数器1输入. 流程: 1.计数器1选择外部输入计数方式. 2.计数器1清零,使能 3.P1.0=1 4.计时程序 5.P1.0=0 6.读计数器1的值,计算方波频率

相城区18154805681: 怎么用51单片机测量方波频率?输入口怎么接 -
雕忽重酒: 采用两个定时器,一个计数,一个定时 ,定时0.5s或1S(需多次中断累积),读取计数器的值,即可得到 频率 输入口直接接P3.4 (T0 )或 P3.5 ( T1)

相城区18154805681: 请问在51单片机控制系统中,如何实现对多路模拟信号的同时测量 -
雕忽重酒: 你好在工业现场对多路模拟信号的采集一般都是循环检测的,就目前中低端的ad芯片一个周期也就是十几微秒,其实影响不大.如果非要同时进行,这个也不难,如你所说,测量一个三相负载的话,按最多6个测量值,这样用6个单路ad转换器,单片机只要控制它们同时启动,再分别读出测量值就行了,串并都可,软件控制上,多转换几次,取最后一次可提高准确度,当然要做好硬件上信号电平的匹配转换,最后套入公式计算就行了.

相城区18154805681: 51单片机怎么捕捉方波信号 -
雕忽重酒: 假设你的信号接在P1.0口上 直接判断你的P1.0端口的电平状态 , 然后用定时器计时 设置为5ms 一次的中断 中断中计数,看一共有多少个5ms 一秒钟大概就是200个

相城区18154805681: 怎么用单片机51产生8Mhz的方波 -
雕忽重酒: 40khz方波是周期为25us的方波,可以正负电平各延时大约12us51单片机P1口输出40khz方波,汇编程序如下:L1:CLR AMOV P1,ALCALL DELAYSETB AMOV P1,ALCALL DELAYSJMP L1DELAY:MOV R1,#6L1:DJNZ R1,L1

相城区18154805681: 单片机数据采集系统设计(51核心,ADC0809模数转换),结合键盘显示器实现八路信号采集,存储,显示功能. -
雕忽重酒: 1、假如你要IN0~IN7都显示,那么需要8个n位数码管模块,假如你只用一个n位数码管模块动显8个通道数据,只会一直闪烁.但是,你可以用LCD12864或者1206显示.方法是把采集回来的数据保存到寄存器,然后给1206写数据时一并显示. 2、定义键盘不难,假如你的ADC转换函数为ADC_tran()(函数里面有通道选择),你只需添加形式参数就可以了,比如按键1的时候,会有一个键码key=0x01,channel=key&(相应的转换,成通道值); ADC_tran(uchar channel){ Addr_0809=channel; //Addr_0809是选择通道,后面接着你的转换数据操作程序}

相城区18154805681: 用80C51F040单片机连续采集方波高低电平1000组 高电平+5V 低电平—5V 求程序啊
雕忽重酒: 我理解你的目的是测量多个周期方波的高电平和低电平宽度的总和,进行平均,以便获取更高精度的占空比. 如果是这样,较简单的方案是采用两个计数器,分别对高电平和低电平宽度进行及时.外部采用一片反相器,分别连接两个计数器的输入门控信号,使其中一个计数器只有在方波高电平期间计时,另一个计数器只有在方波低电平期间计时.至于是否记录1000组,其实并不重要,只要是组数足够多,就可以了.

相城区18154805681: 51单片机怎样产生一个40KHz的方波? -
雕忽重酒: 首先说一点,你用12M晶振是不可能产生你说的那种40k方波的.0.5us根本就实现不了.再说一点,红外避障传感器不需要调制电路,一直红外发射管直接供电就可以了.38k方波调制是用来...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网