这两天天在搞定时器定时1US的问题, 采用内部12M时钟频率,不分频,时钟周期应该是1/12us(大约83ns) ,理论上 初值 TL2= (65536-12)/256; TH2= (65536-12)%256; 但是实际测下来 进中断的时间约2.41us ,不解,网上发问 ,得到了airwill 版主的热心指点(估计是中断服务程序的延迟导致的.) ,再次谢谢
下面总结一下原因。在调试过程中,用逻辑分析仪测试了_nop_();指令的执行时间约为90ns一个时钟周期; P0_4 = 1;这条指令执行了250ns,对应的汇编指令是SETB P0_4(0x80.4) ,本以为这是单周期指令 只需要一个时钟周期,但是查看了数据手册 发现这条指令需要3个时钟周期 故执行了250ns是正确的。
中断程序响应时还要执行固有的程序,如程序计数器内容被压栈,相应的中断向量地址被载入程序计数器等