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

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

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

sbit LED = P1^0;

/*---------------------T1初始化子函数------------------*/ void Timer1_init(void) { TMOD = 0x60; //1设定定时器1模式2,计数功能 TH1 = 0xfb; //设置计数器初值(计满溢出值-5) TL1 = 0xfb; ET1 = 1; EA = 1; TR1 = 1; //启动计数 }

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

void Timer1_int(void) interrupt 3 using 1 //定时计数T1中断服务程序 { LED = ~LED; }

/*---------------------主函数------------------*/ void main(void) //主函数 { Timer1_init(); //定时T1初始化 while(1) ; }

思考:用方式0实现。

例8.5 利用单片机定时器/计数器设计一个秒表,由P1口连接LED灯,采用BCD码显示,发光二极管亮表示1,暗则表示0,计满100s后从头开始,依次循环。利用一只按键控制秒表的启、停。利用复位键,返回初始工作状态。

解: 选用P1口作输出端,控制8只发光二极管显示,设发光二极管的驱动是低电平亮,高电平灭。P3.5接秒表的启、停按键。采用T0的方式0作定时器,12M晶振,分频系数为12,即定时时钟周期为1μS

汇编语言参考程序如下:

ORG 0000H LJMP MAIN ORG 000BH

LJMP Timer0_ISQ MAIN:

MOV TMOD,#00H ;T0方式1定时

MOV TH0,#3CH ;重新置T0 50ms定时的初值 MOV TL0,#0B0H

SETB ET0 SETB EA

MOV R3,#14H ;置50ms计数循环初值(1s/50ms)

MOV A, #00H ;计数显示初始化

CPL A ;满足低电平驱动要求

MOV P1,A

CPL A ;恢复秒表计数值 Check_Start_Button: JNB P3.5, Start

CLR TR0

SJMP Check_Start_Button Start:

SETB TR0

SJMP Check_Start_Button Timer0_ISQ:

DJNZ R3,Exit_Timer0_ISQ

ADD A, #01 ;秒表加1

DA A ;十进制调整 CPL A ;满足低电平驱动要求 MOV P1,A

CPL A ;恢复秒表计数值 MOV R3, #14H Exit_Timer0_ISQ: RETI

END

C51参考程序如下:

#include //包含52标准文件头 #define uchar unsigned char #define uint unsigned char uchar dat=0; //定义BCD计数单元(范围:0~99) uchar i; //定义循环变量 sbit key=P3^5; //定义按键

/*----------------------------T0初始化子函数--------------------------------*/ void Timer0_init(void) { TMOD = 0X00; //T0方式1 TH0 = (65535-50000)/256; //赋初始值,50ms TL0 = (65535-50000)%6; //赋初始值 ET0=1; EA=1; }

/*----------------------------T0中断服务子函数--------------------------------*/ void Timer0_int(void) interrupt 1 using 1 //T0中断服务子程序 { i++; if(i==20) //i=20时,计时1S { i = 0; dat++; f(dat==100) //计时到100S时,又从0开始 { dat=0; } } }

/*----------------------------启动子函数--------------------------------*/ void Start(void) //启动定时函数 {

if(key==0) { TR0=1; } else

//判断按键按下

//开始计时

{ TR0=0; } }

/*---------------------------BCD码转换子函数--------------------------------*/ uchar BCD(uchar BCDat) //BCD转换 { uchar x; x = (BCDat/10)*10+BCDat; return(x); }

/*--------------------------主函数--------------------------------*/ void main(void) { Timer0_init(); //T0初始化 while(1) { Start(); // 启动定时 P1 = ~(BCD(dat)); //送LED显示

} }

例8.6 编程在P3.0、P3.5、P3.4引脚上分别输出115.2KHZ、51.2KHZ、38.4KHZ的时钟信号。

解:设系统时钟频率为12 KHZ,T0、T1工作在方式2定时状态,且工作在无分频模式,即各定时器的定时脉冲频率等于时钟频率,即(T0x12)=(T1x12)=(T2x12)=1;各根据前面可编程时钟输出频率的计算公式,计算各定时器的定时初始值: (T2H)=FFH,(T2L)=CCH,(TH0)=(TL0)=8BH,( TH1)=(TL1)=64H

(1)汇编语言参考程序 T2H EQU D6H T2L EQU D7H AUXR EQU 8EH

INT_CLKO EQU 8FH

ORG 0000H

MOV TMOD,#22H ;T0、T1工作方式2定时状态

ORL AUXR,#80H ;T0工作在无分频模式 ORL AUXR,#40H ;T1工作在无分频模式 ORL AUXR,#04H ;T2工作在无分频模式

MOV T2H,#0FFH ;设置BRT定时器的初始值

MOV T2L,#0CCH

MOV TH0,#139 ;设置T0定时器的初始值 MOV TL0,#139

MOV TH1,#100 ;设置T1定时器的初始值 MOV TL1,#100

ORL INT_CLKO,#07H ;允许CLKOUT0、CLKOUT1、CLKOUT2时钟输出 SETB TR0 ;启动T0 SETB TR1 ;启动T1 ORL AUXR,#10H ;启动T2 SJMP $

(2)C51参考程序

#include

sfr INT_CLKO = 0x8F; sfr AUXR = 0x8E; sfr T2H = 0XD6; sfr T2L = 0Xd7;

main() {

TMOD = 0x22;

AUXR = (AUXR|0x80); //T0工作在无分频模式 AUXR = (AUXR|0x40) ; //T1工作在无分频模式 AUXR = (AUXR|0x04) ; //T2工作在无分频模式

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