TMOD = 0x10 //方式1
TH1 = (65536-19456)/256 //0.05ms
TL1 = (65536-19456)%256
EA = 1
ET1 = 1
我在mian的上面写的中断void Time1(void) interrupt 3 using 0
为什么不会自动进入中断?
是写错哪里了?
呵呵呵,一个简单的问题啊,你定时器1配置好了,打开了T1中断 ET1 = 1,开启总中断EA = 1
但是你还没有启动定时器TR1 = 1就可以了,这么简单的问题!
000BH 0030H是这两个中断的入口地址,也就是发生中断后将要跳到这里来.T0INT,T1INT都是中断子程序的名字,也相当于地址,我们要跳到那个地方去执行中断子程序!!!!
在程序中,一般只有中断才会用到保护和恢复现场,我到现在还没有看见其它情况用它们的!!!
你的第3个问题就要看你用什么IC了,有的IC自带的有那些功能,你就不需要了,但是51是需要的.至于子程序那就不用中断首地址了,因为你掉用的子程序是固定的,不象中断,不知道发生在什么地方,不好把中断子程序放置,才要定义中断入口!!!!
在汇编语言里中断程序首先有入口地址(比如ORG 0003H) 之后是中断处理语句 最后有一个返回指令RETI
例如:
ORG 000BH
LJMP TION
MOV R4,#0
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
SETB EA
SETB ET0
WAIT: SJMP WAIT
TION: INC R4
CJNE R4,#10,timer
timer:MOV TH0,#3CH
MOV TL0,#0B0H
RETI
如果你说的是C51
中断程序结构如下:
void 中断程序名(void) interrupt n using m //确定中断源和中断程序所用寄存器
{
// 中断处理部分
}
例如:
void Time0_int(void) interrupt 1 using 1
{
uchar led,i
led=0xfe
P1=led
delay(500)
for(i=0i<8i++)
{
led=(led<<1)|0x01
P1=led
delay(500)
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)