❶ 下降沿计数,每一个下降沿记一次数,要求c语言,我用中断一直都是失败,应该怎么写才好,下面是自己写的
现在想问一下你输入信号的频率。如果频率过大肯定是不行的。假设你用的是51单片机,晶振为12M,那么每一条语句执行的时间为1us,考虑到在C语言的条件下,以及你中断进行处理的时间,还有进行现场保护时的压栈,以及现场恢复的退栈时间,加起来算50us吧(依据不同的程序时间不一样),那么现在输入信号的频率最大也就为20K,考虑到实际余量大概就10K以内吧。另外还和硬件电路有关,硬件电路中存在噪声的,你可以用示波器看一下输入的信号的噪声。如果是硬件问题,那么就要滤波了。
❷ 用c语言编写控制电机运动的程序
1、有三个输入,分别是一个按钮、两个霍尔传感器(也就是接近开关),我用P0.0到P0.2来代替;输出2个或以上(这看接什么显示器,如果是PC的话,就不用数字量输出,直接串口就可以了)控制正反转的继电器管脚用P1.0、P1.1;需要与一个全局变量转动次数k连接起来,另外两个输入接近开关选用NPN传感器或用光电隔离,总之有效信号能把管脚电压拉低就可以。
2、例程:
#include<reg51.h>//选用晶振11.0592MHz
unsignedchark=0;//k表示正反转次数
sbitX0=P3^2;//调节按钮
sbitX1=P1^1;//上限位接近开关信号
sbitX2=P1^2;//下限位接近开关信号
sbitY1=P0^0;//电机上升(注意:我使用的是管脚输出为0时候,电机运动,这样可以避免启动时候,单片机自复位对电机点动的影响)
sbitY2=P0^1;//电机下降
voiddelay50ms(unsignedinti)
{
unsignedintj;
for(i;i>0;i--)
for(j=46078;j>0;j--);
}
main()
{
IT0=1;//下降沿触发
EX0=1;//开P3.2外部中断
EA=1;//总中断开
while(1)
while(k)
{
Y1=0;//正转
while(X1==1);//等待正转接近开关反应
Y1=1;//正转停
delay50ms(1);//停止时间50ms
Y2=0;//反转
while(X2==1);//等待反转接近开关反应
Y2=1;//反转停
k--;//圈数减一
}
}
voidcounter0(void)interrupt0
{
k++;//外部中断控制圈数加一
//这个位置可以加你显示程序
}
❸ 如何用C语言判断下降沿
让IT=1,在IE中,INT有下降沿就有中断标志
❹ 求51单片机的上升沿和下降沿C语言检测程序列子,端口就是普通IO口。
这里只讲原理,不关注速度。实际设计工作中,已经有很多单片机能够识别io端口上升沿和下降沿中断,且方式不止一种。
sbit io_inp=P2^1;输入端
bit old_bit;输入端电平记忆
unsigned char low_high;上升下降沿标志,0=无变化,1=上升沿,2、下降沿
void io_rest(void)
{
if(old_bit=!io_inp)
{
old_bit=io_inp;
if(io_inp=1)
low_high=1;
else
low_high=2;
}
}
void main(void)
{
old_bit=io_inp=P2^1;
while(1)
{
low_high=0;
io_rest(void);
//在此应用
}
}
❺ 上升沿和下降沿结合c语言怎么编写程序呀!随便举个例子就可以的!
设置一个变量为标志
比如flag=0
当flag=1的时候就是上升沿了
❻ 请按照如下下降沿/上升沿触发时序图写一段C语言程序
电子的课程我几乎全忘了,我翻了翻书,我当初学51单片机串口通信,用的是汇编。
我当初用C语言写51单片机代码的时候,编译变成机器代码,但是keil编辑器可以把机器代码转成助记符,就是汇编。我看了之后发现一条C语言代码会翻译成多条汇编,如果是循环,翻译成汇编就会更复杂,所以用C语言写51单片机代码,代码运行时间会更长,时间不能自己掌握,因为我不知道翻译成多少条汇编了。所以51单片机还是要用汇编写比较好。
我也不知道为什么你会直接用C语言写时序图,我只是觉得用汇编会简单点。
❼ 如何写一个单片机输入上升沿和下降沿的脉冲输出信号的c语言程序
这个简单,从低到高就是上升输出,重高到低就是下降输出
#include<reg51.h>
sbit pluse=P1^0;
main()
{
int i;
while(1)
{
pluse=0; //此时为下降输出
i=100;
while(i--);
pluse=1; //此时为上升输出
i=100;
while(i--);
}
}
❽ 在KEIL软件中“外部中断1由单片机的引脚P3.3下降沿触发”用C语言怎么写
先在主函数里写上:
IT1=1;//下降沿触发
EA=1;//开总中断
EX=1;//开int中断
然后在主程序外面写中断服务函数
void Int1()interrupt 2
{
写入你想实现的功能
} 当你按下P3.3后 就会执行void Int1()interrupt 2 里的程序了
希望能帮到你。
❾ 如何用c语言实现 上升沿和下降沿的判断
上升沿和下降沿一般是硬件处理,程序只能判断是否已出现。 计数器一般会自动计数,如果是程序模拟计数器,先置状,如被外部改变,就认为已出现跳变。 单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理...
❿ 单片机中一个I/O信号的上升沿或下降沿在单片机中C语言怎么写,不用中断
不用中断只能用查询了。
你只能写一个while循环,然后时刻判断IO电平。
上一次循环是低电平,下次变成高电平了,就可以判断来了一个上升沿。
注意信号上升时间和你的单片机时钟周期的关系,也就是说,信号上升沿要小于你查询两次所用的时间。如果信号你不能改变,那么你就需要纪录多次查询的结果,这样能识别比较慢的沿。