最新8STC15F2K60S2单片机的定时器计数器例题汇总Word文档下载推荐.docx
- 文档编号:13972314
- 上传时间:2022-10-16
- 格式:DOCX
- 页数:18
- 大小:20.90KB
最新8STC15F2K60S2单片机的定时器计数器例题汇总Word文档下载推荐.docx
《最新8STC15F2K60S2单片机的定时器计数器例题汇总Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《最新8STC15F2K60S2单片机的定时器计数器例题汇总Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。
Check_TF1:
JBCTF1,Timer1_Overflow;
查询计数溢出
SJMPCheck_TF1;
未到5mS继续计数
Timer1_Overflow:
CPLP1.0;
对P1.0取反输出
SJMPCheck_TF1;
未到1s继续循环
END
(2)中断方式实现:
ORG0000H
LJMPMAIN;
上电复位后,转MAIN
ORG001BH
LJMPTimer1_ISR;
T1中断响应后,转Timer1_ISR
ORG0100H
MAIN:
MOVTH1,#0ECH;
MOVTL1,#78H
SETBET1
SETBEA;
开放中断
SJMP$;
原地踏步,模拟主程序
Timer1_ISR:
RETI;
中断返回,回到主程序执行SJMP$
例8.2用定时/计数器扩展外部中断。
当实际应用系统中有两个以上的外部中断源,而片内定时/计数器未使用时,可利用定时/计数器来扩展外部中断源。
扩展方法是,将定时/计数器设置为计数器方式,计数初值设定为满程,将待扩展的外部中断源接到定时/计数器的外部计数引脚。
从该引脚输入一个下降沿信号,计数器加1后便产生定时/计数器溢出中断。
因此,可把定时/计数器的外部计数引脚作为扩展中断源的中断输入端。
设采用T1实现,采用工作方2,即TH1、TL1的初值均为FFH,T1中断开放,即T1引脚(P3.5)为扩展外部中断的中断请求信号输入端,触发方式为下降沿触发。
其初始化程序(中断方式)如下:
LJMPEX_ISR;
T1中断响应后,转EX_ISR
MOVTMOD,#60H;
设T1为方式1计模式
MOVTH1,#0FFH
MOVTL1,#0FFH
SETBTR1;
……;
主程序其它指令
……
EX_ISR:
扩展外部中断的中断服务程序
RETI
END
思考:
试将例8.2的功能用T0或T1的方式0实现。
例8.3使信号灯循环点亮,首先按从左至右轮流点亮,再按从右至左轮流点亮,每个信号灯点亮的时间间隔为1秒。
要求用单片机定时/计数器定时实现。
解:
硬件电路比较简单,采用P1口输出驱动电平,低电平有效。
电路如图8.7所示。
图8.7流水灯显示电路
系统采用12M晶振,分频系数为12,即定时时钟周期为1μS;
采用定时器T1方式0定时50mS,用R3做50ms计数单元,20次50mS定时即为1S,故R3的初始值为20。
汇编语言参考程序如下:
1)查询方式实现
LOOP:
MOVR2,#07H;
设置左移的次数
MOVA,#0FEH;
设置信号灯的显示(左移)的起始状态值
Left_Shift:
MOVP1,A;
送显示控制信号
LCALLDELAY;
利用软件与定时器,实现1s定时
RLA;
改变信号灯显示状态,左移
DJNZR2,Left_Shift;
判断左移流程是否结束,若结束,转入右移控制
MOVA,#7FH;
设置信号灯的显示(右移)的起始状态值,可省略
设置右移的次数
Right_Shift:
MOP1,A;
RRA;
改变信号灯显示状态,右移
LCALLDELAY;
DJNZR2,Right_Shift;
判断左移流程是否结束,若结束,又重新开始
SJMPLOOP
DELAY:
MOVR3,#20;
置50ms计数循环初值
设定时器1为方式1
MOVTH1,#3CH;
置定时器初值
MOVTL1,#0B0H
SETBTR1;
JBCTF1,Timer1_Overflow;
SJMPCheck_TF1;
未到50ms继续计数
DJNZR3,Check_TF1;
CLRTR1;
关闭T1
RET;
返回主程序
2)中断方式实现
LJMPMAIN
ORG001BH
LJMPTimer1_ISR
MOVR3,#20;
MOVTMOD,#00H;
置50ms定时器初值
MOVTL1,#0B0H
MOVR2,#07H;
MOVP1,#0FEH;
CLR00H;
设置左、右移标志位,为0左移,为1右移
SETBET1
SETBEA
SETPTR1;
启动T1定时器
Timer1_ISR:
DJNZR3,Exit_Timer1_ISR;
定时时间到,执行移位,否则中断结束
MOVR3,#20
JB00H,Right_Shift;
判断左、右移控制
左移控制
MOVP1,A
DJNZR2,Exit_Timer1_ISR;
SETB00H;
置位左、右移控制标志
MOVR2,#07H;
重新设置移位次数
SJMPExit_Timer1_ISR
RRA;
右移控制
CLR00H;
清0左、右移控制标志
Exit_Timer1_ISR:
C51参考程序如下:
#include<
REG51.H>
//包含52标准文件头
intrins.h>
//包含循环左移、右移子函数
#defineucharunsignedchar
#defineuintunsignedint
ucharLED=0xfe;
/*---------------------利用T1实现定时的子函数------------------*/
voidDELAY(void)//延时函数1S
{
uinti=0;
TMOD=0x00;
//T1工作模式1
TH1=0x3c;
TL1=0xb0;
TR1=1;
while(i<
20)
{
if(TF1==1)//查询T1溢出标志
{
TF1=0;
i++;
}
}
}
/*---------------------循环左移子函数------------------*/
voidLeft_Shift(void)
P1=LED;
DELAY();
//延时一秒
LED=_crol_(LED,1);
//循环左移一位
/*---------------------循环右移子函数------------------*/
voidRight_Shift(void)
LED=_cror_(LED,1);
//循环右移一位
/*---------------------主函数------------------*/
voidmain(void)
ucharj;
while
(1)
for(j=0;
j<
7;
j++)
Left_Shif();
for(j=0;
Right_Shift();
}
2)中断方式实现
REG52.H>
#defineuintunsignedchar
/*---------------------定义全局变量------------------*/
uchari=0;
uchart=0;
/*---------------------T1初始化子函数------------------*/
voidTimer1_init(void)
TMOD=0x00;
ET1=1;
EA=1;
/*---------------------LED循环显示子函数------------------*/
voidShift(void)
t++;
if(t<
=7)
LED=_crol_(LED,1);
elseif(t<
15)
LED=_cror_(LED,1);
else{t=0;
/*--------------------T1中断服务子函数------------------*/
voidTimer1_int(void)interrupt3using1//定时T1中断服务程序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 STC15F2K60S2 单片机 定时器 计数器 例题 汇总