当前位置:文档之家› 定时器程序

定时器程序

定时器程序
定时器程序

#include

#define uchar unsigned char

#define uint unsigned int

sbit LED=P0^0;

uchar T_Count=0;

void main()

{ TMOD=0x00; //定时器0 工作方式0

TH0=(8192-5000)/32; //5ms 定时

TL0=(8192-5000)%32;

IE=0x82; //允许T0 中断

TR0=1;

while(1); } //T0 中断函数

void LED_Flash() interrupt 1 {

TH0=(8192-5000)/32; //恢复初值

TL0=(8192-5000)%32;

if(++T_Count==100) //0.5s 开关一次LED {

LED=~LED;

T_Count=0; } }

28 TIMER0 控制流水灯

#include

#include

#define uchar unsigned char

#define uint unsigned int

void main() {

uchar T_Count=0;

P0=0xfe;

P2=0xfe;

TMOD=0x01; //定时器0 工作方式1 TH0=(65536-40000)/256; //40ms 定时TL0=(65536-40000)%256;

TR0=1; //启动定时器

while(1) {

if(TF0==1)

{

TF0=0;

TH0=(65536-40000)/256; //恢复初值TL0=(65536-40000)%256;

if(++T_Count==5)

{ P0=_crol_(P0,1);

P2=_crol_(P2,1); T_Count=0;

} } } }

29 定时器控制4 个LED 滚动闪烁#include

#define uchar unsigned char

#define uint unsigned int

sbit B1=P0^0;

sbit G1=P0^1;

sbit R1=P0^2;

sbit Y1=P0^3;

uint i,j,k;

//主程序

void main() {

i=j=k=0;

P0=0xff;

TMOD=0x02; //定时器0 工作方式2 TH0=256-200; //200us 定时

TL0=256-200;

IE=0x82;

TR0=1; //启动定时器

while(1);

}

//T0 中断函数

void LED_Flash_and_Scroll() interrupt 1

{

if(++k<35) return; //定时中断若干次后执行闪烁k=0;

switch(i)

{

case 0: B1=~B1;break;

case 1: G1=~G1;break;

case 2: R1=~R1;break;

case 3: Y1=~Y1;break;

default:i=0;

}

if(++j<300) return; //每次闪烁持续一段时间

j=0;

P0=0xff; //关闭显示

i++; //切换到下一个LED }

30 T0 控制LED 实现二进制计数

#include

//主程序

void main() {

TMOD=0x05; //定时器0 为计数器,工作方式1,最大计数值65535

TH0=0; //初值为0

TL0=0;

TR0=1; //启动定时器

while(1) {

P1=TH0;

P2=TL0; } }

31 TIMER0 与TIMER1 控制条形LED

#include

#include

#define uchar unsigned char

#define uint unsigned int

uchar tc0=0,tc1=0;

//主程序

void main()

{

P0=0xfe;

P2=0xfe;

TMOD=0x11; //定时器0、定时器1 均工作于方式1

TH0=(65536-15000)/256; //定时器0:15ms

TL0=(65536-15000)%256;

TH1=(65536-50000)/256; //定时器1:50ms TL1=(65536-50000)%256;

IE=0x8a;

TR0=1; //启动定时器

TR1=1;

while(1); }

//T0 中断函数

void Time0() interrupt 1 {

TH0=(65536-15000)/256; //恢复定时器0 初值TL0=(65536-15000)%256;

if(++tc0==10) //150ms 转换状态{

tc0=0;

P0=_crol_(P0,1); } }

//T1 中断函数

void Time1() interrupt 3 {

TH0=(65536-50000)/256; //恢复定时器1 初值TL0=(65536-50000)%256;

if(++tc1==10) //500ms 转换状态{ tc1=0;

P2=_crol_(P2,1); } }

32 10s 的秒表

#include

#define uchar unsigned char

#define uint unsigned int

sbit K1=P3^7;

uchar

i,Second_Counts,Key_Flag_Idx;

bit Key_State;

uchar

DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x 7f,0x6f};

//延时

void DelayMS(uint ms) { uchar t;

while(ms--) for(t=0;t<120;t++); }

//处理按键事件

void Key_Event_Handle() {

if(Key_State==0) {

Key_Flag_Idx=(Key_Flag_Idx+1)%3;

switch(Key_Flag_Idx) {

case 1: EA=1;ET0=1;TR0=1;break;

case 2: EA=0;ET0=0;TR0=0;break;

case 0: P0=0x3f;P2=0x3f;i=0;Second_Counts=0; } } } //主程序

void main() { P0=0x3f; //显示00

P2=0x3f;

i=0;

Second_Counts=0;

Key_Flag_Idx=0; //按键次数(取值0,1,2,3)

Key_State=1; //按键状态

TMOD=0x01; //定时器0 方式1

TH0=(65536-50000)/256; //定时器0:50ms

TL0=(65536-50000)%256;

while(1) { if(Key_State!=K1) {

DelayMS(10);

Key_State=K1;

Key_Event_Handle(); } } }

//T0 中断函数

void DSY_Refresh() interrupt 1 {

TH0=(65536-50000)/256; //恢复定时器0 初值

TL0=(65536-50000)%256;

if(++i==2) //50ms*2=0.1s 转换状态{ i=0;

Second_Counts++;

P0=DSY_CODE[Second_Counts/10];

P2=DSY_CODE[Second_Counts%10];

if(Second_Counts==100) Second_Counts=0; //满100(10s)

后显示00 } }

33 用计数器中断实现100 以内的按键计数

#include

#define uchar unsigned char

#define uint unsigned int

//段码

uchar code

DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x 7f,0x6f,0x00};

uchar Count=0;

//主程序

