时钟、定时器的一个例子




<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>时钟、定时器</title>
<style type="text/css">
#clock{ height:20px; background:#000; color:#FFF}
</style>
</head>

<body>
<div id="clock"></div>
</body>
</html>
<script>
timer=null;
function myClock(){
  var d=new Date;
  var h=d.getHours();
  var m=d.getMonth();
  var s=d.getSeconds();
  var ms=d.getMilliseconds();
  var clock=document.getElementById('clock');
  clock.innerHTML=h+":"+m+":"+s+":"+ms;
  //timer=window.setTimeout(myClock,1000);
  //timer=window.setTimeout(arguments.callee,1000);//执行一次
  //arguments只能用在里面
  console.log(timer);
 }

 //myClock();
 clock.onclick=function(){
  if(timer){
   clearTimeout(timer);
   //clearInterval(timer);//通用
   timer=null;
   console.log(timer);
  
  }else{
   timer=window.setInterval(myClock,1000);
   }
  }
 //window.setInterval(myClock,1000);//不要写到里面,2的n次方了
</script>

### C51单片机时钟配置与定时器中断使用教程 #### 时钟配置 C51单片机的时钟源通常由外部晶振提供,其频率决定了系统的运行速度以及定时器的工作精度。标准的8051架构单片机默认采用12MHz晶振作为时钟源[^1]。然而,在实际应用中可以根据需求选择不同的晶振频率。 对于C51单片机而言,一个完整的机器周期等于12个振荡周期(即12分频)。这意味着如果使用的是12MHz晶振,则每个机器周期为1μs;如果是11.0592MHz晶振,则每个机器周期约为1.085μs[^2]。因此,在设计定时器功能之前,需先明确所使用的晶振频率及其对应的机器周期长度。 #### 定时器中断的基础原理 C51单片机内置有两个独立的16位加法计数器T0和T1,它们既可以被设置成定时模式也可以成为外部事件计数模式。当工作于定时方式下时,这两个计数器会依据内部时钟信号按一定规律累加直至溢出触发中断请求[^1]。 具体来说,每当经历一个机器周期之后,选定的定时器寄存器THx(高字节)TLx(低字节)x={0,1}便会自动递增一位直到最大值FFFFH为止发生溢出现象从而激活相应的TIEx标志位进而启动相应类型的ISR(interrupt service routine)[^2]。 以下是实现基本定时器中断的一个典型例子: ```c #include<reg51.h> void Timer_Init(void){ TMOD=0X01; // 设置 T0 工作在模式1 (16-bit timer) TH0=(65536-5000)/256;// 初使化定时常数 预设时间为5ms @12Mhz TL0=(65536-5000)%256; EA=1; // 开启全局中断 ET0=1; // 启用T0 中断允许 } void main(){ Timer_Init(); while(1); } //定义T0 的中断服务函数 void time_isr() interrupt 1{ static unsigned char count=0; count++; if(count>=200){ // 延迟约1秒 (假设每次进入此函数耗时5ms) P1_0=~P1_0; // 反相端口状态 实现LED闪烁效果 count=0; } } ``` 以上代码展示了如何初始化并利用T0来创建一个简单的延时循环结构并通过改变I/O引脚电平模拟LED灯闪动的效果[^1]。 #### 注意事项 - **精确度调整**:由于计算过程中可能存在误差所以在某些情况下可能需要微调初值以获得更精准的结果。 - **优先级管理**:如果有多个外设共享同一类别的中断资源则要考虑好各自的响应顺序以免造成冲突或者数据丢失等问题出现。 - **节能考虑**:合理安排空闲时段内的处理器活动有助于降低整体功耗延长电池寿命特别适用于便携式设备当中[^2].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值