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

合集下载

【报告】单片机定时器计数器实验报告

【报告】单片机定时器计数器实验报告

【关键字】报告单片机定时器计数器实验报告篇一:单片机计数器实验报告计数器实验报告㈠实验目的1. 学习单片机内部定时/计数器的使用和编程方法;2. 进一步掌握中断处理程序的编程方法。

㈡实验器材1. 2. 3. 4. 5.G6W仿真器一台MCS—51实验板一台PC机一台电源一台信号发生器一台㈢实验内容及要求8051内部定时计数器,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数,使用8051的T1作定时器,50ms中断一次,看T0内每50ms来了多少脉冲,将计数值送显(通过LED发光二极管8421码来表示),1秒后再次测试。

㈣实验说明1. 本实验中内部计数器其计数器的作用,外部事件计数器脉冲由P3.4引入定时器T0。

单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变,这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样,同时这就决定了输入波形的频率不能超过机器周期频率。

2. 计数脉冲由信号发生器输入(从T0端接入)。

3. 计数值通过发光二极管显示,要求:显示两位,十位用L4~L1的8421码表示,个位用L8~L5的8421码表示4. 将脉搏检查模块接入电路中,对脉搏进行计数,计算出每分钟脉搏跳动次数并显示㈤实验框图(见下页)程序源代码ORG 00000H LJMP MAINORG 001BH AJMP MAIN1 MAIN:MOV SP,#60HMOV TMOD,#15H MOV 20H,#14H MOV TL1,#0B0H MOV TH1,#3CHMOV TL0,#00H;T0的中断入口地址;设置T1做定时器,T0做计数器,都于方式1工作;装入中断次数;装入计数值低8位;装入计数值高8位MOV TH0,#00HSETB TR1 ;启动定时器T1 SETB TR0 ;启动计数器T0 SETB ET1 ;允许T1中断SETB EA ;允许CPU中断SJMP $;等待中断MAIN1: PUSH PSW PUSH ACC CLR TR0CLR TR1 MOV TL1,#0B0H MOV TH1,#3CHDJNZ 20H,RETUNT MOV 20H ,#14HSHOW: MOV R0,TH0 MOV R1,TL0MOV A,R1 MOV B,#0AH DIV ABMOV C,ACC.3MOV P1.0,C MOV C,ACC.2 MOV P1.1,C MOV C,ACC.1 MOV P1.2,C MOV C,ACC.0 MOV P1.3,CMOV A,B MOV C,ACC.3MOV P1.4,C MOV C,ACC.2 MOV P1.5,C MOV C,ACC.1 MOV P1.6,C MOV C,ACC.0MOV P1.7,C ;保护现场;装入计数值低8位;装入计数值高8位,50ms;允许T1中断;未到1s,继续计时;1s到重新开始;显示计数器T0的值;读计数器当前值;将计数值转为十进制;显示部分,将A中保存的十位赋给L0~L3 将B中保存的各位转移到A中;将个位的数字显示在L4~L7上;RETUNT:MOV TL0,#00H;将计数器T0清零MOV TH0,#00HSETB TR0SETB TR1POP ACCPOP PSWRETI ;中断返回在频率为1000HZ时,L0~L7显示为50;频率为300HZ时,L0~L7显示为15,结果正确,程序可以正确运行。

单片机实验报告

单片机实验报告

单片机实验报告学院:姓名:学号:指导老师:目录第一章实验内容、目的及要求 (2)一、内容 (2)二、目的及要求 (3)第二章实验 (3)实验一数字量输入输出实验 (3)实验二定时器/计数器实验 (4)实验三A/D、D/A转换实验 (11)实验四串行通信设计 (20)第三章实验体会 (28)第一章实验内容、目的及要求一、内容实验一数字量输入输出实验阅读、验证C语言程序功能。

使用汇编语言编程,完成实验指导书之“3.1 数字量输入输出实验”基本实验项目。

实验二定时器/计数器实验阅读、验证C语言程序功能。

使用汇编语言编程,完成实验指导书之“3.3 定时/计数器实验”基本实验项目。

提高部分:定时器控制LED灯由单片机内部定时器1,按方式1工作,即作为16位定时器使用每0.05秒钟T1溢出中断一次。

P1口的P1.0-P1.7分别接八个发光二极管。

编写程序模拟时序控制装置。

开机后第一秒钟L1,L3亮,第二秒钟L2,L4亮,第三秒钟L5,L7亮,第四秒钟L6,L8亮,第五秒钟L1,L3,L5,L7亮,第六秒钟L2,L4,L6,L8亮,第七秒钟八个LED灯全亮,第八秒钟全灭,以后又从头开始,L1,L3亮,然后L2,L4亮……一直循环下去。

实验三A/D、D/A转换实验阅读、验证C语言程序功能。

使用汇编语言编程,完成实验指导书之“4.3 A/D转换实验”项目(P64)和“4.4 D/A转换实验”项目。

提高部分:(要求:Proteus环境下完成)小键盘给定(并显示工作状态),选择信号源输出波形类型(D/A 转换方式),经过A/D采样后,将采样数据用LED灯,显示当前模拟信号值大小及变化状态。

实验四串行通讯实验阅读、调试C语言程序功能。

使用汇编语言编程,完成实验指导书之“3.7 串口通讯实验”项目。

(要求:实验仪器上完成)提高部分:(要求:Proteus环境下完成)利用单片机实验系统,实现与PC机通讯。

功能要求:将从实验系统键盘上键入的数字,字母显示到PC机显示器上,将PC机键盘输入的字符(0-F)显示到单片机实验系统的数码管上。

单片机 第五章2 单片机的定时器计数器

单片机 第五章2 单片机的定时器计数器

