ATMEGA 128单片机定时器应用大全

ATMEGA 128单片机定时器应用大全
ATMEGA 128单片机定时器应用大全

#include

#include

#include"delay.h"

#include"usart.h"

unsigned char Count1 = 0;

unsigned char Count2 = 0;

unsigned char count = 0;

void port_init(void)

{

PORTA = 0x00;

DDRA = 0xFF;

PORTB = 0x00;

DDRB = 0xFF;

PORTC = 0x00; //m103 output only

DDRC = 0xFF;

PORTD = 0x00;

DDRD = 0x00;

PORTE = 0x00;

DDRE = 0xFF;

PORTF = 0x00;

DDRF = 0x00;

PORTG = 0x00;

DDRG = 0x00;

}

//call this routine to initialize all peripherals

void init_devices(void)

{

//stop errant interrupts until set up

CLI(); //disable all interrupts

XDIV = 0x00; //xtal divider

XMCRA = 0x00; //external memory

port_init();

//uart0_init();

MCUCR = 0x00;

EICRA = 0x00; //extended ext ints

EICRB = 0x00; //extended ext ints

EIMSK = 0x00;

TIMSK = 0x00; //timer interrupt sources ETIMSK = 0x00; //extended timer interrupt sources SEI(); //re-enable interrupts

//all peripherals are now initialized

}

//

void PWM10(void)

/*在10位相位修正PWM模式下,产生PWM波*/

//TCCR1A = 0X83;

