T0设置错误:定时器模式2是8位自动重载,最大定时时间256us,超过255部分溢出无效。也有可能是软件模拟的问题。 |
.不会2.因为在默认情况下(即每次单片机复位时),中断优先级寄存器ip为xxx0 0000b,未设置ip时,所有中断都是同等级的! |
不一定 protues仿真软件 本身也存在一些问题 建议用最新版本 |
把 if(count==3000)改成 if(count>=3000)试试,主循环怎么能那么巧判断到3000,如果你正在送显示时中断计数可能超过3000了 |
7358655 发表于 2019-3-18 22:14 TMOD=0x02; TH0=0x14; TL0=0x00; IE=0x82; TR0=1; 应该不是T0的问题吧?我改成这样了。 我的问题是T1没有生效?T0是正常的。 |
wulin 发表于 2019-3-18 20:53 我不是很明白,这里T0是给ADC0808做时钟脉冲输入端的,从检测结果来看,是可以检测到模拟值的。 问题是T1好像没有生效。 我用T1来控制报警指示和保存临时电压值。这个if(count==3000)总是不能成立。 |
不是优先级导致 TMOD=0x02; 模式0000 0010 你选模式2 八位自动装载你看你赋值还不一样 TH0=(65536-3500)/256; //0x14; TL0=(65536-3500)%256; //0x00; 再看你中断,又给赋值 void Time1() interrupt 3 using 0 //“interrupt”声明函数为中断服务函数 //其后的3为定时器T1的中断编号;0表示使用第0组工作寄存器 { count++; //自加1 每次1ms TH1=(65536-1000)/256; //定时器T1的高8位重新赋初值 TL1=(65536-1000)%256; //定时器T1的高8位重新赋初值 } 估计问题出在此处 |
T0设置错误:定时器模式2是8位自动重载,最大定时时间256us,超过255部分溢出无效,你这样设置的结果是定时14us。 |