若晶振频率为6MHz,1个机器周期为1/6 x 10-6 x12=2μs 则最小定时时间为:[213 –(213 -1)]x2μs=2μs 最大定时时间为:[213 –0] x2μs=16384μs =16.384ms
2、 方式1 (T1,T0) 当M1M0两位为 01时,定时 /计数器被选为工作方式 1,16位计数器,其逻辑结构 如图 所示。
8FH TCON TF1 8EH TR1 8DH TF0 8CH TR0 8BH IE1 8AH IT1 89H IE0 88H IT0
TF1(TCON.7, 8FH位)----定时器T1中断请求溢出标志位。 TF0(TCON.5, 8DH位)----定时器T0中断请求溢出标志位。 TR1(TCON.6, 8EH位)----T1运行控制位。 0:关闭T1;1:启动T1运行。只由软件置位或清零。 TR0(TCON.4, 8CH位)----T0运行控制位。 0:关闭T0;1:启动T0运行。只由软件置位或清零。
1、 方式0 (T1,T0)
当 M1M0两位为 00时,定时 /计数器被选为工作方式 0, 13位计数器,其逻辑结 构如图所示。
振荡器 ÷12 C/ T = 0 TL0 低5位 C/ T = 1 控制 T0 端 TR0 GATE INT0 端 TH0 高8 位 TF0 中断
+
在方式0下,计数工作方式时,计数值的范围是: 1~8192(213 ) 定时工作方式时,定时时间的计算公式为: (213一计数初值)×晶振周期×12 或(213一计数初值)×机器周期
例4:用定时器l 以工作方式2计数,每计100次进行累计器加1操作.
(1)计算计数初值. 28—100=156D=9CH TH1=9CH,TL1=9CH TMOD寄存器初始化:MlM0=10,C/T=1,GATE=0 因此 TMOD=60H (2)程序设计序设计

认识单片机的定时器计数器

认识单片机的定时器计数器

void main(void) { TMOD=0x01;
TH0=-25000/256; TL0=-25000%256; TR0=1; ET0=1; EA=1; while(1); } void timer0(void) interrupt 1 { TH0=-25000/256;
TL0=-25000%256; P10=~P10; }
根据定时时间T,及公式(1)、(2)分别可以求出初 值N为:
方式1: N=216-T×fosc/12
(3)
方式2、方式3 :N=28-T×fosc/12 (4)
如果fosc=12MHZ,以上公式可简化为
方式1: N=216-T
方式2、方式3 :N=28-T
例如:系统的时钟频率是12MHz,在方式1下,如果希望定时 器/计数器T0的定时时间T为10ms,则初值N =216-T=6553610000=55536
任务一、认识单片机的定时器/计数器
一、定时器/计数器及其应用 在单片机应用系统中,定时或计数是必不可少的。例如: 测量一个脉冲信号的频率、周期,或者统计一段时间里 电机转动了多少圈等。常用的定时方法有:
1、软件定时 软件定时是依靠执行一段程序来实现的,这段程序本身 没有具体的意义,通过选择恰当的指令及循环次数实现 所需的定时,由于执行每条指令都需一定的时间,执行 这段程序所需总的时间就是定时时间。 软件定时的特点是无需硬件电路,但定时期间CPU被占 用,增加了CPU的开销,因此定时时间不宜过长,而且 定时期间如果发生中断,定时时间就会出现误差。
led=_crol_(led,1); 满10次变量led左移1位送P0口
P0=led;
}
}
[案例3] 用定时器的计数方式实现外部中断。如图 所示,P0口控制8只发光管轮流点亮,发光管点 亮时间为500ms,单脉冲电路控制发光管的移动 方向,按下单脉冲按钮,发光管左移,再按下发 光管右移 。

中断与定时器和计数器实验

中断与定时器和计数器实验

中断与定时器和计数器实验一、实验目的:1.掌握单片机的中断的原理、中断的设置,掌握中断的处理及应用2.掌握单片机的定时器/计数器的工作原理和工作方式,学会使用定时器/计数器二、实验内容:(一)、定时器/计数器应用程序设计实验1.计数功能:用定时器1方式2计数,每计数满100次,将P1.0取反。

(在仿真时,为方便观察现象,将TL1和TH1赋初值为0xfd,每按下按键一次计数器加1,这样3次就能看到仿真结果。

)分析:外部计数信号由T1(P3.5)引脚输入,每跳变一次计数器加1,由程序查询TF1。

方式2有自动重装初值的功能,初始化后不必再置初值。

将T1设为定时方式2,GATE=0,C/T=1,M1M0=10,T0不使用,可为任意方式,只要不使其进入方式3即可,一般取0。

TMOD=60H。

定时器初值为X=82-100=156=9CH,TH1=TL1=9CH。

(1)硬件设计硬件设计如图所示(2)C源程序#include "reg51.h" sbit P1_0=P1^0;void main(){TMOD=0x60;TH1=0xfd;TL1=0xfd;TR1=1;ET1=1;while(1){if(TF1==1){P1_0=~P1_0;TF1=0;}}}(3)proteus仿真通过Keil编译后,利用protues软件进行仿真。

在protues ISIS 编译环境中绘制仿真电路图,将编译好的“xxx.hex”文件加入AT89C51。

启动仿真,观察仿真结果。

(二)中断应用程序设计实验2.中断定时使用定时器定时,每隔10s使与P0、P1、P2和P3端口连接的发光二极管闪烁10次,设P0、P1、P2和P3端口低电平灯亮,反之灯灭。

分析:中断源T0入口地址000BH;当T0溢出时,TF0为1发出中断申请,条件满足CPU响应,进入中断处理程序。

主程序中要进行中断设置和定时器初始化,中断服务程序中安排灯闪烁;TL0的初值为0xB0,TH0的初值为0x3C,执行200次,则完成10s定时。

定时器计数器实验报告

定时器计数器实验报告

定时器计数器实验报告简介:定时器是一种用来产生、计数和处理时间信号的计时装置。

在数字电路中,定时器主要分为内部定时器和外部定时器两类,内部定时器是在单片机内部实现的,外部定时器则是通过外部电路实现的。

计数器则是一种用来计数的电子元件,根据不同的使用场合和要求,计数器可以分为多种类型。

在嵌入式系统中,定时器计数器应用广泛,例如在时钟、延时、计数等方面都有很大的作用。

实验目的:1. 学习定时器和计数器的基本原理及应用。

