第一范文网 - 专业文章范例文档资料分享平台

8STC15F2K60S2单片机的定时器计数器例题

来源:用户分享 时间:2025/6/6 12:31:17 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

MOV R2, #07H ;重新设置移位次数 SJMP Exit_Timer1_ISR Right_Shift:

RR A ;右移控制 MOV P1, A

DJNZ R2,Exit_Timer1_ISR ;判断左移流程是否结束,若结束,转入右移控制

CLR 00H ;清0左、右移控制标志 MOV R2, #07H ;重新设置移位次数 Exit_Timer1_ISR: RETI

END

C51参考程序如下: 1)查询方式实现

#include //包含52标准文件头

#include //包含循环左移、右移子函数 #define uchar unsigned char #define uint unsigned int uchar LED = 0xfe;

/*---------------------利用T1实现定时的子函数------------------*/ void DELAY(void) //延时函数 1S { uint i = 0;

TMOD = 0x00; //T1工作模式1 TH1 = 0x3c; TL1 = 0xb0; TR1 = 1; while(i<20) { if(TF1==1) //查询T1溢出标志 { TF1 = 0; i++; } } }

/*---------------------循环左移子函数------------------*/ void Left_Shift(void)

{ P1 = LED; DELAY(); //延时一秒 LED = _crol_(LED,1); //循环左移一位 }

/*---------------------循环右移子函数------------------*/ void Right_Shift(void) { LED = _cror_(LED,1); //循环右移一位 P1 = LED; DELAY(); //延时一秒 }

/*---------------------主函数------------------*/ void main(void) { uchar j; while(1) { for(j=0;j<7;j++) { Left_Shif (); } for(j=0;j<7;j++) { Right_Shift (); } } }

2)中断方式实现

#include //包含52标准文件头

#include //包含循环左移、右移子函数 #define uchar unsigned char #define uint unsigned char

/*---------------------定义全局变量------------------*/ uchar LED = 0xfe; uchar i = 0; uchar t = 0;

/*---------------------T1初始化子函数------------------*/ void Timer1_init(void) { TMOD = 0x00; //T1工作模式1 TH1 = 0x3c; TL1 = 0xb0; ET1 = 1; EA = 1; TR1 = 1; }

/*---------------------LED循环显示子函数------------------*/ void Shift(void) { P1 = LED; t++; if(t<=7) { LED = _crol_(LED,1); //循环左移一位 } else if(t<15) { LED = _cror_(LED,1); //循环右移一位 } else {t = 0;} }

/*--------------------T1中断服务子函数------------------*/

void Timer1_int(void) interrupt 3 using 1 //定时T1中断服务程序 { i++; f(i==20) { i = 0; Shift (); } }

/*--------------------主函数------------------*/ void main(void) //主函数 { Timer1_init(); //T1初始化

}

while(1) ;

例8.4 连续输入5个单次脉冲使单片机控制的LED灯状态翻转一次。要求用单片机定时/计数器计数功能实现实现。 解:采用T1实现,硬件如图8.8所示。

图8.8 信号灯的计数控制

采用T1的方式2的计数方式,初始值设置为FBH,当输入5个脉冲时,即溢出标志TF1,通过查询TF1或中断方式判断TF1标志,进而对P1.0LED灯进行控制。 汇编语言参考程序如下 : 1)查询方式实现

ORG 0000H

MOV TMOD, #60H ;设定定时器1模式2,计数功能 MOV TH1, #0FBH

MOV TL1, #0FBH ;设置计数器初值(256-5) SETB TR1 ;启动计数 Check_TF1:

JBC TF1, Timer1_Overflow ;查询是否计数溢出 AJMP Check_TF1 Timer1_Overflow:

CPL P1.0 ;当统计5个脉冲,LED灯状态翻转

AJMP Check_TF1 END

2)中断方式实现 ORG 0000H AJMP MAIN ORG 001BH

AJMP Timer1_ISR

MAIN: MOV TMOD, #60H ;设定定时器1模式2,计数功能

MOV TH1, #0FBH

MOV TL1, #0FBH ;设置计数器初值(256-5)

SETB ET1 SETB EA

SETB TR1 ;启动计数 SJMP $ Timer1_ISR: CPL P1.0 ;当统计5个脉冲,LED灯状态翻转

RETI END

C51参考程序如下: 1)查询方式实现 #include sbit led = P1^0;

void timer_initial(void) { TMOD = 0x60; //设定定时器1模式2,计数功能 TH1 = 0xfb; //5个脉冲以后溢出 TL1 = 0xfb; TR1 = 1; //开始计数器 }

void main(void) { timer_initial();

while(1) { while(TF1==0);

TF1 = 0;

Led = ~led; //不断查询是否溢出,没有溢出,就等待溢出了;溢出了,

//清空溢出标志,led取反

}

}

2)中断方式实现 #include

#define uchar unsigned char #define uint unsigned char

8STC15F2K60S2单片机的定时器计数器例题.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c2fqkf8gjgk7916095eiv3gyk618jli007yr_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top