请教单片机中断问题

[复制链接]
 楼主| 所谓me 发表于 2009-4-30 13:04 | 显示全部楼层 |阅读模式
在看郭天祥单片机视频时发现关于中断的一个问题,一直搞不明白,特向大家请教:<br />80c51的编程,程序如下:<br />#include&ltreg52.h&gt<br />#include&ltintrins.h&gt<br />#define&nbsp;uint&nbsp;unsigned&nbsp;int<br />#define&nbsp;uchar&nbsp;unsigned&nbsp;char<br />uchar&nbsp;temp,aa,num;<br />sbit&nbsp;dula=P2^6;<br />sbit&nbsp;wela=P2^7;<br />uchar&nbsp;code&nbsp;table[]={<br />0x3f,0x06,0x5b,0x4f,<br />0x66,0x6d,0x7d,0x07,<br />0x7f,0x6f,0x77,0x7c,<br />0x39,0x5e,0x79,0x71};<br />void&nbsp;delay(uint&nbsp;z);<br />void&nbsp;main()<br />{<br />&nbsp;num=0;<br />&nbsp;aa=0;<br />&nbsp;TMOD=0x01;<br />&nbsp;TH0=(65536-50000)/256;<br />&nbsp;TL0=(65536-50000)%256;<br />&nbsp;EA=1;<br />&nbsp;ET0=1;<br />&nbsp;TR0=1;<br />&nbsp;temp=0xfe;<br />&nbsp;P1=temp;<br />&nbsp;dula=1;<br />&nbsp;P0=table[0];<br />&nbsp;dula=0;<br />&nbsp;wela=1;<br />&nbsp;P0=0xc0;<br />&nbsp;wela=0;<br />&nbsp;while(1)<br />&nbsp;{<br />&nbsp;&nbsp;delay(1000);<br />&nbsp;&nbsp;temp=_crol_(temp,1);<br />&nbsp;&nbsp;P1=temp;<br />&nbsp;&nbsp;if(aa==40)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;aa=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;num++;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(num==16)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;dula=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;P0=table[num];<br />&nbsp;&nbsp;&nbsp;&nbsp;dula=0;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;}<br />}<br />void&nbsp;delay(uint&nbsp;z)<br />{<br />&nbsp;uint&nbsp;x,y;<br />&nbsp;for(x=z;x&gt0;x--)<br />&nbsp;&nbsp;for(y=110;y&gt0;y--);<br />}<br />void&nbsp;timer0()&nbsp;interrupt&nbsp;1&nbsp;<br />{<br />&nbsp;TH0=(65536-50000)/256;<br />&nbsp;TL0=(65536-50000)%256;<br />&nbsp;aa++;<br />&nbsp;&nbsp;<br />}<br /><br />本程序实现的功能是流水灯运行的同时,数码管也在不断显示数字。<br />如果使用上面的程序的话,单独运行流水灯是正确的,单独运行数码管是正确的,可是放在一起确实流水灯正常运行,可是数码管却很长时间才改变一下显示数字。<br />而如果把主函数中的if语句放入中断函数中,程序就正常运行了。<br />在此向大家请教一下原因,希望帮忙详细分析一下&nbsp;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部