2. 熟悉定时器和计数器在单片机中的编程方法。

3. 掌握通过定时器和计数器实现延时和计数功能的方法。

实验器材:1. STM32F103C8T6开发板2. ST-LINK V2下载器3. 电脑实验内容:一、实验1:使用定时器和计数器实现延时功能1. 在Keil C中新建一个工程,并编写以下程序代码:```#include "stm32f10x.h"void TIM2_Int_Init(u16 arr,u16 psc){TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure ;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);TIM_TimeBaseStructure.TIM_Period = arr;TIM_TimeBaseStructure.TIM_Prescaler=psc;TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode _Up;TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE );NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);TIM_Cmd(TIM2, ENABLE);}void TIM2_IRQHandler(void){if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) {TIM_ClearFlag(TIM2, TIM_FLAG_Update);GPIO_WriteBit(GPIOB,GPIO_Pin_12,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_12)));}}int main(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure);TIM2_Int_Init(9999,7199);while (1);}```2. 将STM32开发板连接到电脑,并下载程序到开发板中。

定时器计数器应用实验报告

定时器计数器应用实验报告

实验名称:定时器/计数器应用实验日期:见自己实验数据得分:同组人:不填指导教师:姓名一、实验目的1.掌握51单片机定时器/计数器的基本结构、工作原理和工作方式。

2.掌握定时器/计数器T0、T1工作在定时器和计数器两种状态下的编程方法。

3.学习和掌握定时器/计数器工作在定时器和计数器两种状态下,分别采用中断和查询方式控制的编程方法。

4.熟练掌握利用软件扩展定时器/计数器量程的原理和编程技巧。

二、实验设备PC机一台,单片机实验系统一套三、实验内容设定时器/计数器工作于定时方式,定时时间为100ms,每当100ms到申请中断。

每10秒种将A的内容循环左移一次,送P1口显示。

四、实验原理51单片机有2个16位的定时器/计数器,分别是T0和T1。

它们有两种工作状态,可以工作在定时方式和计数方式;定时是对内部的机器周期进行加法计数,计数是对外部输入的计数脉冲进行加法计数,T0的外部计数脉冲从P3.4引脚输入,T1的外部计数脉冲从P3.5引脚输入;计数满产生溢出,硬件使定时器/计数器T0、T1的中断请求标志TF0、TF1置位;如果定时器/计数器允许中断,则可以采用中断方式进行溢出处理,而如果定时器/计数器不允许中断,则可以采用查询方式进行溢出处理。

若定时器/计数器T0工作在定时状态,在实验系统的晶振频率f OSC=12MH Z时,T0工作在方式1,16位最大计数量程,最长的定时时间是65mS多,要想实现10S定时,必须对T0进行量程扩展。

实验中采用R7进行软件扩展,即R7对T0定时50mS进行计数,计数200次就是定时10S。

每10S对累加器A进行一次左移,然后送P1口显示。

实验电路连接图如图1所示。

图1 定时器/计数器应用实验接线图根据此实验原理编写的实验源程序清单见附页。

五、实验步骤1.在E盘下为工程建立文件夹姓名3;2.新建工程项目文件姓名3.uv2,保存在文件夹姓名3中,并为工程选择目标器件为AT公司的AT89S51;3.编辑源程序,建立源文件姓名3.ASM,保存在文件夹姓名3中;4.将源文件姓名3.ASM添加到工程项目组中;5.设置调试环境,选择调试模式为Proteus软件仿真;6.运行程序,根据设计的数据记录表格进行实验,观察发光管显示的状态,并记录实验现象;7.实验数据经过实验指导教师检查正确后,实验结束。

单片机定时器与计数器

单片机定时器与计数器

定时器计数器原理及应用一、知识点1、定时器/计数器的结构2、定时器和计数器两种工作模式3、工作方式控制寄存器TMOD4、定时器/计数器控制寄存器TCON5、定时器/计数器的4种工作方式方式0:13位计数器方式1:16位计数器方式2:8位可自动重装初值方式方式3只适用于T0,T1不能工作在方式36、定时器/计数器的初始化及编程实现(1)设置TMOD寄存器(2)计算定时器T0的计数初值X(3)设置IE寄存器(4)启动和停止定时器7、定时器的单次最大定时时间:2M*12/晶振频率9、定时器应用(方式1、2;编程:中断方式、查询方式)10、计数器应用(方式1、2;编程:中断方式、查询方式)二、复习题(一)判断题1、在MCS-51单片机内部结构中,TMOD为模式控制寄存器,主要用来控制定时器的启动与停止。

(F)2、在MCS-51单片机内部结构中,TCON为控制寄存器,主要用来控制定时器的启动与停止。

(T)3、MCS-51单片机的两个定时器的均有两种工作方式,即定时和计数工作方式。

(T)4、MCS-51单片机的TMOD模式控制寄存器不能进行位寻址,只能用字节传送指令设置定时器的工作方式及操作模式。

(T)5、定时器/计数器T1于定时模式,工作于方式2,则工作方式字为20H。

(T)6、定时器/计数器T1于计数模式,工作于方式1,则工作方式字为50H。

(T)7、单片机8051的定时/计数器是否工作可以,通过外部中断进行控制。

(T)8、定时/计数器工作于定时方式时,是通过8051片内振荡器输出经12分频后的脉冲进行计数,直至溢出为止。

(T)9、定时/计数器工作于计数方式时,是通过8051的P3.4和P3.5对外部脉冲进行计数,当遇到脉冲下降沿时计数一次。

(T)10、定时/计数器在工作时需要消耗CPU的时间。

(F)11、定时/计数器在使用前和溢出后,必须对其赋初值才能正常工作。

(F)12、特殊功能寄存器SCON,与定时器/计数器的控制无关。

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

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

、实验目的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 口线上接示波器观察波形。