void main() {

P0=0x00;

P2=0x00;

TMOD=0x06; //计数器T0 方式2

TH0=TL0=256-1; //计数值为1

ET0=1; //允许T0 中断

EX0=1; //允许INT0 中断

EA=1; //允许CPU 中断

IP=0x02; //设置优先级,T0 高于INT0 IT0=1; //INT0中断触发方式为下降沿触发TR0=1; //启动T0

while(1)

{

P0=DSY_CODE[Count/10];

P2=DSY_CODE[Count%10];

}

}

//T0 计数器中断函数

void Key_Counter() interrupt 1

{

Count=(Count+1)%100; //因为只有两位数码管,计数控制在100 以内(00~99)

}

//INT0 中断函数

void Clear_Counter() interrupt 0

{

Count=0; }

34 100 000s 以内的计时程序

/* 名称:100 000s 以内的计时程序

说明:在6 只数码管上完成0~99 999.9s。*/

#include

#include

#define uchar unsigned char

#define uint unsigned int

//段码

uchar code

DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x 7f,0x6f};

//6 只数码管上显示的数字

uchar Digits_of_6DSY[]={0,0,0,0,0,0};

uchar Count;

sbit Dot=P0^7;

//延时

void DelayMS(uint ms)

{

uchar t;

while(ms--) for(t=0;t<120;t++);

}

//主程序

void main()

{

uchar i,j;

P0=0x00;

P3=0xff;

Count=0;

TMOD=0x01; //计数器T0 方式1 TH0=(65536-50000)/256; //50ms 定时TL0=(65536-50000)%256;

IE=0x82;

TR0=1; //启动T0

while(1)

{

j=0x7f;

//显示Digits_of_6DSY[5]~Digits_of_6DSY[0]的内容

//前面高位,后面低位,循环中i!=-1 亦可写成i!=0xff for(i=5;i!=-1;i--)

{

j=_crol_(j,1);

P3=j;

P0=DSY_CODE[Digits_of_6DSY[i]]; if(i==1) Dot=1; //加小数点DelayMS(2);

}

}

}

//T0 中断函数

void Timer0() interrupt 1

{

uchar i;

TH0=(65536-50000)/256; //恢复初值

TL0=(65536-50000)%256;

if(++Count!=2) return;

Count=0;

Digits_of_6DSY[0]++; //0.1s 位累加

for(i=0;i<=5;i++) //进位处理

{

if(Digits_of_6DSY[i]==10)

{

Digits_of_6DSY[i]=0;

if(i!=5) Digits_of_6DSY[i+1]++; //如果0~4 位则分别向高

一位进位

}

else break; //若某低位没有进位,怎循环提前结束}

}

35 定时器控制数码管动态显示

/* 名称:定时器控制数码管动态

显示

说明:8 个数码管上分两组动

态显示年月日与时分秒,本例的

位显示延时用定时器实现。

*/

#include

#include

#define uchar unsigned char

#define uint unsigned int

//段码,最后一位是“-”的段码

uchar code

DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x 80,0x90,0xbf};

//待显示的数据:09-12-25 与23-59-58(分两组显示)

uchar code Table_of_Digits[][8]={{0,9,10,1,2,10,2,5},{2,3,10,5,9,10,5,8}};

定时器中断程序设计实验

实验一定时器/中断程序设计实验 一、实验目的 1、掌握定时器/中断的工作原理。 2、学习单片机定时器/中断的应用设计和调试 二、实验仪器和设备 1、普中科技单片机开发板; 2、Keil uVision4 程序开发平台; 3、PZ-ISP 普中自动下载软件。 三、实验原理 805l 单片机内部有两个 16 位可编程定时/计数器,记为 T0 和 Tl。8052 单片机内除了 T0 和 T1 之外,还有第三个 16 位的定时器/计数器,记为 T2。它们的工作方式可以由指令编程来设定,或作定时器用,或作外部脉冲计数器用。定时器 T0 由特殊功能寄存器 TL0 和 TH0 组成,定时器 Tl 由特殊功能寄存器 TLl 和 TH1 组成。定时器的工作方式由特殊功能寄存器 TMOD 编程决定,定时器的运行控制由特殊功能寄存器 TCON 编程控制。T0、T1 在作为定时器时,规定的定时时间到达,即产生一个定时器中断,CPU 转向中断处理程序,从而完成某种定时控制功能。T0、T1 用作计数器使用时也可以申请中断。作定时器使用时,时钟由单片机内部系统时钟提供;作计数器使用时,外部计数脉冲由 P3 口的 P3.4(或 P3.5)即 T0(或 T1)引脚输入。 方式控制寄存器 TMOD 的控制字格式如下: 低 4 位为 T0 的控制字,高 4 位为 T1 的控制字。GATE 为门控位,对定时器/计数器的启动起辅助控制作用。GATE=l 时,定时器/计数器的计数受外部引脚输入电平的控制。由由运行控制位 TRX (X=0,1)=1 和外中断引脚(0INT 或 1INT)上的高电平共同来启动定时器/计数器运行;GATE=0时。定时器/计数器的运行不受外部输入引脚的控制,仅由 TRX(X=0,1)=1 来启动定时器/计数器运行。 C/-T 为方式选择位。C/-T=0 为定时器方式,采用单片机内部振荡脉冲的 12 分频信号作为时钟计时脉冲,若采用 12MHz 的振荡器,则定时器的计数频率为 1MHZ,从定时器的计数值便可求得定时的时间。 C/-T=1 为计数器方式。采用外部引脚(T0 为 P3.4,Tl 为 P3.5)的输入脉冲作为计数脉冲,当 T0(或 T1)输入信号发生从高到低的负跳变时,计数器加 1。最高计数频率为单片机时钟频率的 1/24。 M1、M0 二位的状态确定了定时器的工作方式,详见表。

实验三单片机定时计数器实验

