A. 如何探测51单片机IO口的上升沿
好像不能实现。51里的中断也是低电平或者下降沿触发。
可以把上升沿信号加个反向器,来触发51得中断。
B. 如何用单片机普通I/O口检测上升沿或下降沿
您是问硬件的方式?还是软件的方式?
如果是硬件的方式,那么,各种单片机很不相同,需要具体看它的资料。
一般来说,某些引脚,例如:外中断引脚、定时器的计数触发引脚、捕获引脚等等,都可以用来检测上升沿与下降沿。
以捕获(有的单片机资料如80196,将它称作“高速输入”)引脚为例:
捕获引脚可以与某个定时器相关联,在捕获引脚上遇到上升沿或下降沿时,硬件就自动记录下当时定时器的读数,并产生中断请求。您可以在中断服务程序中做所需的相应操作。
至于是上升沿捕获,还是下降沿捕获,还是二者都能捕获,可以由用户自己选择配置。
如果是用软件的方式来检测,那道理就简单了。用查询方式:只要将要检测的信号接到某个输入端口的某个位,在程序中反复读取该位的输入,一旦遇到“上次是0此次是1”的情况,就说明检测到了上升沿,遇到“上次是1此次是0”的情况,就说明检测到了下降沿。
C. 51单片机如何识别方波脉冲的上升沿下降沿,方波周期未知,且下降沿时触发计数器计数,硬件电路。
最简单的就是利用定时计数中断的上升沿和下降沿触发来实现,
D. 请教,用单片机一个输入口实现上升沿,下降沿都计数
对于51单片机,可用一个外部中断引脚,如INT0-P3.2
设置成下降沿中断模式,中断后计数,在中断程序中,查询P3.2引脚状态,由0变成1,即发现上升沿后就计数。然后退出中断。再次下降沿,再次重复。
E. 求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);
//在此应用
}
}
F. 单片机C语言怎么判断上升沿触发
1、上升沿和下降沿一般是硬件处理,程序只能判断是否已出现。计数器一般会自动计数,如果是程序模拟计数器,先置状,如被外部改变,就认为已出现跳变。
2、单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。
G. 单片机使用计数器时 使用上升沿或下降沿计数肘 如何防止抖动产生的重复计数
加防抖,就是在电平变化超过一定的值时才认为是有效电平变化,防抖时间取决于信号及干扰
H. 单片机如何做上升沿
单片机上升沿:
顺时针旋转A超前B相信号90°:
A: _|--|__|--|_
B: __|--|__|--|
逆时针旋转B相信号超前A相信号90°:
A:__|--|__|--|_
B:_|--|__|--|__
下面是AT89C2051检测并进行二倍频程序:
;采用外部中断方式
ORG 00H
LJMP MAIN
ORG 03H
LJMP INT0
ORG 13H
LJMP INT1
ORG 50H
MAIN: MOV SP,#40H
MOV P3,#0FFH
MOV IE,#10000101B ;设定外部中断
MOV TCON,#00000101B
SETB EA
MA1: MOV P1,#0FFH
MOV P3,#0FFH
SJMP MA1
;*******************
INT0: PUSH PSW
CLR EA
I0: JNB P1.0,FAN
CLR P3.4
SJMP INT0END
FAN: CLR P3.5
INT0END:
POP PSW
SETB EA
MOV P3,#0FFH
RETI
INT1: PUSH PSW
CLR EA
JNB P1.0,ZHENG
CLR P3.5
SJMP INT1END
ZHENG: CLR P3.4
INT1END:
POP PSW
SETB EA
MOV P3,#0FFH
RETI
I. 用51单片机汇编语言检测上升沿和下降沿
这里只讲原理,不关注速度。实际设计工作中,已经有很多单片机能够识别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);
//在此应用
}
}
(9)单片机检查上升沿计数扩展阅读:
直接使用汇编指令编写单片机程序,对硬件的控制更加直接,可以直接操作物理地址,寄存器,端口等;其它更高级的语言(如:C语言)对硬件的控制是依赖于类库来实现的。并且,对于一些对程序大小和运行速度有非常严苛要求的项目而言,都必须使用汇编指令。
C语言只是为了方便编写,与机器打交道的其实都是2进制得代码,汇编语言就是这些代码好记忆的名称和规则,只是比C语言难理解些。
J. 单片机检查上升沿并计数,怎么实现可否有例子示范
单片机定时器只能在脉冲下降沿计数,为了能在上升沿计数,我们须在单片机相应的外部输入引脚T0(P3.4)或T1(P3.5)上接一个反相器,这样就能把上升沿变为下降沿,从而满足了我们需要的功能。
参考C51程序如下:希望对你能有帮助
#include<reg51.h>
#define ulong unsigned long
#define uchar unsigned char
#define uint unsigned int
ulong i;
void time0_int(void) interrupt 1 //硬件寄存器最多稚计数65536个脉冲,
{ //为解决此问题用件计数来实现
i=i+1; TH0=0;TL0=0;TR0=1;
}
uint read()
{
uchar tl,th1,th2;
uint val;
while(1)
{
th1=TH0;
tl=TL0;
th2=TH0;
if(th1==th2)
break;
}
val=th1*256+tl;
return val;
}
void main()
{
uchar num;
TMOD=0x05;
TH0=0;
TL0=0;
TR0=0;
while(1)
{
num=read(); //读取T0引脚上的脉冲个,赋值给num
}
}