tJI-JTTALlRSTIPO 1 Z^Cil POiPD 3/jfiD3 IPCLW/MH FD-5/^CB”血P2 O/jtS PNUMa P 2 .2/AJOPI F3JD/RKDP1 且1门池F1 2P1 .3P3^/|NT1 卩11 .4P3.4Z1D P1.5 P3 .5fT1 尸1P3.0AA/RP1I.7 P3.?/RD17三、电路原理图 18HQAT69C52P 2 .4/A12P2 5/A13 P2P2 .7XA1«5蝕丘2Q 37答:程序见程序清单四、实验程序流程框图和程序清单1、定时器/计数器以查询方式工作,对外部连续周期性脉冲信号进行计数,MAIN: MOV IE, #00HMOV TMOD, #60H MOV TH1, #9CH MOV TL1, #9CH SETB TR1LOOP: JNB TF1, LOOP CLRTF1 CPL P1.0 AJMP LOOP ENDC 语言程序:#in elude <reg52.h> sbit Y=P1A0; void mai n() {EA=0; ET1=0; TMOD=0x60;TH1=0x9C;计数数值初始化中断断 艙化!l[启动 =时器1 器一、r动 启N箱 * 1溢断清计数溢出标志—1 ~ P1.(口线取反TL 仁 0x9C; while(1) { TR1=1; while(!TF1); TF1=0; Y=!Y; } }2、定时器/计数器以中断方式工作,对外部连续周期性脉冲信号进行计数, 每计满200个脉冲,则取反P1.0 口线状态。

单片机定时器及外部中断实验报告

单片机定时器及外部中断实验报告

单片机实验报告(二)实验名称:定时器及外部中断*名:**学号:*********班级:通信2班时间:2013.11南京理工大学紫金学院电光系一、实验目的1、学习定时/计数器的应用;2、学习外部中断技术的基本使用方法;3、学习中断处理程序的编程方法。

二、实验原理(1)以P1口作为输出口,定时器实现1s定时,实现显示数的1s加1,外部中断0键盘外接BUTTON,实现对显示数快速加1的控制。

(2)系统板上硬件连线把“单片机系统”A2区的J61接口的P1.0~P1.6端口与D1区的J52接口相连。

把“单片机系统”A2区的INT0端口用导线连接到D1区的KEY1端口上;三、实验内容利用定时器中断控制1s的输出,使用外部中断0使得显示的数加1. 程序如下:#include<reg51.h>#define uchar unsigned char#define uint unsigned intvoid delay(){uint x,y;for(x=100;x>0;x--)for(y=110;y>0;y--);}uchar m,flag;void main(){uchar a,b;TMOD=0x01;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EX0=1; EX1=1; PX1=1; ET0=1; EA=1; 中断开启TR0=1;m=0; P1=0;while(1){while(flag==0); flag=0;if(m==100) m=0;m++;a=m/10;b=m+a*6;P1=b;}}void timer0() interrupt 1 using 0{uchar t;TH1=(65536-50000)/256;TL1=(65536-50000)%256;if(t<20) t++;else { flag=1; t=0; }}void exter0() interrupt 0 using 1{if(INT0==0) delay();if(INT0==0) flag=1;}void exter1() interrupt 2 using 2{if(INT1==0) delay();if(INT1==0) m=0;}将编译好的程序下载到仿真电路中四、小结与体会通过本次定时器中断实验,我对定时器的工作原理有了更加深入的理解,这也是建立在向同学请教的基础上。

单片机定时器计数器的应用(附图)

单片机定时器计数器的应用(附图)

定时器的应用一、普通模式和CTC模式1、利用T/C0的普通模式,从PA0引脚输出一个频率为10KHz的方波。

(假设系统时钟为4MHZ)设计思路:10KHz的周期为100us,故需要定时的时间为50 us,即每50 us进入溢出中断,对PA0取反一次。

时钟源取系统时钟的8分频,f=4MHZ/8=500KHZ,T时钟源=2us,所以计数的次数n=50us/2us=25,根据普通模式的特点,计数的初值N=256-25=231。

#include <mega16.h>interrupt [10] void tim0_isr(void){TCNT0=231;PORTA.0=~PORTA.0;}void main(void){DDRA.0=1;PORTA.0=0;TCNT0=231;TCCR0=0B00000010;TIMSK=0X01;SREG.7=1;while(1);}2、利用T/C0的CTC模式,从PA0引脚输出一个频率为10KHz的方波。

(假设系统时钟为4MHZ)设计思路:同上,计数的次数n=50us/2us=25,根据CTC模式计数的特点(从0开始计到OCR0,然后进入匹配中断),OCR0的值N=n=25,且不会被改变,无需重装。

#include <mega16.h>interrupt [20] void tim0_isr(void){PORTA.0=~PORTA.0; //OCR0的值没必要重装}void main(void){DDRA.0=1;PORTA.0=0;OCR0=25;TCCR0=0B00001010;TIMSK=0X02;SREG.7=1;while(1);}3、利用T/C0的CTC模式,从OC0引脚输出一个频率为10KHz的方波。

(假设系统时钟为4MHZ)设计思路:根据CTC的特点和题意,得:f OC0=f clki/o/(2N(1+0CR0))=4M/(2N(1+OCR0))=10K,取N=1,OCR0=199。

单片机定时器计数器使用方法

单片机定时器计数器使用方法

单片机定时器计数器使用方法单片机作为嵌入式系统开发的核心部件之一,其定时器计数器具有重要的作用。

定时器计数器可以帮助我们实现时间控制、精确计时等功能。

本文将介绍单片机定时器计数器的使用方法,包括计数模式的设置、时钟选择和定时器中断的应用。

一、计数模式设置单片机定时器计数器可以分为定时计数和事件计数两种模式。

定时计数模式是根据设定的时间间隔进行计数,而事件计数模式是在外部事件触发下进行计数。

下面是单片机定时器计数器初始化的基本步骤:1. 确定计数模式:根据实际需求确定是使用定时计数模式还是事件计数模式。

2. 设置计数器初始值:根据所需的计数时间或计数事件的频率,设置计数器的初始值。

3. 配置计数器控制寄存器:设置计数器的计数模式、时钟源以及其他需要的参数。

4. 启动计数器:使能定时器计数器工作。