TCCR1A = (1<

TCCR1B = (1<

OCR1AH = 0X0F;

OCR1AL = 0X01;

OCR1BH = 0X1F;

OCR1BL = 0X01;

OCR1CH = 0X2A;

OCR1CL = 0X01;

}

void PWM20MS_Servo(void)

{

//舵机常用

//top值为ICRn时产生PWM

TCCR1A = (1<

TCCR1B = (1<

ICR1 = 18432;//周期为20MS

//ICR1H = 0X48;//周期为20MS

//ICR1L = 0X00;

OCR1A = 360;

//OCR1AH = 0X01;//脉宽0.5十进制360

//OCR1AL = 0XCC;//

OCR1B = 2300;

//OCR1BH = 0X08;//脉宽2.5十进制2300

//OCR1BL = 0XFC;

OCR1CH = 0X1A;

OCR1CL = 0X01;

}

void PWM_T1_0XFF(void)

{

//两路PWM波

TCCR1A =(1<

TCCR1B = (1<

OCR1A = 200;

OCR1B = 22;

OCR1C = 100;

}

void PWM_T3_0XFF(void)

{

//两路PWM波

TCCR3A =(1<

TCCR3B = (1<

OCR3A = 200;

OCR3B = 22;

OCR3C = 100;

void InPut_Init(void)

{

DDRD &= ~(1<<4);

PORTD |= (1<<4);

SREG = 0X80;

TCNT1 = 0;

TCCR1B = (1<

TIMSK = (1<

}

//对16位的寄存器写值

void Write_r16Register(unsigned int k)

{

TCNT1H = (unsigned char)(k>>8);

TCNT1L = (unsigned char)k;

}

//对16位的寄存器读值

unsigned int Read_r16Register(void)

{

unsigned int k;

k = TCNT1L;

k += (unsigned int)(TCNT1H<<8);

return k;

}

//CTC模式,外部计数

void CTC_Init_T1(void)

{

DDRD &= ~(1<<6);

PORTD |= (1<<6);

TCCR1A = 0X00;

TCCR1B = (1<

TCNT1H = 0;

TCNT1L = 0;

OCR1AH = 0XFF;

OCR1AL = 0XFF;

//0X0005;

// TIMSK = (1<

//SREG = 0X80;

}

//CTC模式,T2,外部计数

void CTC_Init_T2(void)

{

DDRD &= ~(1<<7);

PORTD |= (1<<7);

TCCR2 = (1 << WGM21)|(1 << CS22)|(1 << CS21);

TCNT2 = 0X00;

OCR2 = 0XFF;

}

void T3_Over_init(void)

{

//TCNT3H=(65536-50000)/256;//50ms溢出中断

//TCNT3L=(65536-50000)%256;

TCNT3H = 0X1E;

TCNT3L = 0XFF;//0XEA;

//TCNT3L=0;//X8C;

TCCR3B=0X04;//(1<

SREG=0x80;

}

//定时器0,溢出中断,初始化

void T0_Over_Init(void)

{

TCNT0 = 0x0F;

TCCR0 = 0X07;

TIMSK = (1 << TOIE0);

SREG=0x80;

}

//使用外部中断,下降沿触发,中断0,1

void External_Interrupt_Init(void)

{

DDRD &= ~(1<<0);

PORTD |= (1<<0);

DDRD &= ~(1<<1);

PORTD |= (1<<1);

EICRA = (1<

EIMSK = (1<

SREG=0x80;

}

//计算电机编码器的值,通过定时器0,读取T1做时钟,TCNT1的值

void main(void)

{

init_devices();

//External_Interrupt_Init();

T0_Over_Init();

//T3_Over_init();

//CTC_Init_T1();

//CTC_Init_T2();

PWM_T1_0XFF();

PWM_T3_0XFF();

//uart0_init();

while(1)

//uart0_init();

//PORTA = PORTA^0X01;

// DelayMs(5);

}

}

//外部中断函数0

#pragma interrupt_handler INT0_Interrupt:02 void INT0_Interrupt(void)

{

Count1++;

PORTA = PORTA^0X01;

}

#pragma interrupt_handler INT1_Interrupt:03 void INT1_Interrupt(void)

{

Count2++;

PORTA = PORTA^0X01;

}

//T0溢出中断函数#pragma

#pragma interrupt_handler T0_Over_Interrupt:17 void T0_Over_Interrupt(void)

{

TCNT0 = 0x0F;

count++;

if(count==60)

{

count = 0;

PORTA = PORTA^0X01;

}

// USART0_Transmit(TCNT1H);

// USART0_Transmit(TCNT1L);

// TCNT1H = 0;

// TCNT1L = 0;

}

//T3溢出中断函数

#pragma interrupt_handler T3_Over_Interrupt:30 void T3_Over_Interrupt(void)

{

TCNT3H = 0X1E;

TCNT3L = 0XFF;

//DelayMs(30);

USART0_Transmit(Count1);

USART0_Transmit(Count2);

Count1 = 0;

Count2 = 0;

//TCNT1H = 0;

//TCNT1L = 0;

//USART0_Transmit(TCNT2);

//TCNT2 = 0;

//PORTA = PORTA^0X01;

}

//CTC

#pragma interrupt_handler T1:13 void T1(void)

{

USART0_Transmit(TCNT1L);

PORTA = 0X0F;

//PORTA^0X01;

}

//捕捉中断,向量编号12

#pragma interrupt_handler input1:12 void input1(void)

{

//ICNT1H =

// count = TCNT1;

// USART0_Transmit(TCNT1H);

//count++;

USART0_Transmit(ICR1H);

USART0_Transmit(ICR1L);

Delay_1us(100);

/*if(count == 200)

{

//TCNT1 = 0;

PORTA = 0X0F;

}

if(count == 400)

{

count = 0;

// TCNT1 = 0;

PORTA = 0X00;

}*/

}

STC89C52单片机定时器2的使用

STC89C52单片机定时器2的使用 实现定时和计数的方法一般有:软件定时、专用电路和可编程定时器/计数器三种方法。软件定时:执行一个循环程序进行时间延迟。定时准确,不需要外加硬件电路,但会增加CPU 开销。专用硬件电路定时:可以实现请精确 的定时和计数,但参数调节不方波。可编程定时器/计数器:不占用CPU 时间,能与CPU 并行工作,实现精确的定时和计数,又可以通过变成设置其工作方 式和其他参数,使用方便。以下说明仅试用宏晶的STC89C52!!定时器 2:T2MOD,T2CON,TH2,TL2,RC2H,RC2L.T2MOD:0C9H(不可位寻址) 000000T2OEDCENT2OE:定时器输出使能位DECN:向上/向下计数使能位。定时器2 可配制成向上/向下计数器。0:向上计数(模式状态) 1:向下计数(尽量不使用)T2CON:0XC8H(可位寻址) TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RL2TF2:7 上/下溢出标志位,定时器2 溢出时置位,必须有用软件清零!当RCLK 或TCLK=1 时,TF2 将不会 置位。EXF2:6 定时器2 外部标志,当EXEN2=1 且T2EX 的负跳变产生捕获或重装时,EXF2 置位。定时器2 中断使能时,EXF2=1 将使CPU 从中断向量处执行定时器2 中断子程序。EXF2 位必须用软件清零。在递增/递减计数器 模式(DCEN=1)中,EXF2 位不会引起中断。RCLK:5 接收时钟标志。RCLK 置位时,定时器2 的溢出脉冲作为串口模式1 和模式3 的接收时钟。RCLK=0 时,将定时器1 的溢出脉冲作为串口模式1 和模式3 的接收时钟。TCLK:4 发送时钟标志位。TCLK 置位时,定时器2 的溢出脉冲作为串口模式1 和模式3 的发送时钟。TCLK=0 时,将定时器1 的溢出脉冲作为串口模 式1 和模式3 发送时钟。EXEN2:3 定时器2 外部使能标志。当其置位且定时器2 未作为串口时钟时,允许T2EX 的负跳变产生捕获或重装。

基于51单片机的多功能定时器

摘要 本设计要求以单片机为核心主体,完成最小系统板的设计与制作(通过Protel 软件,对电路进行设计,调试。生成PCB板,再对元器件进行排布,焊接。)之后要进行初调试,证实电路板无误后才能进行下面的内容。电路板完成后,在总程序基础上通过编程设计家用多路定时控制器。本课程设计目标:具有正常数字钟功能,包括时间校正,具有至少三路定时开关控制功能,每路定时时间可以任意设置。但重要的是要有一定的创新,因为此系统还有很多值得开发的功能,单纯的三路定时只是设计内容的基本要求。 关键词:Protel,单片机,MCS-51

目录 摘要........................................................................................................ - 1 - 引言........................................................................................................ - 2 - 1 绪论.................................................................................................... - 2 - 1.1系统背景 (1) 1.1.1单片机技术及其发展特点 (1) 1.1.2单片机在电子技术中的应用 (3) 1.1.3课程设计的内容与任务 (4) 2 系统电路设计 (5) 2.1 系统总体设计框架结构 (5) 2.2 系统硬件单元电路设计 (6) 2.2.1 时钟电路设计 (6) 2.2.2 复位电路设计 (6) 2. 2.3 按键电路设计 (7) 2.3数码管电路设计 (8) 2.3.1、数码管的分类 (8) 2.3.2、数码管的驱动方式 (8) 2.3 系统硬件总电路 (14) 3 系统软件设计 (10) 3.1 系统软件流程图 (10) 4 实验结果和分析 (11) 4.1 实验使用的仪器设备 (11) 4.2 测试结果分析 (11) 结论 (12) 参考文献 (13) 附录 (13) 系统程序设计 (15) Abstract (25) 致谢 (25)

基于单片机的简易计时器设计

南华大学电气工程学院课程设计 摘要:单片机自70年代问世以来得到蓬勃发展,目前单片机功能正日渐完善:单片机集成越来越多资源,内部储存资源日益丰富,用户不需要扩充资源就可以完成项目开发,不仅是开发简单,产品小巧美观,同时抗干扰能力强,系统也更加稳定,使它更适合工业控制领域,具有更广阔的市场前景;提供在线编程能力,加速了产品的开发进程,为企业产品上市赢得了宝贵时间。本设计通过STC89C51单片机以及单片机最小系统和三极管驱动以及外围的按键和数码管显示等部件,设计一个基于单片机的简易计时器。设计通过四位一体共阳极数码管显示,并能通过按键对秒进行设置。 关键词:STC89C51单片机,驱动,四位一体数码管

南华大学电气工程学院课程设计 Abstract:SCM be booming since since the 70 s, MCU functions are increasingly perfect at present: single chip microcomputer integrated more and more resources, internal storage resource increasingly rich, users do not need to expand resources can complete the project development, is not only the development of simple, small beautiful products, at the same time, strong anti-jamming capability, system is more stable, make it more suitable for industrial control field, has a broad market prospect; Provide online programming ability, speeded up the process of product development, product for the enterprise to win the precious time. This design and triode driven by STC89C51 microcontroller and the single chip microcomputer minimum system and peripheral keys and digital tube display components, design a simple timer based on single chip microcomputer. Design through the four digital tube display, a total of anode, and can through the button to set the seconds. Keywords: STC89C51 microcontroller, drive, Four digital tube

单片机实验之定时器计数器应用实验二

一、实验目的 1、掌握定时器/计数器计数功能的使用方法。 2、掌握定时器/计数器的中断、查询使用方法。 3、掌握Proteus软件与Keil软件的使用方法。 4、掌握单片机系统的硬件和软件设计方法。 二、设计要求 1、用Proteus软件画出电路原理图,单片机的定时器/计数器以查询方式工作,设定计数功能,对外部连续周期性脉冲信号进行计数,每计满100个脉冲,则取反P1.0口线状态,在P 1.0口线上接示波器观察波形。 2、用Proteus软件画出电路原理图,单片机的定时器/计数器以中断方式工作,设定计数功能,对外部连续周期性脉冲信号进行计数,每计满200个脉冲,则取反P1.0口线状态,在P 1.0口线上接示波器观察波形。 三、电路原理图 六、实验总结 通过本实验弄清楚了定时/计数器计数功能的初始化设定(TMOD,初值的计算,被计数信号的输入点等等),掌握了查询和中断工作方式的应用。 七、思考题 1、利用定时器0,在P1.0口线上产生周期为200微秒的连续方波,利用定时器1,对 P1.0口线上波形进行计数,满50个,则取反P1.1口线状态,在P 1.1口线上接示波器观察波形。 答:程序见程序清单。

四、实验程序流程框图和程序清单。 1、定时器/计数器以查询方式工作,对外部连续周期性脉冲信号进行计数,每计满100个脉冲,则取反P1.0口线状态。 汇编程序: ORG 0000H START: LJMP MAIN ORG 0100H MAIN: MOV IE, #00H MOV TMOD, #60H MOV TH1, #9CH MOV TL1, #9CH SETB TR1 LOOP: JNB TF1, LOOP CLR TF1 CPL P1.0 AJMP LOOP END C语言程序: #include sbit Y=P1^0; void main() { EA=0; ET1=0; TMOD=0x60; TH1=0x9C; TL1=0x9C; while(1) { TR1=1; while(!TF1); TF1=0; Y=!Y; } } 开始 TMOD初始化 计数初值初始化 中断初始化 启动定时器 计数溢出 清计数溢出标志 Y N P1.0口线取反

单片机定时器与计数器的工作方式解析

单片机定时器与计数器的工作方式解析 1 工作方式0 定时器/计数器的工作方式0称之为13位定时/计数方式。它由TL(1/0)的低5位和TH (0/1)的8位组成13位的计数器,此时TL(1/0)的高3位未用。 我们用这个图来讨论几个问题: M1M0:定时/计数器一共有四种工作方式,就是用M1M0来控制的,2位正好是四种组合。C/T:前面我们说过,定时/计数器即可作定时用也可用计数用,到底作什么用,由我们根据需要自行决定,也说是决定权在我们??编程者。如果C/T为0就是用作定时器(开关往上打),如果C/T为1就是用作计数器(开关往下打)。顺便提一下:一个定时/计数器同一时刻要么作定时用,要么作计数用,不能同时用的,这是个极普通的常识,几乎没有教材会提这一点,但很多开始学习者却会有此困惑。 GATE:看图,当我们选择了定时或计数工作方式后,定时/计数脉冲却不一定能到达计数器端,中间还有一个开关,显然这个开关不合上,计数脉冲就没法过去,那么开关什么时候过去呢?有两种情况 GATE=0,分析一下逻辑,GATE非后是1,进入或门,或门总是输出1,和或门的另一个输入端INT1无关,在这种情况下,开关的打开、合上只取决于TR1,只要TR1是1,开关就合上,计数脉冲得以畅通无阻,而如果TR1等于0则开关打开,计数脉冲无法通过,因此定时/计数是否工作,只取决于TR1。 GATE=1,在此种情况下,计数脉冲通路上的开关不仅要由TR1来控制,而且还要受到INT1管脚的控制,只有TR1为1,且INT1管脚也是高电平,开关才合上,计数脉冲才得以通过。这个特性能用来测量一个信号的高电平的宽度,想想看,怎么测? 为什么在这种模式下只用13位呢?干吗不用16位,这是为了和51机的前辈48系列兼容而设的一种工作式,如果你觉得用得不顺手,那就干脆用第二种工作方式。 2 工作方式1

4实验四 单片机定时器的使用

姓名:学号:日期: 实验四单片机定时器的使用 一、实验名称:单片机定时器的使用 二、实验目的 1.掌握在Keil环境下建立项目、添加、保存源文件文件、编译源程序的方法; 2.掌握运行、步进、步越、运行到光标处等几种调试程序的方法; 3.掌握在Proteus环境下建立文件原理图的方法; 4.实现Proteus与Keil联调软件仿真。 三、使用仪器设备编号、部件及备件 1.实验室电脑; 2.单片机实验箱。 四、实验过程及数据、现象记录 1.在Proteus环境下建立如下仿真原理图,并保存为文件; 原理图中常用库元件的名称: 无极性电容:CAP 极性电容:CAP-ELEC 单片机:AT89C51 晶体振荡器:CRYSTAL 电阻:RES 按键:BUTTON 发光二极管:红色LED-RED 绿色LED-GREEN 蓝色LED-BLUE 黄色LED-YELLOW 2.在Keil环境下建立源程序并保存为.ASM文件,生成.HEX文件; 参考程序如下: ORG 0000H LJMP MAIN ORG H ;定时器T0的入口地址 LJMP TIMER0 MAIN: MOV TMOD,#01H

MOV R0,#05H MOV TH0,# H ;定时器的初值 MOV TL0,# H SETB ;开定时器T0的中断 SETB ;开CPU的中断 SETB ;启动定时器T0 MOV A,#01H LOOP: MOV P1,A RL A CJNE R0,#0,$ MOV R0,#05H SJMP LOOP TIMER0: DEC R0 MOV TH0,# H ;重装初值 MOV TL0,# H ;重装初值 RETI END 将以上程序补充完整,流水时间间隔为250ms。 3.将.HEX文件导入仿真图,运行并观察结果; 4.利用Keil软件将程序下载至实验箱,进行硬件仿真,观察实验结果。 五、实验数据分析、误差分析、现象分析 现象:实现流水灯,时间间隔250ms,由定时器实现定时250ms。 六、回答思考题 1.定时器由几种工作模式,各种模式的最大定时时间是多少? 2.各种模式下初值怎么计算?

单片机定时器的使用

哈尔滨理工大学荣成学院 单片机原理及应用Protues 仿真实验 班级:电气18 学号: 姓名:

日期: 2020.06.03 实验五单片机定时器的使用 一、实验名称:单片机定时器的使用 二、实验目的 1.掌握在Keil环境下建立项目、添加、保存源文件文件、编译源程序的方法; 2.掌握运行、步进、步越、运行到光标处等几种调试程序的方法; 3.掌握在Proteus环境下建立文件原理图的方法; 4.实现Proteus与Keil联调软件仿真。 三、使用仪器设备编号、部件及备件 1.实验室电脑; 2.单片机实验箱。 四、实验过程及数据、现象记录 在Proteus 环境下建立如下仿真原理图,并保存为文件;

原理图中常用库元件的名称: 无极性电容:CAP 极性电容:CAP-ELEC 单片机:AT89C51 晶体振荡器:CRYSTAL 电阻:RES 按键:BUTTON 发光二极管:红色LED-RED 绿色LED-GREEN 蓝色LED-BLUE 黄色LED-YELLOW

在Keil环境下建立源程序并保存为.ASM文件,生成.HEX文件;汇编语言参考程序如下: ORG 0000H LJMP MAIN ORG H ;定时器T0的入口地址LJMP TIMER0 MAIN: MOV TMOD,#01H MOV R0,#05H MOV TH0,# H ;定时器的初值MOV TL0,# H SETB ;开定时器T0的中断SETB ;开CPU的中断SETB ;启动定时器T0 MOV A,#01H LOOP: MOV P1,A RL A CJNE R0,#0,$ MOV R0,#05H SJMP LOOP TIMER0: DEC R0 MOV TH0,# H ; MOV TL0,# H ; RETI END 将以上程序补充完整,流水时间间隔为250ms。#include #include #define uchar unsigned char #define uint unsigned int uchar i=0; void int_timer0()interrupt 1 { i++; if(i==5) { i=0; P1=_crol_(P1,1); } TH0=0x3c; TL0=0xb0; } void main() { TMOD=0x01; TH0=0x3c; TL0=0xb0; ET0=1; EA=1; TR0=1; P1=0xfe; while(1); } 将.HEX文件导入仿真图,运行并观察结果;

单片机计数器与定时器的区别

单片机计数器与定时器的区别 在的学习过程中,我们经常会发现中断、串口是学习的难点,对于初学者来说,这几部分的内容很难理解。但是我个人觉得这几部分内容是的重点,如果在一个学期的课堂学习或者自学中没有理解这几部分内容,那就等于还没有掌握51单片机,那更谈不上单片机的开发了,我们都知道在成品的单片机项目中,有很多是以这几部分为理论基础的,万年历是以定时器为主的,报警器是以中断为主的,联机通讯是以串口为主的。 在这几部分内容中,计数器/定时器对于初学者说很容易搞混淆,下面我将对这方面的内容结合自己的学习经验谈几点看法。 计数器和定时器相同的,他们都是对单片机中产生的脉冲进行计数,只不过计数器是单片机外部触发的脉冲,定时器是单片机内部在晶振的触发下产生的脉冲。当他们的脉冲间隔相同的时候,计数器和定时器就是一个概念。 在定时器和计数器中都有一个溢出的概念,那什么是溢出了。我们可以从一个生活小常识得到答案,当一个碗放在水龙头下接水的时候,过了一会儿,碗的水满了,就发生溢出。同样的道理,假设水龙头的水是一滴滴的往碗里滴,那

么总有一滴水是导致碗中的水溢出的。在碗中溢出的水就浪费了,但是在单片机的中溢出将导致一次中断。 在定时器计数器中,我们有个概念叫容量,就是最大计数量。 把水滴比喻成脉冲,那么导致碗中水溢出的最后一滴水的就是定时计数器的溢出的最后一个脉冲。 在各种单片机书本中,在介绍定时计数器时都讲到一个计数初值,那什么是计数初值呢?在这里我们还是假设水滴碗。假设第一百滴水能够使碗中的水溢出,我们就知道这个碗的容量是100。 在这里计数初值有3个,假设: 根据所得的初始值,再将其转换为,就可以进行计数或者定时了。后面讲解定时器初值的。 单片机, 计数器, 定时器

基于单片机的定时器设计.

电气信息学院 课程设计任务书 课题名称基于单片机的定时器设计 姓名Front专业班级学号 校内指导老师企业指导老师 课程设计时间2017年3月6日-2017年3月17日(3、4周) 教研室意见意见:审核人: 一、设计任务及要求 1、设计任务: 以单片机为核心设计一个音乐提示定时器,具备倒数计时、时间修改、音乐演奏等功能。可作为微电脑倒数计数器,做一小段时间计时,放在家中使用,例如煮泡面、煮开水或小睡片刻等;用于全自动洗衣机洗涤完毕音乐提示定时器。设计4个按键设置现在想要倒数的时间:K1--可调整倒数时间为1-60分钟;K2—设置倒数计时时间为5分钟,显示为“05”;K3—设置倒数计时时间为20分钟,显示为“20”;K4—设置倒数计时时间为60分钟,显示为“60”;一旦按键后则开始倒计时,当计时为0则演奏一曲音乐;内定倒数计时时间为5分钟,显示为05。 2、设计要求: 1)设计方案要合理、正确; 2)系统硬件设计; 3)系统软件设计及调试; 4)系统联调; 5)写出设计报告。 二、进度安排 第一周: 周一:集中布置课程设计任务和相关事宜,查资料确定系统总体方案。 周二~周三:完成硬件设计和电路连接 周四~周日:完成软件设计 第二周: 周一~周三:程序调试 周四~周五:设计报告撰写。周五进行答辩和设计结果检查。

三、参考文献 1)《微型计算机原理及应用》许立梓编机械工业出版社 2002 2)《微型计算机接口技术及应用》刘乐善编华中理工大学出版社 2000 3)《计算机硬件技术基础试验教程》邹逢兴编高等教育出版社 2000 4)《16位微型计算机原理接口及其应用》周佩玲编中国科学技术大学出版社2000 5)《微型计算机原理与接口技术》吴秀清编中国科学技术出版社 2001 6)《微型计算机接口技术》邓亚平编清华大学出版社 2001 7)《单片机原理及及应用》王迎旭编机械工业出版社 2001 8)《单片机应用程序设计技术》周航慈著北京航空航天大学出版社 2002 9)《单片机实用技术问答》谢宜仁主编人民邮电出版社 2002

