您的位置 首页 电源

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

#includereg52.h>//晶振为12MHz,#includestdio.h>#includeabsacc.h>#includeintrins.h>/*********

#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计数器
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/268161.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部