二、时钟选择单片机定时器计数器的时钟源可以选择内部时钟或外部时钟。

一般来说,内部时钟具有较高的精度和稳定性,使用起来更为方便。

以下是两种常见的时钟选择方式:1. 使用内部时钟:选择单片机内部提供的时钟源作为定时器计数器的时钟,通过设置寄存器来配置时钟源的频率。

2. 使用外部时钟:当需要更高的计数精度时,可以选择外部时钟源,将外部时钟接入到单片机的引脚,并在寄存器中配置外部时钟源。

三、定时器中断的应用定时器中断是单片机定时器计数器的重要应用之一,可以帮助我们实现精确的时间控制和任务调度。

下面是使用定时器中断的基本步骤:1. 配置中断向量表:为定时器中断向量分配一个唯一的中断向量地址,并将中断处理函数与之关联。

2. 配置中断优先级:如果系统中存在多个中断,需要根据实际情况为定时器中断配置适当的优先级。

3. 设置定时器计数器的中断触发条件:根据需求设置定时器计数器中断触发的条件,可以是定时完成或者达到指定的计数值。

4. 编写中断处理函数:编写定时器中断处理函数,完成需要执行的任务。

5. 启用定时器中断:使能定时器中断,将定时器计数器中的中断触发条件与中断处理函数关联起来。

单片机实验报告总结

单片机实验报告总结

单片机实验报告总结单片机实验报告总结单片机实验心得体会单片机实验心得体会时间过得真快,不经意间,一个学期就到了尾声,进入到如火如荼的期末考试阶段。

在学习单片机这门课程之前,就早早的听各种任课老师和学长学姐们说过这门课程的重要性和学好这门课程的关键~~多做单片机实验。

这个学期,我们除了在课堂上学习理论知识,还在实验室做了7次实验。

将所学知识运用到实践中,在实践中发现问题,强化理论知识。

现在,单片机课程已经结束,即将开始考试了,需要来好好的反思和回顾总结下了。

第一次是借点亮LED灯来熟悉keil软件的使用和试验箱上器材。

第一次实验体现了一个人对新事物的接受能力和敏感度。

虽然之前做过许多种实验。

但依旧发现自己存在一个很大的问题,对已懂的东西没耐心听下去,容易开小差;在听老师讲解软件使用时,思路容易停滞,然后就跟不上老师的步骤了,结果需要别人再次指导;对软件的功能没有太大的热情去研究探索,把一个个图标点开,进去看看。

所以第一次试验相对失败。

鉴于此,我自己在宿舍下载了软件,然后去熟悉它的各个功能,使自己熟练掌握。

在做实验中,第二个问题应该是准备不充分吧。

一开始,由于没有课前准备的意识,每每都是到了实验室才开始编程,完成作业,导致每次时间都有些仓促。

后来在老师的批评下,认识到这是个很大的问题:老师提前把任务告诉我们,就是希望我们私下把程序编好。

于是我便在上机之前把程序编好,拷到U盘,这样上机时只需调试,解决出现的问题。

这样就会节约出时间和同学讨论,换种思路,换种方法,把问题给吃透。

发现、提出、分析、解决问题和实践能力是作为我们这个专业的基本素质。

三是我的依赖性很大,刚开始编程序时喜欢套用书上的语句,却对语句的理解不够。

于是当程序出现问题时,不知道如何修改,眼前的程序都是一块一块的被拼凑整合起来的,没法知道哪里错了。

但是编程是一件很严肃的事情,容不得半点错误。

于是便只能狠下决心,坚持自己编写,即使套用时,也把每条语句弄懂。

单片机定时器计数器应用

单片机定时器计数器应用

为了获得1秒时间,T0中断需要发生200次。程序包含主函
数,T0的初始化函数和T0中断服务函数,显示语句放在中
断服务函数内,程序如下:
/******************************************************************/ #include<reg51.h> code unsigned char seven_seg[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char cp,i; //声明全局变量 void timer0_isr(void) interrupt 1 // timer0中断服务函数 { TR0 = 0; //停止计数 TL0 = 0x78; // TL0重新预置 TH0 = 0xec; // TH0重新预置 TR0 = 0; //开始计数 cp++; // timer0中断1次,变量cp加1 if(cp == 200) //中断200次,时间刚好为1秒 { cp = 0; i ++; }
项目5 单片机定时器/计数器应用
5.1任务说明
任务:利用单片机内部定时器/计数器中断实现一个数码管 的秒记数,重点学习定时器/计数器的工作方式以及
其控制寄存器TMOD、TCON的功能,在程序实现
过程中掌握定时器/计数器中断的一般步骤。
5.2 单片机的定时/计数器结构
51单片机内部含有两个定时器/计数器,分别是T0和 T1,在增强型51系列单片机中,如STC89C51RC,内部出了 含有T0和T1外,还有T2定时器/计数器。定时器/计数器主 要由于精确的定时,也可用于对外部脉冲进行计数以及为

单片机定时器计数器工作原理

单片机定时器计数器工作原理

单片机定时器计数器工作原理单片机定时器计数器是单片机中非常重要的一个模块,它通常用于实现各种定时和计数功能。

通过定时器计数器,单片机能够精准地进行定时操作,实现定时中断、计数、脉冲生成等功能。

本文将详细介绍单片机定时器计数器的工作原理。

1. 定时器计数器的功能单片机定时器计数器通常由若干寄存器和控制逻辑组成,可以实现以下几种功能:- 定时功能:通过设置计数器的初始值和工作模式,可以实现一定时间的定时功能,单片机能够在计时结束时触发中断或产生输出信号。

- 计数功能:可以实现对外部信号的计数功能,用于测量脉冲个数、频率等。

也可以用于实现脉冲输出、PWM等功能。

- 脉冲发生功能:可以在一定条件下控制定时器输出脉冲,用于控制外部器件的工作。

2. 定时器计数器的工作原理定时器计数器的工作原理可以分为初始化、计数及中断处理几个基本环节。

(1)初始化:在使用定时器前,需要对定时器计数器进行初始化设置。