基于单片机实现的定时器设计

第一章单片机的简介 一个8位的80c51微处理器,片内256字节数据存储器RAM/SFR,用以存放可以读写的数据,如运算的中间结果,最终结果以及欲显示的数据;片内4kb程序存储器Flash ROM,用以存放程序,一些原始数据和表格;4个8位并行I/O 口P0~P3,每个端口既可用作输入,也可用作输出;两个16位的定时器/计数器,每个定时器/计数器都可设置成计数方式,用以对外部事件进行计数,也可设置成定时方式,并可以根据计数或者定时的结果实现计算机控制;具有5个中断源,两个中断优先级的中断控制系统;一个全双工UART(通用异步接受发送器)的串行I/O口,用于实现单片机之间或者单片机与PC机之间的串行通信;片内振荡器和时钟产生电路,但石英晶体和微调电容需要外接,最高允许震荡频率为24MHz;89c51与80c51相比具有节电工作方式,即休闲方式及掉电方式。 1.1中央处理器(CPU): CPU是单片机内部的核心部件,是一个8位二进制数的中央处理单元,主要由运算器、控制器和寄存器阵列构成。 1.1.1 运算器: 运算器用来完成算术运算和逻辑运算功能,它是 89C51内部处理各种信息的主要部件。运算器主要由算术逻辑单元(ALU)、累加器(ACC)、暂存寄存器(TMP1、TMP2)和状态寄存器(PSW)组成。算术逻辑单元(ALU): 89C51中的ALU由加法器和一个布尔处理器组成。

