打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
MCS-51系列单片机C语言编程定时/计数器程序模板
 xiashan 发表于 2015-4-5 17:10:51 | 只看该作者 
/*********************************************************************************************
函数名:定时/计数器初始化函数
调  用:T_C_init();
参  数:无
返回值:无
结  果:设置SFR中T/C1和(或)T/C0相关参数
备  注:本函数控制T/C1和T/C0,不需要使用的部分可用//屏蔽
/**********************************************************************************************/
void T_C_init (void){
TMOD = 0x11; //高4位控制T/C1 [ GATE,C/T,M1,M0,GATE,C/T,M1,M0 ]
EA = 1; //中断总开关
TH1 = 0xFF; //16位计数寄存器T1高8位(写入初值)
TL1 = 0xFF; //16位计数寄存器T1低8位
ET1 = 1; //T/C1中断开关
TR1 = 1; //T/C1启动开关
//TH0 = 0x3C; //16位计数寄存器T0高8位
//TL0 = 0xB0; //16位计数寄存器T0低8位(0x3CB0 = 50mS延时)
//ET0 = 1; //T/C0中断开关
//TR0 = 1; //T/C0启动开关
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:定时/计数器1中断处理函数
调  用:[T/C1溢出后中断处理]
参  数:无
返回值:无
结  果:重新写入16位计数寄存器初始值,处理用户程序
备  注:必须允许中断并启动T/C本函数方可有效,重新写入初值需和T_C_init函数一致
/**********************************************************************************************/
void T_C1 (void) interrupt 3  using 3{ //切换寄存器组到3
TH1 = 0x3C; //16位计数寄存器T1高8位(重新写入初值)
TL1 = 0xB0; //16位计数寄存器T1低8位(0x3CB0 = 50mS延时)
//函数内容
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:定时/计数器0中断处理函数
调  用:[T/C0溢出后中断处理]
参  数:无
返回值:无
结  果:重新写入16位计数寄存器初始值,处理用户程序
备  注:必须允许中断并启动T/C本函数方可有效,重新写入初值需和T_C_init函数一致
/**********************************************************************************************/
void T_C0 (void) interrupt 1  using 1{ //切换寄存器组到1
TH0 = 0x3C; //16位计数寄存器T0高8位(重新写入初值)
TL0 = 0xB0; //16位计数寄存器T0低8位(0x3CB0 = 50mS延时)
//函数内容
}
/**********************************************************************************************/
/*********************************************************************************************
程序名:    定时计数器中断处理程序
硬件支持:  STC12C2052AD 12MHz
接口说明:  P1接口8个LED灯
/*********************************************************************************************
说明:本程序可使单片机P1.0、P1.1接口上的LED灯分别以定时器T0和T1的各自周期闪烁。
P1.0 由 T0 控制
P1.1 由 T1 控制
/*********************************************************************************************/
#include <REG51.h> //通用89C51头文件
sbit LED1 = P1 ^ 0; //定义闪烁LED
sbit LED2 = P1 ^ 1; //定义闪烁LED
/*********************************************************************************************
函数名:定时/计数器初始化函数
调  用:T_C_init();
参  数:无
返回值:无
结  果:设置SFR中T/C1和(或)T/C0相关参数
备  注:本函数控制T/C1和T/C0,不需要使用的部分可用//屏蔽
/**********************************************************************************************/
void T_C_init (void){
TMOD = 0x11; //高4位控制T/C1 [ GATE,C/T,M1,M0,GATE,C/T,M1,M0 ]
EA = 1; //中断总开关
TH1 = 0xFE; //16位计数寄存器T1高8位(写入初值)
TL1 = 0xFE; //16位计数寄存器T1低8位
ET1 = 1; //T/C1中断开关
TR1 = 1; //T/C1启动开关
TH0 = 0x13; //16位计数寄存器T0高8位
TL0 = 0x13; //16位计数寄存器T0低8位(0x3CB0 = 50mS延时)
ET0 = 1; //T/C0中断开关
TR0 = 1; //T/C0启动开关
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:定时/计数器1中断处理函数
调  用:[T/C1溢出后中断处理]
参  数:无
返回值:无
结  果:重新写入16位计数寄存器初始值,处理用户程序
备  注:必须允许中断并启动T/C本函数方可有效,重新写入初值需和T_C_init函数一致
/**********************************************************************************************/
void T_C1 (void) interrupt 3  using 3{ //切换寄存器组到3
TH1 = 0xFE; //16位计数寄存器T1高8位(重新写入初值)
TL1 = 0xFE; //16位计数寄存器T1低8位
LED2 = ~LED2;  //取LED相反状态
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:定时/计数器0中断处理函数
调  用:[T/C0溢出后中断处理]
参  数:无
返回值:无
结  果:重新写入16位计数寄存器初始值,处理用户程序
备  注:必须允许中断并启动T/C本函数方可有效,重新写入初值需和T_C_init函数一致
/**********************************************************************************************/
void T_C0 (void) interrupt 1  using 1{ //切换寄存器组到1
TH0 = 0x13; //16位计数寄存器T0高8位(重新写入初值)
TL0 = 0x13; //16位计数寄存器T0低8位
LED1 = ~LED1;  //取LED相反状态
}
/**********************************************************************************************/
/*********************************************************************************************/
void main (void){ //主程序
T_C_init(); //初始化
while(1){
}
}
/*********************************************************************************************/
1. 定时/计数器程序应考虑系统时钟频率,本实验以12.000MHz晶体为例。
2. 定时/计数器程序需要考虑机械周期,STC系列1T单片机在默认设置时与12T单片机性能兼容。
3. 定时/计数器程序在中断处理时将不暂时关闭其他中断。
[SFR中与定时/计数器工作方式有关的设计]
-----------------------------------------------------------------------------
M1   M0   方式    说明
0       0        0           13位T/C,由TL低5位和TH的8位组成13位计数器
0       1        1           16位T/C,TL和TH共16位计数器
1       0        2            8位T/C,TL用于计数,当TL溢出时将TH中的值自动写入TL
1       1        3            两组8位T/C
-----------------------------------------------------------------------------
可将其模板下载到本地硬盘,在编写新程序的时候复制、粘贴到工程当中,然后根据情况写入具体内容。
单片机计数器寄存器C语言程序
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
单片机定时器/计数器
单片机与控制实验(4)——步进电机原理及应用
51单片机定时/计数器使用方法
【转】51单片机定时器应用(C程序)
计时器
51单片机自学教程(5)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服