×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-05-27 发布时间:
|
#include // 晶振为12MHz,

#include
#include
#include

   /***************************
*    定义硬件引脚连接
****************************/
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() interrupt 1
* 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计数器
   }



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会