累加器(ACC):用来存放参与算术运算和逻辑运算的一个操作数或运算的结果。暂存寄存器(TMP1、TMP2):用来存放参与算术运算和逻辑运算的另一个操作数,它对用户不开放。 状态寄存器(PSW):PSW是一个8位标志寄存器,用来存放ALU操作结果的有关状态。 1.1.2控制器: 控制器是单片机内部按一定时序协调工作的控制核心,是分析和执行指令的部件。控制器主要由程序计数器PC、指令寄存器IR、指令译码器ID和定时控制逻辑电路等构成。程序计数器PC是专门用于存放现行指令的16位地址的。CPU 就是根据PC中的地址到ROM中去读取程序指令码和数据,并送给指令寄存器IR 进行分析。指令寄存器IR用于存放CPU根据PC地址从ROM中读出的指令操作码。指令译码器ID是用于分析指令操作的部件,指令操作码经译码后产生相应于某一特定操作的信号。定时控制逻辑中定时部件用来产生脉冲序列和多种节拍脉冲。1.1.3寄存器阵列: 寄存器阵列是单片机内部的临时存储单元或固定用途单元,包括通用寄存器组和专用寄存器组。通用寄存器组用来存放过渡性的数据和地址,提高CPU的运行速度。 专用寄存器组主要用来指示当前要执行指令的内存地址,存放特定的操作数,指示指令运行的状态等。 1.1.4存储器: 89C51单片机内部有256个字节的RAM数据存储器和4KB的闪存程序存储器