实验三单片机定时/计数器实验 1、实验目的 1、学习计数器的使用方法。 2、学习计数器程序的编写。 3、学习定时器的使用方法。 4、学习定时器程序的编写。 5、熟悉汇编语言 2、实验说明 1、8051内部定时计数器T0,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数。将其数值按二进制数在P1口驱动LED灯上显示出来。 2、用CPU内部定时器中断方式计时,实现每一秒钟输出状态发生一次反转 3、实验仪器和条件 计算机 伟福实验箱(lab2000P) 4、实验内容 1、8051内部定时计数器T0,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数。将其数值按二进制数在P1口驱动LED灯上显示出来。 2、外部事件计数脉冲由P3.4引入定时器T0。单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变。这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样。同时这就决定了输入波形的频率不能超过机器周期频率。 3、用CPU内部定时器中断方式计时,实现每一秒钟输出状态发生一次反转 4、定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。TMOD

用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。TCON 主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。 5、在例程的中断服务程序中,因为中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。 五、思考题 1、使用其他方式实现本实验功能; 2、改为门控方式外部启动计数; 3、如果改为定时间隔为200us,如何改动程序; 4、使用其他方式实现本实验功能,例如使用方式1,定时间隔为10ms,如何改动程序。 六、源程序修改原理及其仿真结果 思考题一:使用其他方式实现本实验功能 方法一: movTMOD, #00000100b;方式0,记数器 movTH0, #0 movTL0, #0 setbTR0;开始记数;由于方式0的特点是计数时使用TL0的低五位和八位 TH0,故用加法器a用“与”(ANL)取TL0的低五位,再用yiwei子程序实现TH0的低三位变为高三位与TL0相加,这样赋给P1时就是八位计数的结果。 Loop: mova,TL0 anla,#1fh

数字定时器资料

电子系统设计 数字定时器 实验报告 学校:苏州大学 学院:城市轨道交通学院 班级:通信工程 组员:张强强朱宇翔肖伟健吴易洲

前言 在电子技术飞速发展的今天,电子产品逐渐趋向人性化和智能化。人们人们为了实现这一目的而引入了单片机。单片机又称单片微型计算机,也称为微控制器,是微型计算机的一个重要分支,单片机是20世纪70年代中期发展起来的一种大规模集成电路芯片,是集CPU,RAM,ROM,I/O接口和中断系统于同一硅片上的器件。单片机的诞生标志着计算机正式形成了通过计算机系统和嵌入式计算机系统两个分支。目前单片机已渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。单片机已在广阔的计算机应用领域中表现得淋漓尽致电器因此,单片机已成为电子类工作者必须掌握的专业技术之一。 这次实验,我们组是以单片机为核心设计一个数字定时器。在实验过程中,我们开始了解电系统设计的和基本理念,基本规则和基本流程;在不断完善设计的过程中,我们逐步丰富和巩固自己的理论知识,培养积极思考解决问题的习惯并充分地发挥自己动手实验操作的能力。 可以说这次实验将我们所学的《单片机原理与应用》以及《电子系统设计》两门课程进行了有机的结合。通过解决实际问题,我们对原理有了更深刻的理解,对于应用有了更广泛的接触。另外实验中我们学会使用Proteus和Keil两款软件进行单片机电路的仿真以及程序的编写及联调。这些都为我们以后的课程设计乃至工作研究奠定了厚实的基础。 这次的实验中,我们以单片机实现计时和倒计时功能,由LED 显示剩余时间,显示格式为 XX(分),精确到1分的整数倍。虽然接触到的功能模块较多,包括接口模块、中断模块、存储模块、控制模块和显示模块等,但仍然只是单片机这门学问的皮毛,在以后的学习中我们还需要不断汲取知识,不断地将理论与实践结合。 本次实验有本小组4位组员共同完成,张强强负责,朱宇翔负责,吴易洲负责,肖伟健负责。 编者注

51单片机密码锁制作的程序和流程图

51单片码锁制作的程序和流程图(很详细) 一、基本组成: 单片机小系统+4*4矩阵键盘+1602显示+DC电机 基本电路: 键盘和和显示 键盘接P1口,液晶的电源的开、关通过P2.7口控制 电机(控制口P2.4) 二、基本功能描述: 1.验证密码、修改密码 a)锁的初始密码是123456(密码最长为10位,最短为1位)。 2.恢复初始密码 a)系统可以恢复初始密码,否则一旦忘记密码而又不能恢复初始密码,该锁就永远打不开。但是又不能让用户自行修改密码,否则其他人也可以恢复该初始密码,使得锁的安全性大大下降。

3.使系统进入低功耗状态 a)在实际使用中,锁只有在开门时才被使用。因而在大多数的时间里,应该让锁进入休眠状态、以降低功耗,这使系统进入掉电状态,可以大大降低系统功耗。 b)同时将LCD背光灯关闭 4.DC电机模拟开锁动作。 a)DC电机启动时解除开锁把手的锁定,允许通过把手开锁。DC电机不直接开锁,使得DC电机的功率不用太大,系统的组成和维护将变得简单,功耗也降了下来。 三、密码锁特点说明: 1.0 输入将被以字符形式输入,最长为10位。 超过10位时系统将自动截取前10位、但不作密码长度溢出提示。 2.0 开锁10秒后不允许更改密码、并提示修改超时_进入初始态,需要重新输入密码方可再次修改密码。 3.0 系统未使用存储器存储密码故掉电后密码自动恢复为初始密码。 4.0 若2分钟无任何操作,系统自动进入省电模式运行,同时关闭液晶显示,以节省电力。 5.0 输入密码正确后、电机允许开锁时间为5秒, 5秒后需要再次输入密码才可以再次开锁。 6.0 修改密码键和恢复初始密码键最好置于室。 这是Proteus仿真结果: 输入密码123456: 显示结果: 密码正确时电机启动、电机将持续5秒:

单片机定时器实验程序

