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

实验三-定时器、计数器应用实验二定时器/计数器应用实验二设计性试验2012年11月21日星期三第三四节课一、实验目的1、掌握定时器/计数器计数功能的使用方法。
2、掌握定时器/计数器的中断、查询使用方法。
3、掌握Proteus软件与Keil软件的使用方法。
4、掌握单片机系统的硬件和软件设计方法。
二、设计要求1、用Proteus软件画出电路原理图,单片机的定时器/计数器以查询方式工作,设定计数功能,对外部连续周期性脉冲信号进行计数,每计满100个脉冲,则取反P1.0口线状态,在P 1.0口线上接示波器观察波形。
2、用Proteus软件画出电路原理图,单片机的定时器/计数器以中断方式工作,设定计数功能,对外部连续周期性脉冲信号进行计数,每计满200个脉冲,则取反P1.0口线状态,在P 1.0口线上接示波器观察波形。
三、电路原理图开始系统初始化装计数初值并启动定时器定时?时间到 输出取反结束清除溢出标志NY 四、实验程序流程框图和程序清单及实验结果 /*********设计要求:(1)单片机的定时器/计数器以查询方式工作,设定计数功能,对外部连续周期性脉冲信号进行计数,每计满100个脉冲,则取反P1.0口线状态,在P1.0口线上接示波器观察波形 编写:吕小洋时间:2012年11月16日18:09:40 ***************/ORG0000HSTART: LJMP MAINORG0100H MAIN: MOV SP, #2FH CLR EA ;关总中断CLR ET1;禁止定时器1中断MOV TMOD, #01100000B ;设置计数器1为工作方式2 MOV TH1, #9CH ;设置计数初值 MOVTL1, #9CHSETB TR1;启动计数器LOOP: JNB TF1, LOOP ;查询计数是否溢出 CPL P1.0 ;输出取反CLRTF1;清除计数溢出标志 LJMP LOOP;重复取反END//C语言编程//#include "reg52.h"sbit P1_0=P1^0;void main(){TMOD=0x50; /*T/C1工作在定时器方式1*/ TR1=1; /*启动T/C1*/for(;;){TH1=(65536-100)/256; /*装载计数初值*/TL1=(65536-100)%256;do /*查询等待TF1置位*/{ }while(!TF1);P1_0=!P1_0; /*定时时间到P1.0取反*/TF1=0; /*溢出标志清零*/}}启动定时器等待中断输出取反中断返回开始开始中断初始化TMOD初始化计数初值初始化结束/*********设计要求:(2)单片机的定时器/计数器以中断方式工作,设定计数功能,对外部连续周期性脉冲信号进行计数,每计满200个脉冲,则取反P1.0口线状态在P1.0口线上接示波器观察波形编写:吕小洋时间:2012年11月16日18:48:04 ***************/ORG0000HSTART: LJMP MAIN ORG001BHLJMP TTC1ORG0100H MAIN: MOV SP,#2FH SETB EA ;开总中断 SETB ET1;定时器1允许中断MOV TMOD, #60H ;设置T1为工作方式2 MOV TH1, #38H ;设置计数初值 MOVTL1, #38HSETB TR1;启动定时器 HERE: LJMP HERE;等待中断/****中断服务程序****/ORG0200H TTC1: CPL P1.0;输出取反RETI;中断返回END//C语言编程//#include"reg52.h"sbit P1_0=P1^0;void main(){EA=1; /*开总中断*/ET1=1; /*开T/C1中断*/TMOD=0x50; /*T/C1工作在定时器方式1*/ TH1=(65536-200)/256; /*装载计数初值*/TL1=(65536-200)%256;TR1=1; /*启动T/C1*/while(1);}void timer1() interrupt 3 /*T/C1中断服务程序入口*/ {P1_0=!P1_0; /*定时时间到P1.0取反*/TH1=(65536-200)/256; /*装载计数初值*/TL1=(65536-200)%256;}开始中断初始化TMOD初始化、定时 计数初始化、启动T0 T1定时?时间到 输出取反清除溢出标志N Y输出取反中断返回开始结束五、实验总结通过本次试验,我掌握了定时器/计数器定时功能的使用方法,能够利用定时器/计数器以查询、中断方式工作,设定计数功能,对外部连续周期性脉冲信号进行计数。
单片机实验三 定时计数器实验

