首先你的Timer1是模式0(13位计数器),除非用很低频率的外部晶体,否则Timer1的定时时间根本就不是秒级。
其次你没有贴出 timerun 标志被修改的位置。如果你怀疑Timer1没有持续工作,可以暂时去掉if(timerun==1)条件,观察数码管是否每次都显示变化的值。
顺便说一句你的Timer0中断里面的语句效率低下,这不是一个健康的中断服务函数。中断服务函数是要力求简洁明快的。
你这中断设置有问题,TMOD=0x01;,这是定时器T0为方式1,T0为方式0,T0和T1到底是想要什么方式?T1是用方式0吗,为什么不用方式1或2。是不是想用T1为方式1呀,不用T0,那应该是TMOD=0x10; 而中断允许是外部中断EX0和T1,可是“外部中断解码程序”是定时器T0的呀。外部中断0应该定义成:void timer0(void) interrupt 0,这后面中断号必须是0。而定时器T0在程序中也没有使用啊。
定时器1为啥用模式0呢?