单片机入门-定时器
2023-06-29 00:48:55    35    0    0
admin

//1秒=1000毫秒(ms), 1毫秒=1/1000秒(s);
//1秒=1000000 微秒(μs), 1微秒=1/1000000秒(s);
//1秒=1000000000 纳秒(ns),1纳秒=1/1000000000秒(s);
//1秒=1000000000000皮秒 1皮秒==1/1000000000000秒。

 
//1MHZ=1000KHZ=1000000HZ
//24Mhz = 24000khz = 24000000hz
//1秒运行24000000次 = 1us运行 1000000/24000000 =0.4166666666。。。 次
 
//MCS51 (1机器周期 = 12时钟周期 )
//12Mhz时钟周期 = 1/12 us
//所以24Mhz时钟周期 = 1000000/24000000 us = 1/24 us
//24Mhz机器周期 = 12 * (1/24) us = 0.5us
 
//定时器0方式1(TMOD=0x01) 为16Bit 为1111111111111111 = 65536
//所以TH0=(65536-初值)%256 (FF-11111111);
//    TL0=(65536-初值)/256;

//例如用24M晶振做1ms定时计算如下:
//M/机器周期=初值;
// 1000us / 0.5us = 2000;
//所以:TH0=(65536-2000)%256;
//TL0=(65536-2000)/256;
//将65536-1000=63536化为16进制为:0xF830
//TH0=0xF8;
//TL0=0X30;

 下面给个示例:(1秒)更新一次数码管

 

#include <AT89S53.H>

char led_map[11]=
{0x81, 0xB7,0xC2, 0x92, 0xB4, 0x98, 0x88, 0xB3, 0x80, 0x90, 0xA0};
//0,1,2,3,4,5,6,7,8,9,A
unsigned long t=0;
unsigned char n=0;

void main()
{
 TMOD=0x01; 
 TH0=0xF8;
 TL0=0x30;
 ET0=1;
 EA=1;

TR0=1;
 while (1);

}

void timer0() interrupt 1
{  
 TH0 = 0xF8;
 TL0 = 0x30;

   t++;
 if (t==1000)
 {
  n++;
  if (n>9) n=0;
  P0=led_map[n];
  t=0;
 }

}

Pre: 管家婆千方食品注册服务器

Next: 管家婆辉煌软件键盘上面的快捷键

35

ICP备案号: 赣ICP备2020012703号-1

表格内容