实验三定时/计数实验
一、实验目的
1、理解单片机的定时/计数原理,掌握定时/计数程序的编写方法。
2、掌握定时/计数器在定时、计数、频率测量等方面的应用。
3、学会使用PROTEUS中VSM虚拟示波器观察波形。
二、实验设备
计算机一台;单片机实验仪一台;Keil C51和Proteus软件。
三、实验内容
利用定时计数器1,编程实现从P1.0、P1.1、P1.2三个I/O引脚分别输出频率为
0.25Hz、50 Hz、1k Hz的方波信号。
利用P1.0、P1.1、P1.2三个I/O引脚所接的三个LED
灯或利用示波器进行观察。
已知fosc=12MHz。
四、实验电路图
图1 8路LED灯控制原理图
五、实验接线
P1.0、P1.1、P1.2三个I/O引脚接J12的三个引脚(即三个LED灯)。
六、思考题
1、简要写出实现该实验的方案(要有必要的计算)。
2、单片机定时/计数器的“加一”操作和单片机运行主程序是同时工作(并行工作)的,还是有先后顺序的?单片机运行中断程序和运行主程序是同时工作(并行工作)的,还是有先后顺序的?
3、单片机定时/计数器的定时与计数的区别是什么,软件上分别应如何设置?
4、在该实验的基础上,输出的三路信号的占空比可以分别为1/2,1/3,1/4吗?
七、实验报告要求
实验目的
1、实验目的
2、实验设备
3、实验内容
4、实验流程图
5、实验源程序
7、思考题解答
8、实验总结及心得体会
1。
定时器计数器实验报告

定时器计数器实验报告简介:定时器是一种用来产生、计数和处理时间信号的计时装置。
在数字电路中,定时器主要分为内部定时器和外部定时器两类,内部定时器是在单片机内部实现的,外部定时器则是通过外部电路实现的。
计数器则是一种用来计数的电子元件,根据不同的使用场合和要求,计数器可以分为多种类型。
在嵌入式系统中,定时器计数器应用广泛,例如在时钟、延时、计数等方面都有很大的作用。
实验目的: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开发板连接到电脑,并下载程序到开发板中。
实验三流水灯实验(io口和定时器实验)

实验三流水灯实验(I/O口和定时器实验)一、实验目的1.学会单片机I/O口的使用方法和定时器的使用方法;2.掌握延时子程序的编程方法、内部中断服务子程序的编程方法;3.学会使用I/O口控制LED灯的应用程序设计。
二、实验内容1.控制单片机P1口输出,使LED1~LED8右循环轮流点亮(即右流水),间隔时间为100毫秒。
2.控制单片机P1口输出,使LED1~LED8左循环轮流点亮(即左流水),间隔时间为100毫秒。
3.使用K1开关控制上面LED灯的两种循环状态交替进行;4. 用定时器使P1口输出周期为100ms的方波,使LED闪烁。
5.使用定时器定时,使LED灯的两种循环状态自动交替,每一种状态持续1.6秒钟(选作)。
三、实验方法和步骤1.硬件电路设计使用实验仪上的E1、E5和E7模块电路,把E1区的JP1(单片机的P1口)和E5区的8针接口L1~L8(LED的驱动芯片74HC245的输入端)连接起来,P1口就可以控制LED 灯了。
当P1口上输出低电平“0”时,LED灯亮,反之,LED灯灭。
E7区的K1开关可以接单片机P3.0口,用P3.0口读取K1开关的控制信号,根据K1开关的状态(置“1”还是置“0”),来决定LED进行左流水还是右流水。
综上,画出实验电路原理图。
2.程序设计实验1和实验2程序流程图如图3-1实验3程序流程图如图3-2所示。
图3-1 实验1,2程序流程图图3-2 实验3程序流程图实验4程序流程图如图3-3,3-4所示。
实验5程序流程图如图3-5,3-6所示。
图3-5 实验5主程序流程图图3-6 定时器中断服务子程序流程图图3-4 定时器中断服务子程序流程图图3-3 实验4主程序流程图编程要点:(1)Pl,P3口为准双向口,每一位都可独立地定义为输入或输出,在作输入线使用前,必须向锁存器相应位写入“1”,该位才能作为输入。
例如:MOV P1,A; P1口做输出MOV P1,#0FFHMOV A,P1;P1口做输入SETB P3.0MOV C,P3.1;从P3.1口读入数据(2)每个端口对应着一个寄存器,例:P1→90H(P1寄存器地址);P3→B0H(P3寄存器地址);寄存器的每一位对应着一个引脚,例:B0H.0→P3.0(3)对寄存器写入“0”、“1”,对应的外部引脚则输出“低电平”、“高电平”。
实验三单片机定时计数器应用实验(一)(学生用)

