51单片机用内部中断 1s一个中断C程序怎么写

51单片机用内部中断 1s一个中断C程序怎么写 误差越小越好 谢谢

假设你的外部晶振为12M(时钟频率为1M),用复合定时法,即把小值定时叠起来void t0() interrupt 1{中断服务程序;}主函数:TMOD=0x01; //设置为定时器0工作方式1for(t=20;t>0;t--){ TH0=(65536-50000)/256; TL0=(65536-50000)%256; //赋初值使一次定时为50ms TR0=1; //开定时器t0 while(!TF0); //等待置位 TR0=0; //关定时 TF0=0; //清标志位}TF0=1; //亲自置位TF0,是打开中断前提IE=0x82; //开允许位EA,ET0若想精确一些,由于中断置位的操作会花3~8个时钟周期;所以可把初值增大3~8,即TH0=(65536-49997)/256;TL0=(65536-49997)%256还可用编译软件调试(先设置外部晶振值为12M)测量延时时间
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-13
unsigned char a=0;void fun() interrupt 3 using 1
{
TH1=0X00;
TL1=0X00;
if(++a==16)a=0;
}晶振为12M的。注意a的定义一定要在中断函数外边定义。