单片机定时器设计

摘要 摘要 随着时代的进步,电子行业的发展,定时器的应用也越来越广泛,单片机以其强大的功能,成为许多功能电子产品的首选。本次电子定时器电路根据设计要求采用AT89C51单片机来实现最大99秒倒计时,采用两位数码管显示。文章的核心主要是硬件介绍及连接和软件编程两个大的方面。硬件电路主要包括AT89C51、晶振电路、数码管,发光二级管,按键。软件用汇编语言实现,主要包括主程序、倒计时、重启控制程序等软件模块。采用软硬件配合基本能实现设定定时时间倒计时功能,达到了设计的要求和目的。并在Proteus软件上进行了仿真和调试。 关键词 AT89C51单片机;定时器;倒计时

目录 摘要…………………………………………………………………………………………… 第一章绪论......................................................... 1.1定时器的发展................................................. 1.2 电子定时器的应用............................................... 1.3选题的目的和意义................................................ 1.4 本章小结 第二章单片机的基础知识 (3) 2.1单片机简介 (3) 2.2单片机的特点 (3) 2.3 本章小节 第三章功能实现及硬件介绍 (4) 3.1 设计功能实现 (4) 3.2 C51单片机引脚介绍 (9) 3.3时钟和复位电路 3.4数码管显示 (10) 3.5键盘 (12) 3.6电气原理图……………………………………………………… 3.7本章小结 第四章软件设计 (15) 4.1 程序流程图 (15) 4.2定时1秒设计 (16) 4.3重新启动 (17) 4.4程序 (17) 4.5 本章小结 结论................................................................ 参考文献............................................................ 致谢.........................................................................