ORG 0000H LJMP START ORG 001BH ;定时器/计数器1中断程序入口地址 LJMP INT ORG 0100H START: MOV TMOD,#10H ;计数器置为方式1 MOV TL1,#0B0H ;装入时间常数 MOV TH1,#03CH SETB ET1 ;允许定时器T1中断 SETB EA ;允许总中断 SETB TR1 ;开始计数 MOV R0,#05H ;05是进入中断的次数LOOP: MOV R1,#00H MOV R2,#26H ;灯的状态循环次数LOOP1: MOV A,R1 ACALL TABLE MOV P1,A INC R1 LOOP2: CJNE R0,#00H,LOOP2 MOV R0,#05H DJNZ R2,LOOP1 LJMP LOOP TABLE: INC A ;从表中取显示码入累加器 MOVC A,@A+PC RET DB 0FFH,0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,80H,0H DB 01H,03H,07H,0FH,1FH,3FH,7FH,0FFH,00H,0FFH,0FEH DB 0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH,0BFH,0DFH DB 0EFH,0F7H,0FBH,0FDH,0FEH,0FFH,00H,0FFH,00H INT: CLR TR1 ;停止计数 DEC R0 ;计数值减一 MOV TL1,#0B0H ;重置时间常数初值 MOV TH1,#03CH SETB TR1 ;开始计数 RETI ;中断返回 END

将T1改为T0,并且溢出间隔为0.05s ORG 0000H LJMP START ORG 001BH ;定时器/计数器1中断程序入口地址 LJMP INT ORG 0100H START: MOV TMOD,#01H ;计数器置为方式1 MOV TL1,#78H ;装入时间常数 MOV TH1,#0CH SETB ET0 ;允许定时器T1中断 SETB EA ;允许总中断 SETB TR0 ;开始计数 MOV R0,#05H ;05是进入中断的次数 LOOP: MOV R1,#00H MOV R2,#25H ;灯的状态循环次数 LOOP1: MOV A,R1 ACALL TABLE MOV P1,A INC R1 LOOP2: CJNE R0,#00H,LOOP2 MOV R0,#05H DJNZ R2,LOOP1 LJMP LOOP TABLE: INC A ;从表中取显示码入累加器 MOVC A,@A+PC RET DB 0FFH,07FH,3FH,1FH,0FH,07H,03H,01H,00H DB 80H,81H,0C1H,0C3H,0E3H,0E7H,0F7H,0FFH DB 00H,0FFH,00H,0FFH,0EFH,0E7H,0C7H,0C3H,83H,81H,01H,00H DB 01H,03H,07H,0FH,1FH,3FH,7FH,0FFH INT: CLR TR1 ;停止计数 DEC R0 ;计数值减一 MOV TL1,#78H ;重置时间常数初值 MOV TH1,#0CH SETB TR1 ;开始计数 RETI ;中断返回 END

51单片机密码锁制作的程序和流程图

51单片机密码锁制作的程序和流程图(很详细) 一、基本组成: 单片机小系统+4*4矩阵键盘+1602显示+DC电机 基本电路: 键盘和和显示 键盘接P1口,液晶的电源的开、关通过P2.7口控制 电机(控制口P2.4) 二、基本功能描述: 1.验证密码、修改密码 a)锁的初始密码是123456(密码最长为10位,最短为1位)。 2.恢复初始密码 a)系统可以恢复初始密码,否则一旦忘记密码而又不能恢复初始密码,该锁就永远打不开。但是又不能让用户自行修改密码,否则其他人也可以恢复该初始密码,使得锁的安全性大大下降。

3.使系统进入低功耗状态 a)在实际使用中,锁只有在开门时才被使用。因而在大多数的时间里,应该让锁进入休眠状态、以降低功耗,这使系统进入掉电状态,可以大大降低系统功耗。 b)同时将LCD背光灯关闭 4.DC电机模拟开锁动作。 a)DC电机启动时解除开锁把手的锁定,允许通过把手开锁。DC电机不直接开锁,使得DC电机的功率不用太大,系统的组成和维护将变得简单,功耗也降了下来。 三、密码锁特点说明: 1.0 输入将被以字符形式输入,最长为10位。 超过10位时系统将自动截取前10位、但不作密码长度溢出提示。 2.0 开锁10秒后不允许更改密码、并提示修改超时_进入初始态,需要重新输入密码方可再次修改密码。 3.0 系统未使用存储器存储密码故掉电后密码自动恢复为初始密码。 4.0 若2分钟内无任何操作,系统自动进入省电模式运行,同时关闭液晶显示,以节省电力。 5.0 输入密码正确后、电机允许开锁时间为5秒, 5秒后需要再次输入密码才可以再次开锁。 6.0 修改密码键和恢复初始密码键最好置于室内。 这是Proteus仿真结果: 输入密码123456: 显示结果: 密码正确时电机启动、电机将持续5秒:

51单片机定时器秒表设计程序

51单片机定时器秒表设计程序 #include typedef unsigned char UINT8; typedef unsigned int UINT16; code UINT8 SEGMENT[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; code UINT8 SHU[10] ={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; code UINT8 SELECT[8] ={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; #define S1 0x0e #define S2 0x0d #define S3 0x0b #define S4 0x07 sbit SPEAK=P3^5; sbit P3_3=P3^3; UINT8 mSecond,Second; void Delay(UINT16 t) { UINT16 i,j; for(i=0;i

数字定时器资料

北京理工大学2012级电子技术课程设计 数字定时器

第1章概述 1.1设计目的 1、学习掌握电子技术基础知识和具体电路设计能力; 2、熟练掌握EDA仿真的使用方法; 3、增强学生的实践能力和遇到各种问题后寻找问题原因、解决问题的能力。 1.2设计要求 1、计时显示范围要求自00时00分00秒到23时59分59秒; 2、具有校时功能,可对小时、分、秒分别进行校准; 3、要求预选时刻到达时被控对象连续响10秒,蜂鸣器在10秒内断续鸣叫5次,即响1秒停1秒。 第2章设计与仿真 2.1工作原理 数字定时器由振荡电路、分频电路、计时电路、数码管显示电路、校时电路和闹钟电路组成。 由振荡电路产生2Hz的方波信号,经分频器产生1Hz和0.5Hz的信号,其中计时电路用1Hz信号,闹钟电路用0.5Hz信号,校时电路用2Hz与1Hz信号。计时电路使用的是6片CD4518和5片CD4028,分秒计数器为60进制,时计数器为24进制,CD4028输出进位脉冲给下一位的CP端。当计数器满24小时时,输出清零信号给各计数器完成清零,重新计数。校时电路由CD4015与一些门电路组成,闹钟电路由门电路和蜂鸣器组成。 2.2分部设计与仿真 2.2.1振荡电路 振荡电路可用555定时器与RC组成的电路实现,如图2-1所示。

