标题: 51单片机定时器实验例程 [打印本页]

作者: 大魔法师拉克丝    时间: 2017-6-1 19:20
标题: 51单片机定时器实验例程

#include <reg52.h>
#include <intrins.h>
#define FOSC 11059200L //晶振设置,默认使用11.0592M Hz
//#define FOSC 12000000L //晶振设置,使用12M Hz
//#define FOSC 24000000L //晶振设置,使用24M Hz
#define TIME_MS 10 //设定定时时间 ms ,在11.0592M晶振下,不易超过60ms
//IO接口定义
sbit LED = P1^0;
//全局变量定义
unsigned char count=0;
/*******************************************************************************
* 函 数 名 :Delayms
* 函数功能 :实现 ms级的延时
* 输    入 :ms
* 输    出 :无
*******************************************************************************/
void Delayms(unsigned int ms)
{
unsigned int i,j;
for(i=0;i<ms;i++)
#if FOSC == 11059200L
  for(j=0;j<114;j++);
#elif FOSC == 12000000L
   for(j=0;j<123;j++);
#elif FOSC == 24000000L
  for(j=0;j<249;j++);
#else
  for(j=0;j<114;j++);
#endif
}
/*******************************************************************************
* 函 数 名 :Timer0Init
* 函数功能 :定时器0初始化
* 输    入 :无
* 输    出 :无
*******************************************************************************/
void Timer0Init()
{
TMOD=0x01; //设置定时器0工作方式为1
TH0=(65536-FOSC/12/1000*TIME_MS)/256;
TL0=(65536-FOSC/12/1000*TIME_MS)%256;
ET0=1; //开启定时器0中断
TR0=1; //开启定时器
EA=1;  //打开总中断
}
/*******************************************************************************
* 函 数 名 :main
* 函数功能 :主函数
* 输    入 :无
* 输    出 :无
*******************************************************************************/
void main()
{
Timer0Init();

while(1)
{
}
}
/*******************************************************************************
* 函 数 名 :Timer0Int
* 函数功能 :定时器0中断函数 , 每隔TIME_MS ms进入
* 输    入 :无
* 输    出 :无
*******************************************************************************/
void Timer0Int() interrupt 1
{
TH0=(65536-FOSC/12/1000*TIME_MS)/256;
TL0=(65536-FOSC/12/1000*TIME_MS)%256;
count++;
if(count == 100)//1s
{
  LED = !LED;//LED灯闪速
  count = 0;
}
}







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1