单片机定时器2的使用

/*----------------------------------------------- 名称:定时器2 内容:通过定时让LED灯闪烁,数据口为:P0口 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义sfr T2MOD=0xC9; //定时器2模式控制寄存器地址;可以在头文件中定义 /*------------------------------------------------ 定时器初始化子程序 ------------------------------------------------*/ void T2_init(void) { T2CON=0; //配置定时器2控制寄存器,这里其实不用配置,T2CON上电默认就是0,这里赋值只是为了演示这个寄存器的配置 T2MOD=0; //配置定时器2工作模式寄存器,这里其实不用配置,T2MOD 上电默认就是0,这里赋值只是为了演示这个寄存器的配置 RCAP2H = (65536-60000)/256;//晶振12M 60ms 16bit 自动重载 RCAP2L = (65536-6000)%256; ET2=1; //打开定时器中断 EA=1; //打开总中断 TR2=1; //打开定时器开关 } /*------------------------------------------------ 主程序 ------------------------------------------------*/ main() { T2_init(); while(1); } /*------------------------------------------------ 定时器中断子程序 ------------------------------------------------*/ void T2_ISR(void) interrupt 5 using 1//定时器2中断 { //自动重装,无需再次赋初值! TF2=0;//!!!注意!!! 定时器2必须由软件对溢出标志位清零,硬件不能清零,这里与定时器0和定时器1不同!!! P0=~P0; }

单片机课程设计基于单片机的定时器设计

一、设计要求 (2) 1.1 设计内容及要求 (2) 1.2 设计方案及思路 (2) 二、系统硬件设计 (2) 2.1 硬件电路的总体设计方案及框图 (2) 2.2 各单元硬件设计 (3) 2.2..1 复位电路设计 (3) 2.2.2 时钟电路设计 (3) 2.2.3 显示电路设计 (4) 2.2.4 主要硬件元器件介绍 (4) 2.3 EDA辅助设计 (6) 2.3.1 定时器的原理图 (6) 2.3.2 定时器的PCB图 (6) 三、系统软件设计 (9) 3.1 主程序流程图 (9) 3.2定时子程序流程图 (9) 3.3 定时器完整程序 (12) 四、系统软件仿真 (15) 五、总结 (17) 六、参考文献 (17) 附录一:七段数码管字型码 (18) 附录二:元器件清单 (18)

摘要:本次课程设计是基于8051单片机控制的电子定时器设计。设计中应用了单片中断及LED显示等技术,经历了方案设计、电路硬件设计、软件设计、软件仿真等过程,经过此次课程设计掌握了单片机应用系统的设计过程,单片机应用系统的设计流程如图所示:

一、设计要求 1.1 设计内容及要求 以89C51单片机为核心,设计一个定时器,4位LED显示,分别显示10分,分,10秒,秒。定时范围从1秒到59分59秒,有按键设置定时时间,按开始键后开始计时,每过一秒刷新一次定时时间,若计时时间到,停止计时,并在LED上显示定时的时间。 仪器工作过程: 1、通电或复位状态显示0000; 2、由按键设置定时时间; 3、定时开始键按下,开始定时,每一秒刷新一次计时时间; 4、定时时间到,停止计时,4位LED显示设定时间; 5、复位后恢复初始状态,准备进行下一次定时。 1.2 设计方案及思路 根据设计要求,本系统初步设定由单片机系统、键0——3、LED显示组成。 1、按键的输入:键0——3四个键作为时间设定的控制键,由P1口输入 2、定时的显示电路:8051显示电路由4位共阴极数码管显示,由8051的串行口输出,并通过74LS164八位移位寄存器输入给数码管 二、系统硬件设计 2.1 硬件电路的总体设计方案及框图 设计一个控制系统总体设计方案很重要,关系设计接下来的操作程序,一下就是本设计的总体框架。 按照设计要求,确定硬件电路的总体设计方案,以8051单片机为核心的控制电路,设计总框图如图1所示,此定时电路包含:复位电路、时钟电路、按键输入、显示电路,这些控制电路将在硬件电路主要模块设计中详细介绍。

单片机定时器详解

一、MCS-51单片机的定时器/计数器概念 单片机中的定时器和计数器其实是同一个物理的电子元件,只不过计数器记录的是单片机外部发生的事情(接受的是外部脉冲),而定时器则是由单片机自身提供的一个非常稳定的计数器,这个稳定的计数器就是单片机上连接的晶振部件;MCS-51单片机的晶振经过12分频之后提供给单片机的只有1MHZ的稳定脉冲;晶振的频率是非常准确的,所以单片机的计数脉冲之间的时间间隔也是非常准确的,这个准确的时间间隔是1微秒; MCS-51单片机外接的是12MHZ的晶振(实际上是,所以,MCS-51单片机内部的工作频率(时钟脉冲频率)是12MHZ/12=1MHZ=1000000次/秒=1000000条指令/秒=1000000次/1000000微秒=1次/微秒=1条指令/微秒;也就是说,晶振振荡一次,就会给单片机提供一个时钟脉冲,花费的时间是1微秒,此时,CPU会执行一条指令,经历一个机器周期;即:1个时钟脉冲=1个机器周期=1微秒=1条指令; 注:个人PC机上的CPU主频是晶振经过倍频之后的频率,这一点恰好与MCS-51单片机的相反,MCS-51单片机的主频是晶振经过分频之后的频率; 总之:MCS-51单片机中的时间概念就是通过计数脉冲的个数来测量出来的;1个脉冲=1微秒=1条指令=1个机器周期; MCS-51单片机定时器/计数器的简单结构图: 8051系列单片机有两个定时器:T0和T1,分别称为定时器和定时器T1,这两个定时器都是16位的定时器/计数器;8052系列单片机增加了第三个定时器/计数器T2;它们都有定时或事件计数功能,常用于时间控制、延时、对外部时间计数和检测等场合; 二、定时器/计数器的结构

STC89C52单片机定时器2的使用

52单片机有3个定时器,T2是一个16位自动重载的,像T0和T1的方式2一样,只不过它是16位重载,如果作为计数器或定时用,中断用的是5,就是interrupt 5,T2的引脚是P1.0口。P1.0作为I/O 口用了以后T2计数是不行了,不过定时或是作为串口时钟还是可以的。 T2CON(T2的控制寄存器),字节地址0C8H: 0CFH 0CEH 0CDH 0CCH 0CBH 0CAH 0C9H 0C8H TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RT2 各位的定义如下: TF2:定时/计数器2溢出标志,T2溢出时置位,并申请中断。只能用软件清除,但T2作为波特率发生器使用的时候,(即RCLK=1或TCLK=1),T2溢出时不对TF2置位。 EXF2:当EXEN2=1时,且T2EX引脚(P1.0)出现负跳变而造成T2的捕获或重装的时候,EXF2置位并申请中断。EXF2也是只能通过软件来清除的。RCLK:串行接收时钟标志,只能通过软件的置位或清除;用来选择T1(RCLK=0)还是T2(RCLK=1)来作为串行接收的波特率产生器 TCLK:串行发送时钟标志,只能通过软件的置位或清除;用来选择T1(TCLK=0)还是T2(TCLK=1)来作为串行发送的波特率产生器 EXEN2:T2的外部允许标志,只能通过软件的置位或清除;EXEN2=0:禁止外部时钟触发T2;EXEN2=1:当T2未用作串行波特率发生器时,允许外部 时钟触发T2,当T2EX引脚输入一个负跳变的时候,将引起T2的捕获 或重装,并置位EXF2,申请中断。 TR2:T2的启动控制标志;TR2=0:停止T2;TR2=1:启动T2 C/T2:T2的定时方式或计数方式选择位。只能通过软件的置位或清除;C/T2=0:选择T2为定时器方式;C/T2=1:选择T2为计数器方式,下降沿触发。CP/RT2:捕获/重装载标志,只能通过软件的置位或清除。CP/RT2=0时,选择重装载方式,这时若T2溢出(EXEN2=0时)或者T2EX引脚(P1.0)出现负跳变

单片机实验-定时器计数器应用实验二教学文稿

单片机实验-定时器计数器应用实验二

定时器/计数器应用实验二 一、实验目的和要求 1、掌握定时器/计数器计数功能的使用方法。 2、掌握定时器/计数器的中断、查询使用方法。 3、掌握Proteus软件与Keil软件的使用方法。 4、掌握单片机系统的硬件和软件设计方法。 二、实验内容或原理 1、利用单片机的定时器/计数器以查询方式计数外 部连续周期性矩形波并在单片机口线上产生某一频率的连续周期性矩形波。 2、利用单片机的定时器/计数器以中断方式计数外 部连续周期性矩形波并在单片机口线上产生某一频率的连续周期性矩形波。 三、设计要求 1、用Proteus软件画出电路原理图,单片机的定时 器/计数器以查询方式工作,设定计数功能,对 外部连续周期性脉冲信号进行计数,每计满100 个脉冲,则取反P1.0口线状态,在P 1.0口线上 接示波器观察波形。 2、用Proteus软件画出电路原理图,单片机的定时 器/计数器以中断方式工作,设定计数功能,对 外部连续周期性脉冲信号进行计数,每计满200

个脉冲,则取反P1.0口线状态,在P 1.0口线上 接示波器观察波形。 四、实验报告要求 1、实验目的和要求。 2、设计要求。 3、电路原理图。 4、实验程序流程框图和程序清单。 5、实验结果(波形图)。 6、实验总结。 7、思考题。 五、思考题 1、利用定时器0,在P1.0口线上产生周期为200微秒的连续 方波,利用定时器1,对 P1.0口线上波形进行计数,满 50个,则取反P1.1口线状态,在P 1.1口线上接示波器观察波形。 原理图:

程序清单: /*功能:用计数器1以工作方式2实现计数(查询方式)每计满100个脉冲,则取反P1.0口线状态*/ ORG 0000H START:MOV TMOD,#60H MOV TH1,#9CH MOV TL1,#9CH MOV IE,#00H SETB TR1

基于单片机家用定时器设计

吉首大学 《单片机技术》课程设计报告项目名称:家用多功能定时器设计与制作专业年级:物理机电工程工程2012级 学号: 20124052023 学生姓名:刘锐 指导教师:陈善荣 报告完成日期2015 年7 月 1 日 评阅结果评阅教师

第一章绪论 (1) 1.1 系统背景 (1) 1.1.1 单片机的电子技术 (1) 1.1.2 定时器介绍 (1) 1.2 设计要求 (2) 第二章系统电路设计 (2) 2.1 设计框架介绍 (2) 2.2 系统硬件单元电路设计 (2) 2.2.1 复位电路设计 (2) 2.2.2 时钟电路设计 (3) 2.2.3 按键电路设计 (4) 2.3 系统硬件总电路 (4) 第三章系统软件设计 (5) 3.1 系统软件流程图 (5) 3.2 系统程序设计 (5) 3.2.1 主程序 (5) 3.2.2 中断程序 (12) 第四章实验结果和分析 (13) 4.1 实验使用的仪器设备 (13) 4.2测试结果分析 (13) 结束语 (13) 参考文献 (14)

第一章绪论 1.1 系统背景 1.1.1 单片机的电子技术 单片机是将CPU、RAM\ROM\定时器/计数器以及输入输出(I/O)接口等计算机的主要部件集成在一块的集成电路芯片,作为微机系统它还可以实现模/数转换、脉宽调制、计数器捕获/比较逻辑、高速I/O口和WDT各种控制功能。 通过在MCS-51系列的单片机中增设了全双工串行口I/O、片内数据存储器采用寻址范围为256kb的8位地址、均有四种工作方式的2个16位的定时/计数器、增加了中断系统、增设了颇具特色的布尔处理机、让单片机具有较强的指令寻址和运算功能这些技术,使单片机拥有了完善的外部并行总线(AB、DB、CB)具有多机识别功能的串行通信接口,规范了功能单元的特殊功能寄存器控制模式及适应控制器特点的布尔处理系统和指令系统,位发展具有良好兼容性的新一代单片机奠定了良好的基础。 单片机被广泛地应用在各种领域。例如用来作家用电器中如洗衣机、电冰箱、微波炉、电饭煲、电视机、录像机以及其他视频音像设备的控制器;在办公室中用作大量通信、信息的承载体,比如磁盘驱动、打印机、复印机、电话等;它还可以来构成电子秤、收款机、仓储安全检测系统、空气调节系统等冷冻保鲜系统等的专用系统;在工业中,像工业过程控制、过程监制以及机电一体化控制等系统都是以单片机为核心火多网络系统;它还可以构成一些智能仪表与集成智能传感器传统的控制电路,实现一些像存储、数据处理、查找、判断、联网和语音功能等智能化功能,还可以构成一些电子系统中的集中显示系统、动力检测控制系统、自动驾驶系统、通信系统以及运行监视器等的冗余网络系统。 1.1.2 定时器介绍 人类最早使用的定时工具是沙漏或水漏,但在钟表诞生发展成熟之后,人们开始尝试使用这种全新的计时工具来改进定时器,达到准确控制时间的目的。 1876年,英国外科医生索加取得一项定时装置的专利,用来控制煤气街灯的开关。它利用机械钟带动开关来控制煤气阀门。

单片机定时器实验

实验三单片机内部定时器应用 实验目的 1、理解单片机内部定时器的工作原理及使用方法 2、了解单片机定时中断程序的编写和调试方法 3、掌握定时器的基本使用方法 实验仪器 单片机开发板、万利仿真机、稳压电源、计算机 实验原理 1、单片机定时器的工原理 MCS-51 单片机内部有两个16 位可编程的定时器/计数器T0 和T1。它们即可用作定时器方式,又可用作计数器方式。其中T0 由TH0 和TL0 计数器构成;T1 由TH1 和TL1 计数器构成。 工作于定时器方式时,通过对机器周期(新型51单片机可以对振荡周期计数)的计数,即每一个机器周期定时器加1,来实现定时。故系统晶振频率直接影响定时时间。如果晶振频率为12MHZ,则定时器每隔(1/12MHZ)×12=1us 加1。 工作于计数器方式时,对P3.4 或P3.5 管脚的负跳变(1→0)计数。它在每个机器周期的S5P2 时采样外部输入,当采样值在这个机器周期为高,在下一个机器周期为低时,计数器加1。因此需要两个机器周期来识别一个有效跳变,故最高计数频率为晶振频率的1/24。 特殊功能寄存器TMOD 用于定时器/计数器的方式控制。高4 位用于设置T1,低4 位用于设置T0。如图4-7所示。 图4-7 定时器模式控制字格式 TCON 寄存器用于定时器的计数控制和中断标志。如图4-8所示。 图4-8 定时控制寄存器数据格式 编写程序控制这两个寄存器就可以控制定时器的运行方式。 单片机内部定时器/计数器的使用,简而概之:(1)如需用中断,则将EA和相关中断控制位置1;(2)根据需要设置工作方式,即对TMOD设置;(3)然后启动计数,即对TR0或TR1置1。(4)如使用中断,则计数溢出后硬件会自动转入中断入口地址;如使用查询,则必须对溢出中断标志位TF0或TF1进行判断。

51单片机学习笔记(三)_定时器和计数器

51单片机学习笔记(三)_定时器和计数器 注:定时器与计数器原理与使用方法相似、此处计数器知识为基础普及、后 面详讲2 个定时器(寄存器)、定时器0、定时器1、(计数器0、计数器1) TMOD:定时器/计数器模式控制寄存器详见百度百科TMOD 每经过一个机器周期、寄存器+1TF:定时器溢出标志。溢出时自动置1。中 断时硬件清零否则必须软件清零。TR:定时器运行控制位。置1 开始计时、清 零停止计时。C/T:该位为0 时用作计时器、该位为1 时用作计数器。溢出时 时间-开始计时时间=预设定时时间 一个机器周期共有12 个振荡脉冲周期若设定时为0.02s,则: 12*(65535-X)/11059200=0.02s 定时器作加1 次数:X=47104=0xB800 次时间为0.02s 使用定时器的方法 1、设置特殊功能寄存器TMOD,使之工作在需求的状态。 2、设置计数寄存 器的初值,精确设定好定时时间。3、设置特殊功能寄存器TCON,通过打开 TR 来让定时器进行工作。 4、判断寄存器TCON 的FT0 位、检测定时器溢出情况。 假设我们使用定时器0、定时为0.02s,两个寄存器计时 TMOD=0x01; TMOD=0x01,指的是采用T0 方式,将M1 置0,M0 置1,是 方式一的定时器 高八位寄存器TH0=0xB8、低八位寄存器TL0=0x00 C 程序实现1s 钟定时 #include typedef unsigned char uint8;typedef unsigned int uint16;sbit led=P1;uint8 counter;void main(){TMOD=0x01;TH0=0xb8;TL0=0x00;TR0=1;

相关文档
最新文档