图2-1 555定时器RC振荡电路 OUT管脚输出的即为2Hz的方波信号。 2.2.2分频电路 因为需要用到1Hz与0.5Hz的方波信号,所以把74LS160设计成分频器,把振荡电路2Hz的信号接到CLK管脚,则其QA端输出的为1Hz方波信号,QB 端输出的为0.5Hz方波信号,电路如图2-2所示。 图2-2 分频电路

数字定时器设计

设计任务 设计一个数字定时器 设计要求 1,定时1-99分钟,开机上电并且默认10分钟。 2,显示时间自选,不一定使用数码管。 3,定时时间可调,调试方式为两种,一是步进,二是直接输入。 4,有负载,220V/A,要求开机上电的时候,负载关闭。 5,有相关的提示信息,一旦时间设定之后,会给出时间设定的提示信息。 6,定时时间到,关闭电晕啊,切断负载电源,关闭电源。 7,系统工作电源V in=+12V 设计基本理论 本设计将采用89C51单片机,89C51单片机是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。单片机自带5个中断,两个16位定时器32个I/O口,可擦除只读存储器可以反复擦除多次,功能相当强大。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器。89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 主体模块设计 数字定时器系统的基本组成如下图所示

数字定时系统电路的原理框图根据设计任务与要求,可初步将系统分为五大功能模块:主电路、按键电路、显示电路、继电器电路。进一步细说,主电路选用AT89C51作为中央处理器,系统采用12MHZ的晶振;按键控制电路由两个个按键(启动键(start)、时间设定键(set))组成,采用三个独立开关,按键按下产生一个脉冲信号;显示电路由二位8段共阴极数码管和一个9位100欧姆上拉排阻组成,位选,个位和十位由P0输出,段选由P1输出;继电器电路由一个继电器和一个用电器(灯泡)组成,通过电路与P3.0相连。当P3.0输出高电平时,继电器不吸合,灯亮。 各部件具体设计 1单片机最小系统的设计模块 硬件连接说明:本系统以AT89C51单片机为核心。单片机采用内部振荡的方式。通过200欧姆电阻与一个6位8段LED数码显示管相连。从P0口输出LED数码管的字形码,从P2口输出LED数码管的位选码,高电平有效。4个功能按键和P1口相连,中间通过10K的电阻与+5V电源相连,按键另一端接地,P1口低电平时表示按键被按下。报警电路则与P3.0口相连,当P3.0口输出高电平时,蜂鸣器响。 2晶振电路设计 由于单片机内部振荡方式电路简单,时钟信号比较稳定,是独立的单片机应用系统的首选,故本设计采用内部振荡方式,采用12MHZ的晶振。数字定时系统电路的晶振电路图如下图所示。

单片机流程图

单片机总流程图

主函数程序 #include #include #define uchar unsigned char #define uint unsigned int #define OSC_FREQ 12000000 #define __10ms (65536 - OSC_FREQ/(12000000/9970)) #define COM8255 XBYTE[0XFFF3] #define PA8255 XBYTE[0XFFF0] #define PB8255 XBYTE[0XFFF1] #define PC8255 XBYTE[0XFFF2] uchar code tab[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6}; uchar code dis_HELLO[]={0x89,0x86,0xc7,0xc7}; uchar code dis_op51[]={0xc0,0x8c,0x92,0xf9}; uchar code dis_code[]={0xcf,0xa4,0xcf,0xa4}; uchar ucCnt_10ms=99; uchar i=0; uchar J=0; uchar n=0; uchar led1; uchar led2; sbit P2_4=P2^4; sbit P3_7=P3^7; sbit P1_0=P1^0; sbit P1_1=P1^1; sbit P1_2=P1^2; void Disp_op51 (); void Disp_HELLO(); void Set_Init_Xint(); void Set_Init_Timer(); void Disp_t(); void DelayX1ms(uint count); void Disp_8255(); void main() { for(;;) { Set_Init_Xint(); Set_Init_Timer(); Disp_8255(); //ucCnt_10ms =99; //ucLed1 = 6; //ucLed2 = 8;

定时器程序

#include #define uchar unsigned char #define uint unsigned int sbit LED=P0^0; uchar T_Count=0; void main() { TMOD=0x00; //定时器0 工作方式0 TH0=(8192-5000)/32; //5ms 定时 TL0=(8192-5000)%32; IE=0x82; //允许T0 中断 TR0=1; while(1); } //T0 中断函数 void LED_Flash() interrupt 1 { TH0=(8192-5000)/32; //恢复初值 TL0=(8192-5000)%32; if(++T_Count==100) //0.5s 开关一次LED { LED=~LED; T_Count=0; } } 28 TIMER0 控制流水灯 #include #include

#define uchar unsigned char #define uint unsigned int void main() { uchar T_Count=0; P0=0xfe; P2=0xfe; TMOD=0x01; //定时器0 工作方式1 TH0=(65536-40000)/256; //40ms 定时TL0=(65536-40000)%256; TR0=1; //启动定时器 while(1) { if(TF0==1) { TF0=0; TH0=(65536-40000)/256; //恢复初值TL0=(65536-40000)%256; if(++T_Count==5) { P0=_crol_(P0,1); P2=_crol_(P2,1); T_Count=0; } } } }

课程设计报告:数字式计时器电路555定时器

