新闻中心

EEPW首页>嵌入式系统>设计应用> 51单片机1秒定时C语言程序(通过调试)

51单片机1秒定时C语言程序(通过调试)

作者: 时间:2016-11-17 来源:网络 收藏
#include // 晶振为12MHz,

#include
#include
#include

本文引用地址: //m.amcfsurvey.com/article/201611/315384.htm

/***************************
* 定义硬件引脚连接
****************************/
sbit p1_0=P1^0;
/*************************
* 定义全局变量
***********************/
// Byte data intrCounter; // 计时器中断次数
// Byte data beginNum; // 开始倒计时的时间
//Byte data counterBack; // 将中断次数放在里面以备后用
unsigned char intrCounter;
unsigned char beginNum;
unsigned char counterBack;
void IT0_Init(void);
void Timer0_Overflow();
void GetCounter(void);
void main()
{
p1_0=1;
GetCounter() ;每一秒改变一次;
p1_0=!p1_0;;
}
/*********************************
* GetCounter
*
* Description: 取得预先设置的倒计时时间
*******************************/
void GetCounter(void)
{
//beginNum=1;//在所有开关都没有拨动的时候倒计时为1秒,比设置为0秒要好
intrCounter=20;//每一秒对应的中断次数为20次
}
/*****************************
* IT0_Init
* Description: 初始化计时器T0的状态
********************************/
void IT0_Init(void)
{
TMOD=0x01;//设置T0在方式1下工作
TH0=0x3C;
TL0=0xAF;//这两个寄存器存的是计数器的计数开始的值,计算发现这两个值累加至溢出后正好是50ms
ET0=1;//使T0中断可以溢出
EA=1;//开启总中断
TF0=0;//溢出位清零
TR0=1;//开启T0
}

/******************************
* Timer0_Overflow()interrupt1
* Description: 中断溢出服务程序, 采用的是中断方式1, 后面最好不加using选择寄存器组以免与系统用在主程序的寄存器冲突

*********************************/
void Timer0_Overflow() interrupt 1
{
static unsigned char second=20;//用20次中断来判断1秒
TH0=0x3C;
TL0=0xAF;
second--;
intrCounter--;

if (second==0)//每隔一秒的操作
{

second=20;//重新赋值每秒计数器
}
if (intrCounter==0)
{
TR0=0;//关闭T0计数器
}



评论


技术专区

关闭