主要包括选择工作模式、设置计数器的初始值、开启中断等。

不同的单片机厂商提供了不同的定时器初始化方式和寄存器设置方式,通常需要查阅相关的单片机手册来进行设置。

(2)计数:初始化完成后,定时器开始进行计数工作。

根据不同的工作模式,定时器可以以不同的频率进行计数。

通常采用的计数源是内部时钟频率,也可以选择外部时钟源。

通过对计数器的频率设置和初始值的设定,可以实现不同的定时功能。

(3)中断处理:在定时器计数完成后,可以触发中断来通知单片机进行相应的处理。

通过中断服务程序,可以定时执行一些任务,或者控制一些外部设备。

中断服务程序的编写需要根据具体的单片机和编程语言来进行相应的设置。

3. 定时器计数器的应用定时器计数器广泛应用于各种嵌入式系统中,最常见的应用包括定时中断、PWM输出、脉冲计数、定时控制等。

可以利用定时器计数器实现LED呼吸灯效果、马达控制、红外遥控编码等功能。

在工业自动化、通信设备、电子仪器等领域也有着广泛的应用。

单片机定时器,计数器

单片机定时器,计数器

第六章定时器/计数器第一节概述8051内部提供两个十六位的定时器/计数器T0和T1,它们既可以用作硬件定时,也可以对外部脉冲计数。

1.计数功能:所谓计数功能是指对外部脉冲进行计数。

外部事件的发生以输入脉冲下降沿有效,从单片机芯片T0(P3.4)和T1(P3.5)两个引脚输入,最高计数脉冲频率为晶振频率的1/24。

2.定时功能:以定时方式工作时,每个机器周期使计数器加1,由于一个机器周期等于12个振荡脉冲周期,因此如单片机采用12MHz晶振,则计数频率为12MHz/12=1MHz。

即每微秒计数器加1。

这样就可以根据计数器中设置的初值计算出定时时间。

第二节定时器/计数器的基本结构、工作方式及应用一、定时器/计数器基本结构定时器/计数器的基本结构如图6-1。

T0由TH0和TL0两个八位二进制加法计数器组成十六位二进制加法计数器;T1由TH1和TL1两个八位二进制加法计数器组成十六位二进制加法计数器。

图6-1 定时器/计数器基本组成110二、定时器/计数器控制寄存器1.定时器方式控制寄存器TMOD定时器方式控制寄存器地址89H,不可位寻址。

TMOD寄存器中高4位定义T1,低4位定义T0。

其中M1,M0用来确定所选工作方式如表6—1:定时/计数器T1 定时/计数器T0111定时器控制寄存器TCON地址88H,可以位寻址,TCON主要用于控制定时器的操作及中断控制。

有关中断内容在第四章已说明。

此处只对定时控制功能加以介绍。

表6—2给出了TCON有关控制位功能:系统复位时,TMOD和TCON寄存器的每一位都清零。

112113三、工作方式及应用用户可通过编程对专用寄存器TMOD 中的M1,M0位的设置,选择四种操作方式。

(一)方式0(以T0为例)在此方式中,定时寄存器由TH0的8位和TL0的5位(其余位不用)组成一个13位计数器。

当GATE=0时,只要TCON 中的TR0为1,13位计数器就开始计;当GATE=1以及TR0=1时,13位计数器是否计数取决于INT0引脚信号,当INT0由0变1时开始计数,当INT0由1变为0时停止计数。

单片机实验二 定时器实验程序

