求一段51单片机的程序。要求外部中断高电平触发时,定时器0开始计数。

不是有当GATE=1时,要用软件使TR0=1,同时外部中断引脚INTO也为高电平时才能启动定时器工作?

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit d1=P1^0;
char num,tt;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z);
void main()
{
TMOD=0x01;//设置定时器0为工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;//开总中?
ET0=1;//开定时器0终中断
TR0=1;//启动定时器0
wela=1;
P0=0xea;
wela=0;
dula=1;
P0=0x3f;
dula=0;
while(1)
{
if(tt==20)
{
tt=0;
num++;
if(num==16)
num=0;
d1=1;
dula=1;
P0=table[num];
dula=0;
delay(1000);//duo xie le
}
}
}

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void exter0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-08-31
外部中断高电平触发需要接一个反相器 51单片机不能直接实现高电平中断
第2个回答  2009-09-11
没听说过高电平触发的,只有低电平触发,你可以接一个反相器试一试。要不你将高电平接到三极管9013的基极,INT0接三极管9013的集电极,三极管9013的发射极接GND,那么高电平信号转换为低电平触发了。
第3个回答  2009-08-31
外部中断不是低电平触发吗?

51单片机外部中断函数执行时,定时器还在计时吗
外部中断执行过程中,只要定时中断能产生并且能进入定时中断子程序,定时器就可以计数,这跟你设置的中断优先级有关系。你的这段程序里好像没有体现中断优先级。如果定时器中断的优先级高于外部中断,这样就可以,否则就不行。举个简单的例子:执行中断好比一位老师讲课,没有设置中断优先级(默认设置)的...

51单片机,如果外部中断0被触发,定时器0、外部中断1、定时器1还能工作么...
外部中断0、定时器0、外部中断1、定时器1和串行口,它们是同时工作的。只是当满足一定的条件,它们会向CPU申请中断,而CPU只有一个,只能执行一个外设的中断程序。如果外部中断1被触发,CPU执行X1的中断程序,这时,定时器1和定时器0仍然在做自己的工作,并没有停止工作。楼主的问题,可能是问CPU的,...

编一个51单片机外部中断测频率的程序,急求!!
void timer0() interrupt 1 { TH0=(65536-50000)\/256;TL0=(65536-50000)%256;t++;} 每一个下降沿到达时conut自加1。开启一个定时器,计算一定时间t内的count值,主程序就好写了,再写一个H=count\/t语句,H就是频率了。总体思路就是这样,细节你就自己来写吧。

将单片机的外部中断1、定时器中断0打开,要求定时器0的中断优先级高于外...
\/\/中断服务程序  interrupt 0 指明是外部中断0的中断函数 \/ interrupt 0  指明是外部中断0;interrupt 1  指明是定时器中断0; interrupt 2  指明是外部中断1;interrupt 3  指明是定时器中断1;interrupt 4  指明是串行口中断;\/ void ISR_Key(void) ...

51单片机定时器0的中断响应过程
8051单片机有5个中断源和两个中断优先级,高优先级的中断源可以中断低优先级的服务程序,反之不行。INT0>T0>INT1>T1>串口中断。8051没有专门的开中断和关中断的指令,中断的开放和关闭是由特殊功能寄存器IE来实现两级控制的。有个总开关EA,然后又有ES,ET1,EX1,ET0,EX0五个开关。为1表示开,为0...

怎样用51单片机定时器测一个高电平的持续的时间?谢谢
给你提供个思路,以12M晶振为例,如果高电平时间比较短(大概35ms以内)可以使用外部中断的下降沿中断,当外部中断发生时关闭定时器,记录定时器TH0TL0的值,记录的定时器TH0TL0的值就是高电平的时间、等待中断输入引脚电平为高电平,清零TH0TL0并启动定时器,反复循环。如果高电平的时间大于35ms,则...

51单片机的程序,求大神给解释下,具体些
TL0=(65536-46080)%256;ET0=1;\/\/定时器0中断打开 EA=1;\/\/总中断打开 while(1){ if(K1==0)\/\/启动 TR0=1;if(K2==0)\/\/暂停 TR0=0;if(K3==0) 秒清0 {m=0; } if(pp==20)\/\/50*20ms=1S m++;n--;P1=n;\/\/P1可能是秒(十六进制)倒计时显示的 if(m==60)\/\/60s是1...

52单片机的外部中断和定时器中断同时的问题
三. 单独试验一下外部中断,是否有效。四. 上面没问题了,再往下进行,把外部中断优先级设低,timer2优先级设高,中断后加入一个死循环,目的是看看进入外部中断后,定时器中断还能不能进入。五. 若可以进入,没问题,再往timer2中断里加东西,恢复外部中断程序。这样出现问题就知道到哪找解决办法了。...

51单片机定时器的汇编语言程序编程,
看看下面的程序,是不是最简单:ORG 0000H SETB TR0 ;启动T0 MOV R2, #250 ;定时计数初值 LOOP:MOV TH0, #(8192 - 8000) \/ 32 ;定时8ms MOV TL0, #(8192 - 8000) MOD 32 JNB TF0, $ ;等待8ms CLR TF0 DJNZ R2, LOOP ;每隔8ms,R2减一次一 ...

51单片机如何用计数器检测脉冲信号(高低电平),程序怎么做!没有思路...
可以利用51单片机的计数器T0、T1,例如用计数器0的外部计数脉冲输入端T0计数,当计满100个脉冲数量后,触发中断。进入计数服务中断程序。如果有脉冲信号,经过电容微分后,在下降沿会产生一个向下的尖端脉冲,电阻R2是作为一个偏置,当有向下的尖端脉冲来后,反相端的电压会低于同向端的电压。从而比较器...

相似回答
大家正在搜