好文档 - 专业文书写作范文服务资料分享网站

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

天下 分享 时间: 加入收藏 我要投稿 点赞

第8章STC15F2K60S2单片机的定时/计数器

例题

例8.1 用T1方式0实现定时,在P1.0引脚输出周期为10mS的方波。 解: 根据题意,采用T1方式0进行定时,因此,(TMOD)=00H。

因为方波周期是10mS,因此T1的定时时间应为5mS,每5mS时间到就对P1.0取反,就可实现在P1.0引脚输出周期为10mS的方波。系统采用12M晶振,分频系数为12,即定时脉钟周期为1μS,则T1的初值为:

X = M ?计数值= 65536 ? 5000 = = 60536 =EC78H

即:TH1 = ECH,TL1 = 78H。 (1)查询方式实现:

ORG 0000H

MOV TMOD,#00H ;设T1为方式0定时模式

MOV TH1,#0ECH ;置5mS定时的初值 MOV TL1,#78H SETB TR1 ;启动T1 Check_TF1: JBC TF1,Timer1_Overflow ;查询计数溢出

SJMP Check_TF1 ;未到5mS继续计数 Timer1_Overflow:

CPL P1.0 ;对P1.0取反输出 SJMP Check_TF1 ;未到1s继续循环 END (2)中断方式实现: ORG 0000H

LJMP MAIN ;上电复位后,转MAIN ORG 001BH

LJMP Timer1_ISR ;T1中断响应后,转 Timer1_ISR ORG 0100H MAIN:

MOV TMOD,#00H ;设T1为方式0定时模式 MOV TH1,#0ECH ;置5mS定时的初值

MOV TL1,#78H SETB ET1 154

SETB EA ;开放中断 SETB TR1 ;启动T1 SJMP $ ;原地踏步,模拟主程序 Timer1_ISR:

CPL P1.0 ;对P1.0取反输出 RETI ;中断返回,回到主程序执行 SJMP $ END

155

例8.2 用定时/计数器扩展外部中断。

解:当实际应用系统中有两个以上的外部中断源,而片内定时/计数器未使用时,可利用定时/计数器来扩展外部中断源。扩展方法是,将定时/计数器设置为计数器方式,计数初值设定为满程,将待扩展的外部中断源接到定时/计数器的外部计数引脚。从该引脚输入一个下降沿信号,计数器加1后便产生定时/计数器溢出中断。因此,可把定时/计数器的外部计数引脚作为扩展中断源的中断输入端。

设采用T1实现,采用工作方2,即TH1、TL1的初值均为FFH,T1中断开放,即T1引脚(P3.5)为扩展外部中断的中断请求信号输入端,触发方式为下降沿触发。其初始化程序(中断方式)如下:

ORG 0000H

LJMP MAIN ;上电复位后,转MAIN ORG 001BH

LJMP EX_ISR ;T1中断响应后,转 EX_ISR ORG 0100H MAIN:

MOV TMOD,#60H ;设T1为方式1计模式

MOV TH1,#0FFH MOV TL1,#0FFH SETB ET1 SETB EA ;开放中断 SETB TR1 ;启动T1

… … ;主程序其它指令 … … EX_ISR:

… … ;扩展外部中断的中断服务程序

… … RETI END

思考:试将例8.2的功能用T0或T1的方式0实现。

156

例8.3 使信号灯循环点亮,首先按从左至右轮流点亮,再按从右至左轮流点亮,每个信号灯点亮的时间间隔为1秒。要求用单片机定时/计数器定时实现。

解:硬件电路比较简单,采用P1口输出驱动电平,低电平有效。电路如图8.7所示。

图8.7 流水灯显示电路

系统采用12M晶振,分频系数为12,即定时时钟周期为1μS;采用定时器T1方式0定时50mS,用R3做50ms计数单元,20次50mS定时即为1S,故R3的初始值为20。 汇编语言参考程序如下: 1)查询方式实现

ORG 0000H

LOOP:

MOV R2,#07H ;设置左移的次数

MOV A,#0FEH ;设置信号灯的显示(左移)的起始状态值 Left_Shift:

MOV P1,A ;送显示控制信号

LCALL DELAY ;利用软件与定时器,实现1s定时 RL A ; 改变信号灯显示状态,左移 DJNZ R2,Left_Shift ;判断左移流程是否结束,若结束,转入右移控制 MOV A,#7FH ;设置信号灯的显示(右移)的起始状态值,可省略 MOV R2,#07H ;设置右移的次数 Right_Shift:

MO P1,A ;送显示控制信号

RR A ; 改变信号灯显示状态,右移 LCALL DELAY ;利用软件与定时器,实现1s定时 DJNZ R2,Right_Shift ;判断左移流程是否结束,若结束,又重新开始 SJMP LOOP DELAY:

157

MOV R3,#20 ;置50ms计数循环初值

MOV TMOD,#00H ;设定时器1为方式1 MOV TH1,#3CH ;置定时器初值 MOV TL1,#0B0H SETB TR1 ;启动T1 Check_TF1:

JBC TF1,Timer1_Overflow ;查询计数溢出 SJMP Check_TF1 ;未到50ms继续计数 Timer1_Overflow:

DJNZ R3,Check_TF1 ;未到1s继续循环 CLR TR1 ;关闭T1 RET ;返回主程序 END

2)中断方式实现

ORG 0000H LJMP MAIN

ORG 001BH

LJMP Timer1_ISR

MAIN:

MOV R3,#20 ;置50ms计数循环初值 MOV TMOD,#00H ;设定时器1为方式1 MOV TH1,#3CH ;置50ms定时器初值 MOV TL1,#0B0H

MOV R2,#07H ;设置左移的次数

MOV P1,#0FEH ;设置信号灯的显示(左移)的起始状态值 MOV A,#0FEH ;设置信号灯的显示(左移)的起始状态值

CLR 00H ;设置左、右移标志位,为0左移,为1右移 SETB ET1 SETB EA

SETP TR1 ;启动T1定时器

SJMP $ ;原地踏步,模拟主程序 Timer1_ISR:

DJNZ R3,Exit_Timer1_ISR ;定时时间到,执行移位,否则中断结束

MOV R3, #20

JB 00H, Right_Shift ;判断左、右移控制 RL A ;左移控制 MOV P1, A

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

SETB 00H ;置位左、右移控制标志 158

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

第8章STC15F2K60S2单片机的定时/计数器例题例8.1用T1方式0实现定时,在P1.0引脚输出周期为10mS的方波。解:根据题意,采用T1方式0进行定时,因此,(TMOD)=00H。因为方波周期是10mS,因此T1的定时时间应为5mS,每5mS时间到就对P1.0取反,就可实现在P
推荐度:
点击下载文档文档为doc格式
0qh3l0izol2xn8u9whcj4n25q6nxtf004iq
领取福利

微信扫码领取福利

微信扫码分享