实验三单片机定时/计数器应用实验(一)一、实验目的(1)掌握定时/计数器的基本结构、工作原理和工作方式。
(2)掌握定时/计数器的使用和编程方法。
(3)进一步掌握中断处理程序的编写方法。
二、实验器材(1) HJ-C52开发板一块(2)计算机一台(3) Keil C51编程软件(4)数据下载线三、实验电路图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才被选通工作。
若GATE=0, T/C的启动仅受TR0 (或 TR1)控制,即置 1, T/C就被选通, 而不管 INT0 (或 INT1)的电平是高还是低。
3、TCONTF0、TF1分别是定时器/计数器T0、 T1 的溢出中断标志位, 加法计数器计满溢出时置1, 申请中断, 在中断响应后自动复0。
TF产生的中断申请是否被接受, 还需要由中断是否开放来决定。
TR1、TR0 分别是定时器/计数器T1、 T0 的运行控制位, 通过软件置 1 后, 定时器/计数器才开始工作, 在系统复位时被清0。
单片机实验三-定时计数器实验报告

南昌大学实验报告学生姓名:学号:专业班级:实验类型:□验证□综合■设计□创新实验日期:实验成绩:实验三定时计数器实验(一)实验目的1. 熟练掌握STC型开发板的使用方法和注意事项;2. 掌握应用USB_ISP烧录过程;3. 掌握单片机中断原理;4. 掌握定时器的初始化和定时模式编程。
(二)设计要求采用定时器0/1做16位自动重装(方式0), 中断频率为1000HZ,中断函数从P1.7/ P1.6/ P4.7取反输出500HZ方波信号。
如果由于频率问题实验现象无法观察,请在中断程序中想办法实现。
(三)实验原理1. 开发板部分电路示意图2. 定时器的使用在应用定时/计数器资源时,按照以下几个步骤进行:(1)确定工作方式,对方式控制寄存器TMOD赋值(2)根据要求计算初值并装入寄存器THx、TLx,实际定时时间Tc=(M-X)×Tp(3)根据需要开放定时/计数器中断,即EA、ETx置1(4)启动定时/计数器开始工作,即TRx位置1(5)编写中断服务程序或查询处理方式程序定时器/计数器T0的工作方式0:当M1,M0为00时,定时器/计数器被设置为工作方式0,此时为13位计数器,由TLx(x=0,1)的低5位和THx的高8位构成。
TLx低5位溢出则向THx进位,THx计数溢出则把TCON中溢出标志位TFx置1。
3. 单片机中断系统当中断请求源发出中断请求时,如果中断请求被允许的话,单片机暂时中止当前正在执行的主程序,转到中断处理程序处理中断服务请求。
中断服务请求处理完后,再回到原来被中止的程序之处(断点),继续执行被中断的主程序。
定时器/计数器T0计数溢出发出的中断请求,中断请求标志为TF0。
(四)实验设备装有Keil4和STC-ISP的电脑、STC实验箱及连接线。
(五)实验结果实验结果与预期一致,因为输出频率太高,肉眼无法分辨,LED一直保持常量状态,所以设定了中断100次,输出一个方波信号,这样P1.7引脚对应的LED灯闪烁,频率为5Hz,肉眼可见。
第3次《单片机原理与应用》-定时计数器