目录 目录 (1) 1.系统设计思路与总体方案 (2) 1.1 设计思路与流程图 (2) 2.Multisim软件的简介 (3) 2.1Multisim概貌及特点 (3) 3.555定时器,CD4518和CD4011介绍 (7) 3.1 555定时器 (7) 3.2 CD4518引脚功能 (11) 3.3 CD4011引脚图 (12) 4. 数字逻辑,振荡器,计数器和显示电路图 (14) 4.1数字逻辑模块 (14) 4.2振荡器模块 (14) 4.3 计数器模块 (19) 4.4 显示器模块 (20) 5. 电路的总体设计与调试 (20) 5.1 总体电路原理图 (20) 5.2总体电路工作原理 (21) 6.课程设计感受 (22) 6.1 课程设计中的收获和体会 (22) 7.附录与文献 (24)

7.1附录 (24) 7.2参考文献 (25) 1.系统设计思路与总体方案 1.1 设计思路与流程图 根据任务书可以知道本课题是一个2位数字显示计数器,是一个十进制计数器组合,本质上就是一计时器。通过一个时基电路产生一定频率脉冲,将脉冲信号输入低位的计数器输入端,通过一级级的进位,从而达到计数。从而完成此课题,我们可以将这整个计数系统,分为几个模块进行分析。 (1).数字逻辑控制模块。通过使用门电路来控制计时器进位及清零。 (2).脉冲信号产生模块。由一个振荡电路来产生一个固定频率的脉冲信号,作为计时器的时基信号。 (3).计时数计数模块。接收计时及中断信号脉冲,从而控制计数器计数,且有清零功能,该模块选用十进制计数器。 (2).译码显示模块。该模块要显示00到99的数字,选用十进制计数器的基础上,通过它们之间的级联,最终显示相应数字。 该数字式定时器,需要用到555定时器,由此产生振荡信号,在数字逻辑电路的控制下,由计数器计数,最后在数码管上显示出来,画为流程图如下:

单片机定时器程序

实验十一定时器实验三 一、实验要求 1.将P2口和四个数码管的数据口相连,P1口和位选线相连接,电路用共阳极; 2.数码管显示4位从前两位分钟、后两位为秒;分钟和秒的值从00到59增加; 3.实现定时器1S的定时,每1S时间到时,使秒钟加一,当秒钟为60时,显示为00 秒,分钟加一;当分钟为60时,显示为00分,从新开始一个小时的计时。 #include //定义8051寄存器头文件 #define SEG7P P2 //定义数码管就接口在P2口 #define SCANP P1 //定义P3口为数码管位选口unsigned char TAB[]={ 0xc0,0xf9,0xa4,0xb0,0x99, //数字0~4的码值 0x92,0x83,0xf8,0x80,0x98 }; //数字5~9的码值unsigned int show_s,show_m; //定义变量show_s,show_m void Get_disp(char show_s1,char show_m1); //声明赋值函数 void Display(); //声明显示函数 void delay_ms(int x); //声明延时函数 char disp[4]; //定义显示数字数组 char scan[4]={0xfe,0xfd,0xfb,0xf7}; //定义位选扫描数组 main() //主程序的开始 { SEG7P=0xff; //赋初值关闭数码管 IE=0x82; //开启中断总开关和定时器0开关 TMOD=0x01; //设置模式为1 TR0=1; //开启定时器0 TH0=(65535-50000)/256; //设置定时器初值,计数高八位 TL0=(65535-50000)%256; //计数低八位 while(1) //无穷循环 { Get_disp(show_s,show_m); //调用赋值函数 Display(); //调用显示函数} } /*****定时器0中断子函数*****/ void TF_0(void) interrupt 1 { int T; TH0=(65535-50000)/256; //重新转载定时器的初值 TL0=(65535-50000)%256; T++; //计数自增 if(T==20) //判断T { T=0; //T回到初值 show_s++; //秒自增

单片机定时器实验报告

XXXX大学信息工程与自动化学院学生实验报告 (2009 —2010 学年第二学期) 课程名称:单片机开课实验室: 2010年 5月14日 一.实验目的: 掌握定时器T0、T1的方式选择和编程方法,了解中断服务程序的设计方法,学会实时程序的调试技巧。 二.实验原理: MCS-51单片机内设置了两个可编程的16位定时器T0和T1,通过编程,可以设定为定时器和外部计数方式。T1还可以作为其串行口的波特率发生器。 定时器T0由特殊功能寄存器TL0和TH0构成,定时器T1由TH1和TL1构成,特殊功能寄存器TMOD控制定时器的工作方式,TCON控制其运行。定时器的中断由中断允许寄存器IE,中断优先权寄存器IP中的相应位进行控制。定时器T0的中断入口地址为000BH,T1的中断入口地址为001BH。 定时器的编程包括: 1)置工作方式。 2)置计数初值。 3)中断设置。 4)启动定时器。 定时器/计数器由四种工作方式,所用的计数位数不同,因此,定时计数常数也就不同。

在编写中断服务程序时,应该清楚中断响应过程:CPU执行中断服务程序之前,自动将程序计数器PC内容(即断点地址)压入堆栈保护(但不保护状态寄存器PSW,更不保护累加器A和其它寄存器内容),然后将对应的中断矢量装入程序计数器PC使程序转向该中断矢量地址单元中以执行中断服务程序。定时器T0和T1对应的中断矢量地址分别为000BH 和001BH。 中断服务程序从矢量地址开始执行,一直到返回指令“RETI”为止。“RETI”指令的操作一方面告诉中断系统该中断服务程序已经执行完毕,另一方面把原来压入堆栈保护的断点地址从栈顶弹出,装入到程序计数器PC,使程序返回到被到中断的程序断点处,以便继续执行。 因此,我们在编写中断服务程序时注意。 1.在中断矢量地址单元放一条无条件转移指令,使中断服务程序可以灵活地安排在64K 字节程序存储器的任何空间。 2.在中断服务程序中应特别注意用软件保护现场,以免中断返回后,丢失原寄存器、累加器的信息。 3.若要使执行的当前中断程序禁止更高优先级中断,可以先用软件关闭CPU中断,或禁止某中断源中断,在返回前再开放中断。 三.实验内容: 编写并调试一个程序,用AT89C51的T0工作方式1产生1s的定时时间,作为秒计数时间,当1s产生时,秒计数加1;秒计数到60时,自动从0开始。实验电路原理如图1所示。 计算初值公式 定时模式1 th0=(216-定时时间) /256 tl0=(216-定时时间) mod 256

