C51程序不能进入中断

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C51程序不能进入中断相关的知识,希望对你有一定的参考价值。

#include "reg52.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
void delay();
uchar tmpt;
uint tt=0;
uint num=0;
uchar code table[]=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;
void main()

TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
//TH0=0xff;
//TL0=0xff;
EA=1;
ET0=1;
TR0=1;
tmpt=0x80;
while(1)

P0=~tmpt;
tmpt=_cror_(tmpt,1);
delay();


void delay()

uint i,j;
for (i=1000;i>0;i--)
for(j=110;j>0;j--);

void shuma() interrupt 1

tt++;
if(tt==20)

P0=table[num];
num++;
if(num==7)
num=0;

TH0=0x3c;
TL0=0xb0;

你QQ多少

参考技术A 用t0计时,要确保第一个中断是上部到位,如不能保证就用2个外部中断吧。
并且2次中断间隔不能超过65.536ms(12MHz),如超过就用t0中断计时。
思路就是上部中断清零TH0、TL0,下部中断统计。
unsigned short time; //时间间隔
unsigned char bUp = 0; //上部到位

static void int_ex0(void) interrupt 0 using 1

if(bUp == 0)

bUp = 1;
TH0 = 0;
TL0 = 0;

else

time = TH0;
time <<= 8;
time |= TL0;
bUp = 0;


参考技术B 可以进中断呀。
void shuma() interrupt 1

tt++;
if(tt==20)

tt=0; //少了这条,tt 到20了还会一直加上。无法=20了。
P0=table[num];
。。。追问

你用KEILC仿真一下看,我试过了,不能进入中断, tt=0; //少了这条,tt 到20了还会一直加上。无法=20了。这个是我忘了加了。

追答

我就是用KEIL试的。

本回答被提问者和网友采纳
参考技术C 图发不上?图上我进了3 次中断了。

以上是关于C51程序不能进入中断的主要内容,如果未能解决你的问题,请参考以下文章

对于c51外部中断和程序调用的理解

对于c51外部中断和程序调用的理解

单片机C51的中断程序应该怎么写

c51单片机中断程序中的interrupt1,2,3是由啥决定的?

keil C51中函数调用无法正确返回怎么回事

51单片机c语言中断函数不能进行参数传递,是啥意思,谁能解释一下