定时器初始化编程:
使用定时器工作之前,先写入控制寄存器, 确定好定时器工作方式。 初始化编程格式:
MOV TMOD,# 方式字 MOV THx,#XH MOV TLx,#XL (SETB EA ) (SETB ETx) SETB TRx ;选择方式 ;装入Tx时间常数 ;开Tx中断 ;启动Tx定时器
TMOD,#01H ;设置T0为方式1定时
ACALL PT0M0
HERE: AJMP HERE
;调用初始化子程序PT0M0
;原地循环,等待中断
22
PT0M0: MOV
TL0,#0CH
;T0初始化,装初值的低8位
MOV
TH0,#0FEH
;装初值的高8位
;允许T0中断 ;总中断允许 ;启动T0 ;中断子程序,T0重装初值 ;P1.0的状态取反
本例,主程序用一条转至自身的短跳转指令来代替。
21
参考程序如下:
ORG 0000H ;程序入口 ;转主程序 ;T0中断入口 ;转T0中断处理程序IT0P ;主程序入口 ;设堆栈指针
RESET: AJMP MAIN ORG 000BH
AJMP IT0P ORG MAIN: MOV MOV 0100H SP,#60H
2)中断方式:初始化后执行其它任务,中断服务程序处理溢出。 ORG 0000H LJMP MAIN ORG 000BH(001BH) ;Tx中断入口 LJMP PTS MAIN: … ;初始化后执行其他程序 PTS: … ;溢出中断服务程序 MOV THx,#XH ;重装时间常数 MOV TLx,#XL RETI
即T0每隔1ms产生一次中断,CPU响应中断后,在中断服务 子程序中对P1.0取反。为此要做如下几步工作。
定时器计数器实验报告