单片机实验二 定时器实验程序
sbit L2=P0^6;
sbit L3=P0^7;
unsigned char keynum;
unsigned int lasttime=100;
bit bset=0;
unsigned char keyscan();
void display();
unsigned char getkey();
void set();
code unsigned char table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};
sbit H1=P3^6;
sbit H2=P3^7;
sbit L1=P0^5;
void main()
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
P1M1=0x00;
P1M0=0xff;
while(1)
{
keynum=keyscan();
display();
set();
}
}
void timer0() interrupt 1
{
P1=0X00;
W1=1;
W2=0;W3=1;W4=1;
P1=table[(unsigned char)(lasttime%1000/100)]|a;
}
else if(ct1<60)
{
P1=0X00;
W2=1;
W3=0;W4=1;W1=1;
P1=table[(unsigned char)(lasttime%1000%100/10)]|a;

实验二 单片机定时器计数器编程

实验二  单片机定时器计数器编程

实验二单片机定时器/计数器编程一、实验目的1、掌握单片机定时器/计数器的工作方式;2、掌握单片机定时器/计数器的编程方法。

二、实验内容1、学习单片机定时器/计数器的工作方式、初始化以及应用等;2、利用单片机定时器/计数器编写程序驱动开发板上的LED灯按一定规律工作。

基本要求:利用定时器1控制LEDB闪烁,闪烁频率为2Hz。

提高要求:读懂教材定时器/计数器的应用实例4和5,在实验室开发板上采用分模块设计的方法编程实现以下两个任务之一:1、控制LEDB闪烁,2.5秒一个周期,亮0.5s,灭2s,周而复始。

2、将教材例5对P1.0和P1.1的控制,改为对LEDB和LEDG的控制,时序不变。

三、实验设备1、STC单片机开发板;2、PC机以及串口线。

四、实验分析及关键代码(1)利用定时器1控制LEDB闪烁,闪烁频率为2Hz。

实验分析:控制LEDB闪烁,频率为2Hz,即0.5s。

解决思路:定时器工作方式选0x01,计数器初值为(65536-50000),循环10次即为0.5s。

代码如下:#include<reg51.h>#define uchar unsigned char sbit A=P2^4;uchar i=0;void main (){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;while(1){while(TF0){TF0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;i++;if(i==10){A=!A;i=0;}}}}(2)控制LEDB闪烁,2.5秒一个周期,亮0.5s,灭2s,周而复始。

解决思路:设置两个循环,计数器初值设为(65536-50000),亮灯循环10次,灭灯循环40次。

代码如下:#include<reg51.h>#define uchar unsigned charsbit A=P2^4;uchar i=0;void main (){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;while(1){while(TF0){TF0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;i++;if(i==10){A=1;}if(i==50){A=0;i=0;}}}}五、实验总结对软件及计数器的操作及代码不太熟悉,多次查询课本及上网查找资料后懂得计数器工作方式及计数操作,其他问题迎刃而解。

单片机中的定时器和计数器

单片机中的定时器和计数器

单片机中的定时器和计数器单片机作为一种嵌入式系统的核心部件,在各个领域都发挥着重要的作用。

其中,定时器和计数器作为单片机中常用的功能模块,被广泛应用于各种实际场景中。

本文将介绍单片机中的定时器和计数器的原理、使用方法以及在实际应用中的一些典型案例。

一、定时器的原理和使用方法定时器是单片机中常见的一个功能模块,它可以用来产生一定时间间隔的中断信号,以实现对时间的计量和控制。

定时器一般由一个计数器和一组控制寄存器组成。

具体来说,定时器根据计数器的累加值来判断时间是否到达设定的阈值,并在时间到达时产生中断信号。

在单片机中,定时器的使用方法如下:1. 设置定时器的工作模式:包括工作在定时模式还是计数模式,以及选择时钟源等。

2. 设置定时器的阈值:即需要计时的时间间隔。

3. 启动定时器:通过控制寄存器来启动定时器的运行。

4. 等待定时器中断:当定时器计数器的累加值达到设定的阈值时,会产生中断信号,可以通过中断服务函数来进行相应的处理。

二、计数器的原理和使用方法计数器是单片机中另一个常见的功能模块,它主要用于记录一个事件的发生次数。

计数器一般由一个计数寄存器和一组控制寄存器组成。

计数器可以通过外部信号的输入来触发计数,并且可以根据需要进行计数器的清零、暂停和启动操作。

在单片机中,计数器的使用方法如下:1. 设置计数器的工作模式:包括工作在计数上升沿触发模式还是计数下降沿触发模式,以及选择计数方向等。

2. 设置计数器的初始值:即计数器开始计数的初始值。

3. 启动计数器:通过控制寄存器来启动计数器的运行。

4. 根据需要进行清零、暂停和启动操作:可以通过控制寄存器来实现计数器的清零、暂停和启动操作。

三、定时器和计数器的应用案例1. 蜂鸣器定时器控制:通过定时器模块产生一定频率的方波信号,控制蜂鸣器的鸣叫时间和静默时间,实现声音的产生和控制。

2. LED呼吸灯控制:通过定时器模块和计数器模块配合使用,控制LED的亮度实现呼吸灯效果。

c语言单片机定时器计数器程序

c语言单片机定时器计数器程序

C语言单片机定时器计数器程序1. 简介C语言是一种被广泛应用于单片机编程的高级编程语言,它可以方便地操作单片机的各种硬件模块,包括定时器和计数器。

定时器和计数器是单片机中常用的功能模块,它们可以用来实现精确的时间控制和计数功能。

本文将介绍如何使用C语言编程实现单片机的定时器计数器程序。

2. 程序原理在单片机中,定时器和计数器通常是以寄存器的形式存在的。

通过对这些寄存器的操作,可以实现定时器的启动、停止、重载以及计数器的增加、减少等功能。

在C语言中,可以通过对这些寄存器的直接操作来实现对定时器和计数器的控制。

具体而言,可以使用C语言中的位操作和移位操作来对寄存器的各个位进行设置和清零,从而实现对定时器和计数器的控制。

3. 程序设计在编写单片机定时器计数器程序时,首先需要确定定时器的工作模式,包括定时模式和计数模式。

在定时模式下,定时器可以按照设定的时间间隔生成中断,从而实现定时功能;在计数模式下,定时器可以根据外部的脉冲信号进行计数。

根据不同的应用需求,可以选择不同的工作模式,并根据具体情况进行相应的配置。

4. 程序实现在C语言中,可以通过编写相应的函数来实现对定时器和计数器的控制。

需要定义相关的寄存器位置区域和位掩码,以便于程序对这些寄存器进行操作。

编写初始化定时器的函数、启动定时器的函数、停止定时器的函数、重载定时器的函数等。

通过这些函数的调用,可以实现对定时器的各种操作,从而实现定时和计数功能。

5. 示例代码以下是一个简单的单片机定时器计数器程序的示例代码:```c#include <reg52.h>sbit LED = P1^0; // 定义LED连接的引脚void InitTimer() // 初始化定时器{TMOD = 0x01; // 设置定时器0为工作在方式1TH0 = 0x3C; // 设置初值,定时50msTL0 = 0xAF;ET0 = 1; // 允许定时器0中断EA = 1; // 打开总中断void Timer0_ISR() interrupt 1 // 定时器0中断服务函数{LED = !LED; // 翻转LED状态TH0 = 0x3C; // 重新加载初值,定时50msTL0 = 0xAF;}void m本人n(){InitTimer(); // 初始化定时器while(1){}}```以上代码实现了一个简单的定时器中断程序,当定时器计数到50ms 时,会触发定时器中断,并翻转LED的状态。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二单片机之定时器/计数器应用
一、实验目的
1.学习89C51内部定时计数器的使用和编程方法
2.进一步掌握中断处理程序的编写方法
二、实验说明
1、51单片机有。

两个16位内部定时器/计数器(T/C,Timer/ Counter)。

若是计数内部晶振驱动时钟,则是定时器;若是计数8051的输入引脚的脉冲信号,则它是计数器。

定时器实际上也是工作在计数方式下,只不过对固定频率的脉冲计数。

由于脉冲周期固定由计数值可以计算出时间,有定时功能。

定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。

TMOD用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。

TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。

2、TMOD
1) M1M0工作方式控制位
2) C/T 定时器方式或计数器方式选择位
若C/T=1时, 为计数器方式; C/T = 0时, 为定时器方式。

3)GATE 定时器/计数器运行门控标志位
当GATE=1时, T/C的启动受双重控制,即要求INT0 (或INT1)引脚为高电平且TR0(或TR1 )置1 时, 相应的T/C才被选通工作。