数字显示定时器

数字电子技术课程设计 设计题目: 数 字 显 示 定 时 器 学院: 专业: 姓名: 班级: 学号: 指导老师:

目录 一、设计目的………………………………………2 二、设计内容 (2) 三、数字显示定时器的组成和基本工作原理……2 四、设计步骤与方法………………………………5 五、调试方法………………………………………9 六、问题分析………………………………………9 七、选用元器件 (10) 八、参考文献 (10) 九、心得体会 (10)

数字显示定时器 一、设计目的 1设计题目:数字显示定时器 2设计要求: ①分析数字显示定时器的工作原理,明确其中每个组件及元件的作用。 ②通过查阅有关资料,了解组件的逻辑功能、使用条件及引脚图,并将图中74LS90组件的连接图标注引脚号,将各与非门编号并标注引脚号以便连线和排除故障。 3 目的要求 ①结合运用所学知识,进一步提高逻辑电路的识图能力。 ②通过实验进一步了解并掌握完成数字电路系统实验的方法,培养调试技能和解决实际问题的能力。 ③进一步了解中规模集成组件的性能与应用。 二、设计内容 ①搭接秒信号发生器,用示波器B点波形的幅度及周期。 ②搭接并调试计数译码显示单元。 ③搭接控制单元,启动脉冲形成单元,由实验台的单脉冲代替。思考应该用正脉冲还是负脉冲? ④搭接蜂鸣器及发光管报警电路,并调试其功能。 ⑤搭接完整电路(连A,B,C,D,E各点)测试系统功能(注意:先测试组件功能,再连接单元电路;先调试好单元电路功能,再连接整体电路)。 三、数字显示定时器的组成和基本工作原理 数字显示定时器是一个在能实现定好的时间时发出信号的同时,显示出计时的具体情况的一种计时器。计时器在平时的应用是很广泛的。我现在设计的就是数现定时器的一种,其基本组成的整体框图如图所示。 它的工作原理是:按微动开关,计时开始,两位十进制显示所计时间,到达给定时间(60s)时计时停止,蜂鸣器及发光二极管发出报警信号。 1.秒信号发生器 在精度要求不高的情况下,可由555定时器组成的多谐震荡器提供频率为

单片机60s定时器程序c语言

单片机60s定时器程序c语言 #include /////变量定义 sbit led0=P1^0; sbit led1=P1^1; sbit led2=P1^2; sbit led3=P1^3; int tion=0; int tey[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90}; int cx=0; int kx=0; ///子函数 void time(int x); //延时函数定义 void LED(); //显示函数定义 ///////////// ////////主函数/// ///////// void main() {TMOD=0X1; TH0=0X3C; TL0=0XB0; IE=0X82; TR0=1; while(1) {LED();}} //延时子函数// void time(int x) {for(x=0;x<200;x++);} //显示子函数// void LED() {led0=0; led1=1; led2=1; led3=1; P0=0XBF; time(1); led1=0; led2=1; led0=1;

led3=1; P0=tey[kx]; time(1); led2=0; led1=1; led0=1; led3=1; P0=tey[cx]; time(1); led3=0; led0=1; led1=1; led2=1; P0=0xBF; time(1); } //中断函数// void teyond()interrupt 1 {TH0=0X3C; TL0=0XB0; tion++; if(tion==20) {tion=0; cx++; P0=tey[cx]; if(cx==10) {cx=0; kx++; P0=tey[kx]; if(kx==6) {cx=0; kx=0; TR0=0;}}}}

三位数字显示计时定时器设计

课程设计报告 课程设计名称:三位数字显示计时定时器设计专业班级: 学生姓名: 学号: 同组人员: 指导教师: 课程设计时间: 2周

目录 1 设计任务、要求以及文献综述 (1) 2 原理叙述和设计方案 (1) 2.1 设计方案选择和论证 (1) 2.2 电路的功能框图及其说明 (1) 2.3 功能块及单元电路的设计、计算与说明 (2) 2.4 总体电路原理图 (4) 3 电路的仿真与调试 (4) 3.1 电路仿真 (4) 3.2 调试中出现的问题及解决方法 (5) 4 制作与调试 (6) 4.1元件清单、实物照片 (6) 4.2制作与调试过程中遇到的问题及解决办法 (7) 5心得体会 (7) 6 参考文献 (8) 附录 (9)

三位数字显示计时定时器设计 1 设计任务、要求以及文献综述 3位数字显示计时定时器是一个典型的利用数字系统的例子。所谓数字系统,是指由若干数字电路及逻辑部件组成并且能够进行采集、加工、处理及传送数字信号的设备。一个完整的数字系统通常由输入电路、输出电路、控制电路、若干个子系统和时基电路等部分组成。设计要求如下: 1、计时功能。能任意启停,保持计时结果; 2、开机自动复位; 3、最大计时显示为9分59秒; 4、定时报警。 2 原理叙述和设计方案 2.1 设计方案选择和论证 方案一:设计的3位数字显示计时定时器则分别有4个子系统组成:秒脉冲时间标准产生电路、计数器、译码器和显示器、开机自动清零电路、计时启停控制电路 方案二:实现一个三位数字显示的秒表系统,单片机,lcd1602显示屏,矩阵键盘等组成部分。秒计数电路满60向分计数电路进位(显示00~59s),分计数电路满足10(显示0~9)后停止并且灯亮,等待重新复位计时。 论证:方案二比方案一好。 理由一:方案二显示的最终结果比较直观。 理由二:方案二可更改性好,方便日后的改进。 2.2 电路的功能框图及其说明 根据原理正确、易于实现、且实验室有条件实现的原则确定设计方案,画出总体设计功能框图,如图1所示。