定时器计数器实验报告定时器计数器实验报告引言:定时器计数器是一种常用的电子元件,它可以在电路中起到计时和计数的作用。
在本次实验中,我们将探索定时器计数器的基本原理和应用,并通过实际操作来验证其性能和功能。
一、实验目的本次实验的目的是熟悉定时器计数器的工作原理,掌握其使用方法,并通过实验验证其性能和功能。
二、实验器材和原理1. 实验器材:- 定时器计数器模块- 电源- 示波器- 连接线- 电阻、电容等元件2. 实验原理:定时器计数器是一种能够产生精确时间间隔的电子元件。
它通常由一个时钟信号源和一个计数器组成。
时钟信号源提供固定频率的脉冲信号,计数器根据时钟信号的输入进行计数,并在达到设定值时触发相应的操作。
三、实验步骤1. 连接电路:将定时器计数器模块与电源和示波器连接起来,确保电路连接正确。
2. 设置参数:根据实验要求,设置定时器计数器的工作频率、计数范围等参数。
这些参数可以通过调节电阻、电容等元件来实现。
3. 运行实验:启动电源,观察示波器上的波形变化。
根据设定的参数,定时器计数器将在一定时间间隔内产生脉冲信号,并在达到计数值时触发相应的操作。
4. 数据记录和分析:记录实验过程中的数据和观察结果,并进行分析。
比较实验结果与理论预期的差异,找出可能的原因并提出改进措施。
四、实验结果与讨论通过实验,我们观察到定时器计数器在不同参数设定下的工作情况。
根据实验数据和观察结果,我们可以得出以下结论:1. 定时器计数器的工作频率与输入时钟信号的频率有关。
当时钟信号频率较高时,定时器计数器的计数速度也会相应增加。
2. 定时器计数器的计数范围决定了其能够计数的最大值。
当计数器达到设定的计数范围时,将触发相应的操作。
3. 定时器计数器可以应用于各种计时和计数的场合,如脉冲计数、频率测量等。
通过调节参数,可以实现不同的功能。
根据实验结果,我们可以进一步探索定时器计数器的应用领域和优化方法,提高其性能和功能。
五、实验总结通过本次实验,我们深入了解了定时器计数器的原理和应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三单片机定时/计数器实验
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,如何改动程序。
六、源程序修改原理及其仿真结果
思考题一:使用其他方式实现本实验功能
方法一:
mov TMOD, #00000100b ; 方式0,记数器
mov TH0, #0
mov TL0, #0
setb TR0 ; 开始记数
;由于方式0的特点是计数时使用TL0的低五位和八位TH0,故用加法器a用“与”(ANL)取TL0的低五位,再用yiwei子程序实现TH0的低三位变为高三位与TL0相加,这样赋给P1时就是八位计数的结果。
Loop:
mov a,TL0
anl a,#1fh
mov r1,a
mov a,TH0
call yiwei
add a,r1
mov P1, a ; 将记数结果送P1口ljmp Loop
;实现TH0的高三位移位为高三位,本身TH0是八位,故需要移位五次才能实现
yiwei:
mov r0,#05h
Loop1:
rl a
djnz r0,Loop1
ret
end
硬件:P1.0~P1.7接L0~L7,P3.4接单步脉冲
方法二:
mov TMOD, #00000110b ; 方式2,记数器
mov TH0, #0 ;暂存初值,可自动加载mov TL0, #0 ;八位加一计数器
setb TR0 ; 开始记数
Loop:
Mov P1,TL0 ; 将记数结果送P1口
ljmp Loop
End
硬件:P1.0~P1.7接L0~L7,P3.4接单步脉冲
硬件仿真结果说明:
按动单步脉冲按钮LED灯P0到P7会按照二进制的顺序点亮,即第一次P0亮其他灭,第二次P1亮其他灭,第三次P0、P1亮其他灭,第四次P2亮其他灭……以此类推,实现了用八位LED灯表示计数器的计数过程的目的。
思考题二:改为门控方式外部启动计数
mov TMOD, #00001101b ; 方式1,记数器,门控方式
mov TH0, #0
mov TL0, #0
setb TR0 ; 开始记数
Loop:
mov P1, TL0 ; 将记数结果送P1口
ljmp Loop
end ;INT0即P3.2接开关
硬件仿真结果说明:
在P3.2所接开关没有拨为高电平之前,按动单步脉冲按钮LED灯没有响应;开关拨为高电平之后按动单步脉冲按钮LED灯的响应同上。
实现了计数器的门控外部启动。
思考题三:如果改为定时间隔为200us,如何改动程序
(2^8-x)*2*10^-6=200*10^-6;
故x=256-100
程序其他部分无需改变,定时变为2sLED灯的状态翻转一次
Tick equ 10000 ; 10000 x 200us = 2s
T100us equ 256-100 ; 200us时间常数(6M);
C100us equ 30h ; 200us记数单元
程序选用方式1定时,故计算初值:
(2^16-x)*2*10^6=10*10^3;
故x=65536-5000=60536
思考题四:使用其他方式实现本实验功能,例如使用方式1,定时间隔为10ms,如何改动程序
Tick equ 500 ; 500 x 10ms = 5s
T100us equ 60536 ; 10ms计数单位
C100us equ 30h ; 10ms记数单元
LEDBuf equ 0
LED equ P1.0
org 0000h
ljmp Start
org 000bh
方式1与方式2的区别不仅在于它是16位计数,同时在于它不能重新装入初值,赋值时要分高八位和低八位分别赋值,并且必须进入中断时手动重装初值
T0Int:
mov TH0, #high(t100us)
mov TL0, #low(t100us)
push PSW
mov a, C100us+1
jnz Goon
dec C100us
Goon:
dec C100us+1
mov a, C100us
orl a, C100us+1
jnz Exit ; 100us 记数器不为0, 返回
mov C100us, #high(Tick)
mov C100us+1, #low(Tick)
cpl LEDBuf ; 100us 记数器为0, 重置记数器 ; 取
反 LED
Exit:
pop PSW
reti
Start:
mov TMOD, #01h ; 方式1, 定时器
mov IE, #10000010b ; EA=1,
IT0 = 1
setb TR0 ; 开始定时
clr LEDBuf
clr LED
mov C100us, #high(Tick)
mov C100us+1, #low(Tick)
Loop:
mov c, LEDBuf
mov LED, c
ljmp Loop
end
硬件仿真结果说明:
程序开始执行后LED灯以5s为周期重复的点亮,并且每次点亮时可以维持
5s,即LED灯会亮5s,然后灭5s……如此循环往复。
从现象中可以看出,程序实
现了在P1.0口周期性地输出周期为10s的方波,且占空比为1:1,使得LED灯出现上述点亮规律。
继续阅读。