若GA TE=0, T/C的启动仅受TR0 (或TR1)控制,即置1, T/C就被选通, 而不管INT0 (或INT1)的电平是高还是低。

3、TCON
TF0、TF1分别是定时器/计数器T0、T1 的溢出中断标志位, 加法计数器计满溢出时置1, 申请中断, 在中断响应后自动复位0。

TF产生的中断申请是否被接受, 还需要由中断是否开放来决定。

TR1、TR0 分别是定时器/计数器T1、T0 的运行控制位, 通过软件置1 后, 定时器/计数器才开始工作, 在系统复位时被清0。

4、初始化
1)初始化步骤
在使用51系列单片机的T/C前,应对它进行编程初始化,主要是对TCON和TMOD 编程,还需要计算和装载T/C的计数初值。

一般完成以下几个步骤:
(1)确定T/C的工作方式——编程TMOD寄存器;
(2)计算T/C中的计数初值,并装载到TH和TL;
(3)T/C在中断方式工作时,必须开CPU中断和源中断——编程IE寄存器;
(4)启动定时器/计数器——编程TCON中TR1或TR0位。

2)计数初值的计算
(1)定时器的计数初值:
在定时器方式下,T/C是对机器周期脉冲计数的,f OSC=12MHZ,一个机器周期为12/fOSC=1us,则
方式0 13位定时器最大定时间隔=213*1us=8.192ms
方式1 16位定时器最大定时间隔=216*1us=65.536ms
方式2 8位定时器最大定时间隔=28*1us=256us
若T/C工作在定时器方式1时,要求定时1ms,求计数值。

如设计数初值为x,则有:(216-x)*1us=1000us 推出x=216-1000
因此,TH,TL可置65536-1000
(2)计数器的计数初值
在计数器方式下:
方式0 13位计数器的满计数值=213=8192
方式1 16位计数器的满计数值=216=65536
方式2 8位计数器的满计数值=28=256
若T/C工作在计数器方式2时,则要求计数10个脉冲的计数初值,如设计数初值为x。

则有
28-x=10 即x= 28-10
因此,TH=TL=256-10
三、参考例子
1)设单片机晶振频率为12 MHz,利用定时器在P1.0脚输出周期为2 ms的方波。

分析:选用定时器/计数器T0作定时器, 输出为P1.0引脚, 2 ms 的方波可由间隔1 ms 的高低电平相间而成, 因而只要每隔1 ms对P1.0取反一次即可得到这个方波。

机器周期=12÷12MHz= 1μs
1 ms内T0 需要计数N次: N= 1 ms÷1 μs = 1000
由于计数器向上计数,为得到1000个计数之后的定时器溢出,采用方式1给定时器置初值为:65536-1000.
2)在P1.7端接有一个发光二极管,要求利用T/C控制,使LED亮1s,灭1s,周而复始。

分析:要求定时1s,T/C的三种工作方式都不能满足。

(为什么?)对于较长时间的定时,应采用符合定时的方法。

●使T/C0工作在定时器方式1,定时50ms,定时时间到后P1.0反相,即P1.0端输出
周期100ms的方波脉冲。

另设T/C1工作在计数器方式2,对T1输出的脉冲计数,当计满10次,定时1s时间到,将P1.7端方向,改变灯的状态。

●采用6MHZ晶振T0定时,定时10ms;T1计数T0的定时跳变信号P1.0的负跳变
次数,计满50个跳变为1秒。

四、参考程序
1)
查询方式:
#include<reg51.h>
sbit P1_0=P1^0;
void main()
{
TMOD=0x01; //T/CO工作在定时器方式1
TR0=1; //启动T/C0
for(;;){
TH0=(65536-1000)/256; //预置计数初值
TL0=(65536-1000)%256;
do{}while(!TF0); //查询等待TF0置位
P1_0=!P1_0; //P1.0取反
TF0=0; //软件清TF0
}
}
中断方式:
#include<reg51.h>
sbit P1_0=P1^0;
void timer0(void) interrupt 1 using 1{ //T/C中断服务程序入口
P1_0=!P1_0; //P1.0取反
TH0=(65536-1000)/256; //计数初值重装载
TL0=(65536-1000)%256;
}
void main()
{
TMOD=0x01; //T/CO工作在定时器方式1 P1_0=0;
TH0=(65536-1000)/256; //预置计数初值
TL0=(65536-1000)%256;
EA=1; //CPU开中断
ET0=1; //T/C0开中断
TR0=1; //启动T/C0开始定时
do{}while(1);
}
2)
#include<reg51.h>
sbit P1_0=P1^0;
sbit P1_7=P1^7;
timer0 interrupt 1 using 1 /*T0中断服务程序*/
{
P1_0=! P1_0; /*10ms定时时间到, P1.0反相*/
TH0=(65536-5000)/256; /*计数初值重装载*/
TL0=(65536-5000)%256;
}
timer1 interrupt 3 using 2 /*T1中断服务程序入口*/
{
P1_7=! P1_7; /*1s定时时间到, 灯改变状态*/ }
main( )
{
P1_7=0; /*置灯初始灭*/
P1_0=1; /*保证第一次反相便开始计数*/
TMOD=0x61;
/*定时器0工作在方式1定时,定时器1工作在方式2计数*/ TH0=(65536-5000)/256; /*预置计数初值*/
TL0=(65536-5000)%256;
TH1=256-50;
TL1=256-50;
IP=0x08; /*置优先级寄存器*/
EA=1; /*CPU开中断*/
ET0=1; /*开T0中断*/
ET1=1; /*开T1中断*/
TR0=1; /*启动T0*/
TR1=1; /*启动T1*/
for (;;)
{ }
}
五、电路图
六、实验内容
(1)把参考例子中的第2种情况用proteus调试出来。

(2)利用定时/计数器T1产生定时时钟,由P1口控制8个发光二极管,使8个指示灯依次一个一个闪动,闪动频率为10次/秒(8个灯依次亮一遍为一个周期),循环。

(如果第1题做完,可选做该题)。

相关文档
最新文档