定时器的汇编程序

stm8/ ;/******************** stm8单片机实验******************** ;文件名: 10S定时器 ;作者: liuhanrui ;日期: 2011.5.13 ;描述: 完成一个10S 计时器的设计,数码显示1~10 ;********************************************************* ;***************************接线************************** ;硬件:1、STM8s-discovery 2、C51RC-F底板3、杜邦线 ;连接图: CN3->P1(段) ; PB0(pin10)->LED(P10) ; PB1(pin9)->LED(P11).a ; PB2(pin8)->LED(P12).b ; PB3(pin7)->LED(P13).c ; PB4(pin6)->LED(P14).d ; PB5(pin5)->LED(P15).e ; PB6(pin4)->LED(P16).f ; PB7(pin3)->LED(P17).dp ; CN3->P2(位),用了LED1,LED2两位数码管 ; PE6(pin12)->R1(p24) ; PE7(pin11)->R2(p25) ;********************************************************** #include "mapping.inc" #include "STM8S105C_S.inc" segment 'ram0' counter ds.b ;用于确定1S定时 bit ds.b ;作为1S定时时间标志位 segment 'rom' main.l ; initialize SP ldw X,#stack_end ldw SP,X #ifdef RAM0 ; clear RAM0 ram0_start.b EQU $ram0_segment_start ram0_end.b EQU $ram0_segment_end

定时器中断c语言程序

定时器中断c语言解析interrupt x using y interrupt 表示中断优先级,using表示所用工作寄存器组。 interrupt x using y 跟在interrupt 后面的xx 值得是中断号,就是说这个函数对应第几个中断端口,一般在51中 0 外部中断0 1 定时器0 2 外部中断1 3 定时器1 4 串行中断 其它的根据相应得单片机有自己的含义,实际上c在编译的时候就是把你这个函数的入口地址放到这个对应中断的跳转地址 using y 这个y是说这个中断函数使用的那个寄存器组就是51里面一般有4个r0 -- r7寄存器,如果你的终端函数和别的程序用的不是同一个寄存器组则进入中断的时候就不会将寄存器组压入堆栈返回时也不会弹出来节省代码和时间 外部中断INT0 void intsvr0(void) interrupt 0 using 1 定时/计数器T0 void timer0(void) interrupt 1 using 1 外部中断INT1 void intsvr1(void) interrupt 2 using 1 定时/计数器T1 void timer1(void) interrupt 3 using 1 串口中断 void serial0(void) interrupt4 using 1 单片机的C语言 HNBCC培训 电话:137******** 一,中断的概念 中断:当计算机执行正常程序时,系统中出现某些急需处理的异常情况和特殊请求. 中断的执行:当CPU正在执行某一程序时,若有中断响应,则CPU转而执行中断服务程序,当中断服务程序执行完毕后,CPU自动返回原来的程序继续执行. 中断服务程序的语句写法与函数的写法完全相同,所以,中断服务程序也是函数,只在函数头部有不同(后续). 中断服务程序的执行与函数的执行不同:函数的执行是有固定位置的,是通过函数的调用来完成的;而中断服务程序的执行是不固定位置的,只要有中断响应,在一定条件下都会去响应中断,即执行中断服务程序. 二,中断源 中断源:任何引起计算机中断的事件,一般一台机器允许有许多个中断源. 8051系列单片机至少有5个可能的中断(8052有6个,其它系列成员最多可达15个).下面以5个中断源为例.

单片机定时器中断时间误差的解决方案

单片机定时器中断时间误差的解决方案 时间:2012-06-12 14:04:04 来源:作者: 1 前言 单片机内部一般有若干个定时器。如8051单片机内部有定时器0和定时器1。在定时器计数溢出时,便向CPU发出中断请求。当CPU正在执行某指令或某中断服务程序时,它响应定时器溢出中断往往延迟一段时间。这种延时虽对单片机低频控制系统影响甚微,但对单片机高频控制系统的实时控制精度却有较大的影响,有时还可能造成控制事故。为扩大单片机的应用范围,本文介绍它的定时器溢出中断与CPU响应中断的时间误差、补偿误差的方法和实例。 2 误差原因、大小及特点 产生单片机定时器溢出中断与CPU响应中断的时间误差有两个原因。一是定时器溢出中断信号时,CPU正在执行某指令;二是定时器溢出中断信号时,CPU正在执行某中断服务程序。 2.1. CPU正在执行某指令时的误差及大小 由于CPU正在执行某指令,因此它不能及时响应定时器的溢出中断。当CPU执行此指令后再响应中断所延迟的最长时间为该指令的指令周期,即误差的最大值为执行该指令所需的时间。由于各指令都有对应的指令周期,因此这种误差将因CPU正在执行指令的不同而不同。如定时器溢出中断时,CPU正在执行指令MOV A, Rn,其最大误差为1个机器周期。而执行指令MOV Rn, direct时,其最大误差为2个机器周期。当CPU正在执行乘法或除法指令时,最大时间误差可达4个机器周期。在8051单片机指令系统中,多数指令的指令周期为1~2个机器周期,因此最大时间误差一般为1~2个机器周期。若振荡器振荡频率为fosc,CPU正在执行指令的机器周期数为Ci,则最大时间误差为Δtmax1=12/fosc× Ci(us)。例如fosc=12MHZ,CPU正在执行乘法指令(Ci=4),此时的最大时间误差为: Δtmax1=12/fosc×Ci=12/(12×106)×4=4×10-6(s)=4(μs)

相关主题
文本预览
相关文档 最新文档