
一个单片机C语言的问题
代码如下:voidtim0()interrupt1using0{ucharcount;TH0=(65536-46080)/256;TL0=(65536-46080)%25...
代码如下:
void tim0() interrupt 1 using 0
{
uchar count;
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
count++;
if(count==20) //11.05921
{
count=0;
j=j+8;
if(j==128)
{
j=0;
}
}
}
void main()
{
TMOD=0x01;
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
ET0=1;
EA=1;
TR0=1;
while(1)
{
for(i=0;i<8;i++)
{
P0=hen[i];
P1=lie[i+j];
del(2);
}
}
}
想问一下:main( )函数中,设置中断/计时器寄存器后,是先执行中断子程序还是先执行while(1)循环体,直到计时器激发中断才转为执行中断子程序?
为什么?先谢谢解说,麻烦说详细点。
再问一句,执行while(1)循环等中断时间到后转而执行中断子程序,执行完子程序后下一个中断未到来前是否还是回到while(1)循环继续执行? 展开
void tim0() interrupt 1 using 0
{
uchar count;
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
count++;
if(count==20) //11.05921
{
count=0;
j=j+8;
if(j==128)
{
j=0;
}
}
}
void main()
{
TMOD=0x01;
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
ET0=1;
EA=1;
TR0=1;
while(1)
{
for(i=0;i<8;i++)
{
P0=hen[i];
P1=lie[i+j];
del(2);
}
}
}
想问一下:main( )函数中,设置中断/计时器寄存器后,是先执行中断子程序还是先执行while(1)循环体,直到计时器激发中断才转为执行中断子程序?
为什么?先谢谢解说,麻烦说详细点。
再问一句,执行while(1)循环等中断时间到后转而执行中断子程序,执行完子程序后下一个中断未到来前是否还是回到while(1)循环继续执行? 展开
3个回答
展开全部
1、先执行while(1),因为单片机运行是一直执行的是主程序,只有当中断发生了(而且寄存器EA设置成允许T0中断),这时单片机才会响应中断,并执行中断服务程序。这是单片机自身约定好的中断响应方式。
2、进入中断服务程序前单片机会先保存下一条将要执行指令的地址,当中断返回后,单片机会自动转到主程序中,并且从之前保存的指令地址处取指令,然后再执行。每次中断都是这样,所以程序会在while循环和中断程序之间来回切换。
2、进入中断服务程序前单片机会先保存下一条将要执行指令的地址,当中断返回后,单片机会自动转到主程序中,并且从之前保存的指令地址处取指令,然后再执行。每次中断都是这样,所以程序会在while循环和中断程序之间来回切换。

2020-01-15 广告
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
肯定是先执行while(1)循环,main ()中的只是计时器初始值初装而已
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先执行while程序啊,时间中断需要计数器到达时间后才能执行。
中断未执行前j=0;
j=j+8;
if(j==128)
这里有错误,128/8=3.5。
因此永远无法符合j==128,必须改为 if(j>=128) 才可以。
中断未执行前j=0;
j=j+8;
if(j==128)
这里有错误,128/8=3.5。
因此永远无法符合j==128,必须改为 if(j>=128) 才可以。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询