实验报告五 定时器计数器实验
定时器、计数器操作与应用实验报告
实验三定时器、计数器操作与应用实验报告、实验目的1、 了解和熟悉FX 系列可编程序控制器的结构和外 部接线方法;2、 了解 和熟 悉 GX Developer Version 7.0 软件的 使用 方法 ;3、 掌握 可编 程序 控制器 梯形 图程 序的 编制 与调 试。
二、实验要求仔 细阅 读实 验指 导书 中关 于编 程软 件的 说明 ,复习 教材 中有 关内 容 , 分 析程 序运 行结 果。
三、实验设备2 、 开关 量输 入 / 输出 实验 箱 3、 计算 机 4、 编程 电缆注 意:1) 开关量输入/输出实验 箱内的钮子开关用来产生模拟的 开关量输入 信 号; 2) 开关量输入/输出实验箱内的LED 用来指示开关 量输出信号; 3) 编程电缆在连接PLC 与计算机时请注意方向。
四、实验内容1 、梯形图1 、 FX 系列可 编程 序控 制器一只一套5、 GX Developer Version 7.0软件一套2、梯形图程序0LD xooo1OUT YOOOX0012LD3OR¥0014AN I X0025OUT Y0016OUT TO K509MPS10AHI TO11OUT Y00212MPP13ASD TO14OUT¥00315LD X00316RST CO18LD X00419OUT CO K522LD CO23OUT Y00424END3、时序图r 时序10 □ ©Si正在进荷囲1SL 金冃勖厂手祜r XI广X3厂X5厂K1Q拧应C40 J2fl MIB -380 .360 '340 -33 MW 脚 M 创Q,220,200,13Q -1«-14D ,1如■!» 如也 40 如厂「五、实验步骤1、程序的编辑、检查和修改;2、程序的变换;3、程序的离线虚拟设备仿真测试;4、程序写入PLC;5、用PLC运行程序;6、比较程序的分析结果与实际运行结果。
计数器实验报告
计数器实验报告引言:计数器是数字电路中的重要组件,用于计数、计时和测量等应用。
它可以在各种电子设备中起到决策、控制和计算等作用。
本次实验旨在探究计数器的工作原理并验证其功能。
一、实验目的:本次实验旨在研究计数器的工作原理,了解计数器的结构和使用方法,以及探究不同类型计数器的特点和应用。
二、实验器材和原理:1. 实验器材:- 7400系列逻辑门芯片(74LS00、74LS02等)- 74LS163 4位二进制同步计数器芯片- 连线板及连接线- 示波器- 电源2. 实验原理:计数器是由触发器和逻辑门组成的电路,根据输入脉冲的时序和频率来实现计数功能。
常见的计数器有同步计数器和异步计数器。
同步计数器:所有触发器在同一脉冲上同时工作,具有高速、同步性好等特点。
4位同步二进制计数器(74LS163)是本次实验主要研究的对象。
三、实验步骤和结果:1. 连接电路:将四个J-K触发器连接成同步二进制计数器电路。
采用74LS163芯片,选用外部时钟输入。
根据芯片引脚连接示意图连接芯片和示波器。
2. 设置电路状态:给予计数器电路适当的输入电平,根据实验的需求和目的,调整电路状态,例如设置计数范围、初始值等。
3. 测量输出波形:利用示波器观察和记录计数器的输出波形。
分析波形特点,如波形幅值、周期、高低电平时间等。
实验结果表明,计数器能够按照预期的次序进行计数,并在达到最大值后回到初始值重新计数。
输出波形清晰、稳定,符合设计要求。
四、实验讨论:1. 计数器的应用:计数器广泛应用于各种计数、计时和测量场合,例如时钟、频率计、定时器、计数器、计数调制解调器等。
计数器还可用于控制和决策等功能,比如在数字电子秤中用于计算重量。
2. 计数器的类型:除了同步计数器,异步计数器也是常见的计数器类型。
异步计数器与同步计数器相比,其工作原理和时序不同,有着不同的特点和优劣势。
3. 计数器的扩展:计数器可以通过级联扩展实现更大位数的计数。
实验报告五定时器计数器实验
实验报告五定时器计数器实验信息工程学院实验报告课程名称:微机原理与接口技术Array实验项目名称:定时器/计数器实验实验时间:班级:姓名:学号:一、实验目的1. 掌握8254 的工作方式及应用编程。
2. 掌握8254 典型应用电路的接法。
二、实验设备PC 机一台、TD-PITD+实验系统一套。
三、实验原理8254 是Intel 公司生产的可编程间隔定时器。
是8253 的改进型,比8253 具有更优良的性能。
8254 具有以下基本功能:(1)有 3 个独立的16 位计数器。
(2)每个计数器可按二进制或十进制(BCD)计数。
(3)每个计数器可编程工作于 6 种不同工作方式。
(4)8254 每个计数器允许的最高计数频率为10MHz(8253 为2MHz)。
(5)8254 有读回命令(8253 没有),除了可以读出当前计数单元的内容外,还可以读出状态寄存器的内容。
(6)计数脉冲可以是有规律的时钟信号,也可以是随机信号。
计数初值公式为:n=f CLKi ÷f OUTi、其中f CLKi 是输入时钟脉冲的频率,f OUTi 是输出波形的频率。
图5-1 是8254 的内部结构框图和引脚图,它是由与CPU 的接口、内部控制电路和三个计数器组成。
8254 的工作方式如下述:(1)方式0:计数到0 结束输出正跃变信号方式。
(2)方式1:硬件可重触发单稳方式。
(3)方式2:频率发生器方式。
(4)方式3:方波发生器。
(5)方式4:软件触发选通方式。
(6)方式5:硬件触发选通方式。
图5-1 8254 的内部接口和引脚8254 的控制字有两个:一个用来设置计数器的工作方式,称为方式控制字;另一个用来设置读回命令,称为读回控制字。
这两个控制字共用一个地址,由标识位来区分。
控制字格式如表5-1~5-3 所示。
表5-1 8254 的方式控制字格式表5-2 8254 读出控制字格式表5-3 8254 状态字格式8254 实验单元电路图如下图所示:图5-2 8254 实验电路原理图四、实验内容与步骤1. 计数应用实验编写程序,将8254 的计数器0 设置为方式3,计数值为十进制数4,用单次脉冲KK1+作为CLK0 时钟,OUT0 连接INTR1,每当KK1+按动5 次后产生中断请求,在屏幕上显示字符“5”。
定时器计数器实验报告
定时器计数器实验报告简介:定时器是一种用来产生、计数和处理时间信号的计时装置。
在数字电路中,定时器主要分为内部定时器和外部定时器两类,内部定时器是在单片机内部实现的,外部定时器则是通过外部电路实现的。
计数器则是一种用来计数的电子元件,根据不同的使用场合和要求,计数器可以分为多种类型。
在嵌入式系统中,定时器计数器应用广泛,例如在时钟、延时、计数等方面都有很大的作用。
实验目的: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. 理解定时器的基本原理和工作方式。
2. 掌握定时器的配置和使用方法。
3. 通过编程实现定时器的定时功能。
4. 学习定时器中断的应用。
二、实验环境1. 实验设备:单片机实验板、电源、连接线等。
2. 实验软件:Keil uVision 4、IAR EWARM等C语言开发环境。
三、实验原理定时器是一种用于实现时间延迟的硬件模块,它能够在预定的时间内产生中断或完成特定的操作。
定时器通常由计数器、控制寄存器、时钟源等组成。
定时器的工作原理是利用时钟源产生的时钟信号对计数器进行计数,当计数器达到预设值时,触发中断或完成特定操作。
四、实验内容1. 定时器基本配置(1)设置定时器模式:根据实验需求,选择定时器的工作模式(如模式0、模式1等)。
(2)设置定时器时钟源:选择定时器时钟源(如系统时钟、外部时钟等)。
(3)设置定时器计数初值:根据实验需求,设置定时器计数初值。
2. 定时器定时功能实现(1)编写程序初始化定时器:配置定时器模式、时钟源、计数初值等。
(2)编写定时器中断服务程序:在中断服务程序中实现定时功能,如控制LED闪烁、读取传感器数据等。
3. 定时器中断应用(1)配置定时器中断:设置定时器中断优先级、中断使能等。
(2)编写定时器中断服务程序:在中断服务程序中实现所需功能,如采集数据、发送数据等。
五、实验步骤1. 编写程序初始化定时器:设置定时器模式、时钟源、计数初值等。
2. 编写定时器中断服务程序:实现定时功能,如控制LED闪烁。
3. 编写定时器中断配置程序:设置定时器中断优先级、中断使能等。
4. 编译、下载程序:将编写好的程序编译生成HEX文件,通过编程器下载到实验板上。
5. 运行实验:观察实验现象,如LED闪烁频率、数据采集等。
六、实验结果与分析1. 定时器定时功能实现实验结果显示,定时器能够按照设定的定时时间产生中断,中断服务程序能够正确执行。
例如,LED闪烁频率与定时时间一致。
单片机定时器-计数器实验总结
单片机定时器-计数器实验总结单片机定时器/计数器实验总结篇一:单片机实验之定时器计数器应用实验一一、实验目的1、掌握定时器/计数器定时功能的使用方法。
2、掌握定时器/计数器的中断、查询使用方法。
3、掌握Prteus软件与Keil软件的使用方法。
4、掌握单片机系统的硬件和软件设计方法。
二、设计要求1、用Prteus软件画出电路原理图,单片机的定时器/计数器以查询方式工作,在P1.0口线上产生周期为200μS的连续方波,在P1.0口线上接示波器观察波形。
2、用Prteus软件画出电路原理图,单片机的定时器/计数器以中断方式工作,在P1.1口线上产生周期为240μS的连续方波,在P1.1口线上接示波器观察波形。
三、电路原理图六、实验总结通过这次实验,对定时器/计数器的查询工作方式有了比较深刻的理解,并能熟练运用。
掌握定时器/计数器的中断、查询使用方法。
对于思考题能够运用三种不同思路进行编程。
七、思考题1、在P1.0口线上产生周期为500微秒,占空比为2:5的连续矩形波。
答:程序见程序清单。
四、实验程序流程框图和程序清单1、以查询方式工作,在P1.0 RG 0000H START: LJMP MAIN RG 0100H MAIN: MV IE, #00H MV TMD, #02H MV TH0, #9CH MV TL0, #9CH SETB TR0 LP: JNB TF0, LP CLR TF0 CPL P1.0 AJMP LP END2、以中断方式工作,在P1.1 RG 0000H START: LJMP MAIN RG 000BH LJMP TTC0 RG 0100H MAIN: MV TMD, #02H MV TH0, #88H MV TL0, #88H SETB EA SETB ET0 SETB TR0 HERE: LJMP HERE RG 0200H TTC0: CPL P1.1 RETI END3、在P1.0口线上产生周期为500微秒,占空比为2:5的连续矩形波 RG 0000H START: LJMP MAIN RG 0100H MAIN: MV IE, #00H MV TMD, #20H MV TH1, #38H MV TL1, #38H MV TH0, #0F6H MV TL0, #14H LP1: SETB TR1 LP2: JNB TF1, LP2 CLR TF1 CLR TR1 CPL P1.0 SETB TR0 LP3: JNB TF0, LP3 MV TH0, #0F6H MV TL0, #14H CLR TF0 CLR TR0 CPL P1.0 LJMP LP1 END RG 0000H START: LJMP MAIN RG 0100H MAIN: MV IE, #00H MV TMD, #20H MV TH1, #38H MV TL1, #38H MV TH0, #0F0H MV TL0, #0CH SETB TR0 LP1: SETB TR1 LP2: JNB TF1, LP2 CLR TF1 CLR TR1 CPL P1.0 SETB TR0 LP3: JNB TF0, LP3 CLR TF0 MV TH0, #0F0H MV TL0, #0CH CPL P1.0 LJMP LP1 END RG 0000H START: LJMP MAIN RG 0100H MAIN: MV IE, #00H MV TMD, #00H LP1: MV TH1, #0F9H MV TL1, #18H SETB TR1 LP2: JNB TF1, LP2 CLR TF1 CPL P1.0 MV TH1, #0F6H MV TL1, #14H LP3: JNB TF1, LP3 CLR TF1 CPL P1.0 LJMP LP1 END五、实验结果(波形图)篇二:单片机实验-定时器计数器应用实验一定时器/计数器应用实验一一、实验目的和要求1、掌握定时器/计数器定时功能的使用方法。
51单片机定时器计数器汇编实验报告
批阅长沙理工大学实验报告年级光电班号姓名同组姓名实验日期月日指导教师签字:批阅老师签字:内容一、实验目的四、实验方法及步骤二、实验原理五、实验记录及数据处理三、实验仪器六、误差分析及问题讨论单片机定时器/计数器实验一、实验目的1、掌握51单片机定时器/计数器的基本结构。
2、掌握定时器/计数器的原理及编程方法。
二、实验仪器1、装有keil软件的电脑2、单片机开发板三、实验原理51单片机有2个16位的定时器/计数器,分别是T0和T1,他们有四种工作方式,现以方式1举例。
若定时器/计数器0工作在方式1,计数器由TH0全部8位和TL0全部8位构成。
方式1作计数器用时,计数范围是:1-65536(2^16);作定时器用时,时间计算公式是:T=(2^16-计数初值)×晶振周期×12。
四、实验内容1、计算计数初值单片机晶振频率为6MHz,使用定时器0产生周期为120000μs等宽方波连续脉冲,并由P1.0输出。
设待求计数初值为x,则:(2^16-x)×2×10^-6 = 120000×10^-6解得x=5536。
二进制表示为:00010101 10100000B。
十六进制为:高八位(15H),低八位(A0H)。
2、设置相关控制寄存器TMOD设置为xxxx0001B3、程序设计ORG 0000HAJMP MAINORG 30HMAIN: MOV P1,#0FFH ;关闭所有灯ANL TMOD,#0F0H ;置定时器0工作方式1ORL TMOD,#01H ;不影响T1的工作MOV TH0,#15H ;设置计数初始值MOV TL0,#0A0HSETB EA ;CPU开中断SETB ET0 ;定时器0开中断SETB TR0 ;定时器开始运行LOOP: JBC TF0,INTP ;如果TF0=1,则清TF0并转到INTPAJMP LOOP ;然跳转到LOOP处运行INTP: MOV TH0,#15H ;重新设置计数初值MOV TL0,#0A0HCPL P1.0 ;输出取反AJMP LOOPEND AJMP LOOPEND4、实验仿真新建工程项目文件中,并为工程选择目标器件为AT公司的AT89S51。
(完整word版)实验5定时器计数器实验报告
单片机实验五定时器/计数器设计实验报告一、实验内容1、采用12MHZ时钟频率的单片机,通过一个开关输入,触发定时计数.按下开关10次,计算按键的平均时间,并通过数码管显示出来。
二、实验目的1、了解定时器的各种工作方式。
2、掌握定时器/计数器的使用和编程方法。
三、实验设备win7系统下的proteus7.8和ceil4联调四、实验电路图五、程序代码#include<reg51。
h〉sbit P1_0=P1^0;unsigned char numcode[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88};unsigned char seqcode[4]={0x01,0x02,0x04,0x08};unsigned int num=0;void int1()interrupt 1{num++;TL0=0xb0;TH0=0x3c;}void DelayMS(unsigned int ms){unsigned char i;while(ms——)for(i=0;i<120;i++);}void main(){unsigned char i=0;unsigned char dspcode[4];unsigned long t;P3=numcode[i];ET0=1;EA=1;TH0=0x3c;TL0=0xb0;TMOD=0x01;while(1){if(P1_0==0){TR0=1;i++;P3=numcode[i];while(P1_0==0);TR0=0;if(i==10){t=((TH0〈〈8)+TL0)/1000;t=(t+50*num)/10;dspcode[0]=numcode[(t/1000)%10]^0x80;dspcode[1]=numcode[(t/100)%10];dspcode[2]=numcode[(t/10)%10];dspcode[3]=numcode[t%10];break;}}}while(1){for(i=0;i<4;i++){P2=seqcode[i];P0=dspcode[i];DelayMS(5);}}}六、实验结果七、实验小结通过实验,我了解了定时器的各种工作方式和定时器/计数器的使用和编程方法,为进一步学习打下基础.。
定时器计数器应用实验报告
定时器计数器应用实验报告实验结果分析及讨论论1.实验中出现过的问题或错误、原因分析程序输入错误导致无法完全编译2.保证实验成功的关键问题保证代码输入正确以及操作正确。
弄清楚keil软件与proteus软件互相调试的原理,确保proteus软件的正常运行。
对实验自我评价价更加熟悉了keil软件和proteus软件操作,了解了定时器/计数器计数功能的使用方法。
教教师师评评阅阅1.学生实验动手能力(20分):□优秀(20~18)□较好(17~15)□合格(14~12)□不合格(11~0)2.实验报告内容(共60分)(1)实验目的、材料、原理、内容及步骤记录(20分):□正确、清晰、重点突出(20~18)□较正确、较清晰(17~15)□有少数错误(14~12)□有较多错误(11~0)(2)实验数据(现象)及结果记录、处理(20分):□清晰、正确(20~18)□较清晰、较正确(17~15)□合格(14~12)□不合格(11~0)(3)实验结果分析及讨论(20分):□结果详实、结论清晰、讨论合理(20~18)□结果正确、讨论适当(17~15)□合格(14~12)□不合格(11~0)3.学生遵循实验室规定及实验要求程度(20分):□好(20~18)□较好(17~15)□合格(14~12)□不合格(11~0)4.其它意见:教师签名:年月日课程名称单片机原理及应用实验成成绩实验名称定时器/计数器应用实验专专业电子信息科学与技术年级/班级学学号实验地点实验日期姓姓名实验类型□演示性□验证性☑综合性□设计性指导教师实实验验目目的的1.掌握定时器/计数器计数功能的使用方法。
2.掌握定时器/计数器的中断、查询使用方法。
3.掌握keil软件和proteus软件的使用方法。
4.掌握单片机系统的硬件和软件设计方法。
实验仪器及耗材材1.THDPJ-3型单片机开发综合实验装置;2.PC;3.KeiluVision4仿真软件。
4.proteus8.0软件实实验验原原理理1.实验原理:要产生周期为2ms的方波,可以利用定时器在1ms时产生溢出,再通过软件方法使P2.0引脚的输出状态取反。
计数器的设计实验报告
计数器的设计实验报告一、实验目的本次实验的目的是设计并实现一个简单的计数器,通过对计数器的设计和调试,深入理解数字电路的基本原理和逻辑设计方法,掌握计数器的工作原理、功能和应用,提高自己的电路设计和调试能力。
二、实验原理计数器是一种能够对输入脉冲进行计数,并在达到设定计数值时产生输出信号的数字电路。
计数器按照计数方式可以分为加法计数器、减法计数器和可逆计数器;按照计数进制可以分为二进制计数器、十进制计数器和任意进制计数器。
本次实验设计的是一个简单的十进制加法计数器,采用同步时序逻辑电路设计方法。
计数器由触发器、门电路等组成,通过对触发器的时钟信号和输入信号的控制,实现计数功能。
三、实验设备与器材1、数字电路实验箱2、集成电路芯片:74LS160(十进制同步加法计数器)、74LS00(二输入与非门)、74LS04(六反相器)3、示波器4、直流电源5、导线若干四、实验内容与步骤1、设计电路根据实验要求,选择合适的计数器芯片 74LS160,并确定其引脚功能。
设计计数器的清零、置数和计数控制电路,使用与非门和反相器实现。
画出完整的电路原理图。
2、连接电路在数字电路实验箱上,按照电路原理图连接芯片和导线。
仔细检查电路连接是否正确,确保无短路和断路现象。
3、调试电路接通直流电源,观察计数器的初始状态。
输入计数脉冲,用示波器观察计数器的输出波形,检查计数是否正确。
若计数不正确,逐步排查故障,如检查芯片引脚连接、电源电压等,直至计数器正常工作。
4、功能测试测试计数器的清零功能,观察计数器是否能在清零信号作用下回到初始状态。
测试计数器的置数功能,设置不同的预置数,观察计数器是否能按照预置数开始计数。
五、实验结果与分析1、实验结果成功实现了十进制加法计数器的设计,计数器能够在输入脉冲的作用下进行正确计数。
清零和置数功能正常,能够满足实验要求。
2、结果分析通过对计数器输出波形的观察和分析,验证了计数器的工作原理和逻辑功能。
定时器计数器实验
一、AT89C51实验目的:
1.有两个定时/计数器,本试验中,将T1作为定时器用,定时50ms,T0作为计数器用,被计数的外部输入脉冲信号从单片机的P3.4接入,最大计数值为0ffffh。
单片机将在每50ms内对脉冲计数并送数码管实时显示,并利用T1定时从P3.7口输出周期为200ms占空比50%的方波。
2.用PROTEUS设计、仿真基于AT89C51单片机的脉冲计数与定时。
3.学会使用VSM虚拟示波器和计数/定时器
二、PROTEUS电路设计
本设计的电路原理图如图所示,这个设计都在ISIS平台中进行。
1.从PROTEUS库中选取元器件
①at89c51.bus:单片机
②7SEG-BCD-GRN:七段带译码BCD绿色数码管,
③button:按键
2.虚拟测试仪器
①vsm虚拟计数/定时器
单击工具栏,再在对象选择器中选中COUNTER TIMER(计数/计时器),打开其属性编辑况,单击运行模式下的下拉菜单如图,可以选择计数、频率、计时模式。
当前设置为计数模式。
②vsm虚拟示波器
单击工具栏,再在对象选择器中选中OSCILLOSCOPE,将P3.7与C信道连接。
三、原程序设计、生成目标代码文件
1.流程图
主程序流程
2.程序代码设计
四、proteus仿真
五、思考题
修改程序实现1S内对脉冲计数并送四位数码管实时显示,最大计数值为0ffffh,将COUNTER TIMER 属性设为频率,利用工具栏中的激励源DCLOCK作为脉冲输入源与p3.4口相连。
实验3、定时器计数器实验
实验三、定时器/计数器实验一、实验目的1、了解MCS-51单片机定时/计数器的基本结构、工作原理和工作方式。
2、掌握定时/计数器工作在定时器和计数器两种方式下的编程方法。
3、掌握数码管显示电路的驱动原理及编程方法。
二、实验内容1、编写单片机程序,用T0作定时器产生周期为1秒的方波(用查询方式编程),从P3.6,P3.7口输出,将P3.7接到示波器显示该方波波形;用T1作计数器对从P3.6输出的方波进行计数,计数结果通过P1口输出到发光二极管显示。
(计算机仿真)2、编写单片机程序,用T0作定时器产生周期为1秒的方波(用查询方式编程),从P3.6,P3.7口输出,将P3.6输出的方波接到P3.5口通过T1作计数器对该方波进行计数,计数值由LED显示,用存储示波器显示P3.7输出的方波。
(实验台验证)3、设计一个60秒计时器,秒计时结果用两位LED数码管显示。
(计算机仿真)4、选做:设置按键控制计时器的启、停及清零功能。
三、实验原理电路原理图如下,所需元件为:AT89C52、LED-YELLOW、7SEG-COM-CAT-GRN 当晶振为22.1184M时,一个机器周期为0.54251微秒,要实现500毫秒的定时,需要921659个机器周期,对于51单片机内部定时器来说,最大只能定时65536个机器周期,定时35.535毫秒,不能满足要求,为此必须借助软件循环进行扩展。
实现的方法是:用定时器中断定时10毫秒,再用软件扩展50倍即可得到500毫秒的定时。
当到达500毫秒时,对P3.7输出取反,可得到周期为1秒的方波。
选择模式1,每个10ms中断一次,设初值为X,根据下面公式,可求得X 的值。
(216-计数初值)*机器周期=定时时间36161010101184.2212)2(-⨯=⨯⨯-X 有关定时计数器的特殊功能寄存器,请参考课本。
选择模式1,每个10ms 中断一次,设初值为X ,根据下面公式,可求得X 的值。
实验五定时计数器
实验五定时/计数器应用实验一、实验目的1、通过实验掌握定时/计数器工作原理;2、通过实验掌握定时/计数器中断的特殊功能寄存器设置;二、实验内容1、根据计数器应用电路图图1-7编写程序,将P3.0口置为低电平,矩阵按键中的K0和K4变为定时计数器T0和T1的输入端。
由P1口控制的八个LED,初始状态八个LED的状态为LED0→LED7逐个移位循环点亮(每一时刻只有一个点亮,循环方向不变);应用T0的计数功能,实现按下3次K0实现循环方向改变一次, 无论哪个LEDx正在被点亮,都从该位LEDx开始反向循环点亮。
2、在第1题的基础上增加K4和T1的功能,应用T1的计数功能实现按下4次K4实现循环方向改变一次,无论哪个LEDx正在被点亮,都从该位LEDx开始反向循环点亮。
3、根据定时计数器控制流水灯电路图图1-8编写程序,将动态显示模块的KH左列由上到下的第5、6两个插针用短路套短接(将P3.4和P3.5短接),设置T0为定时器在P3.4引脚产生一个周期为100毫秒的方波,设置T1为计数器,每十个下降沿产生一次中断。
由P1口控制的八个LED,初始状态八个LED的状态全灭,每产生一次T1计数中断,点亮一个ledx,方向为LED0→LED7(每一时刻只有一个点亮,循环方向不变),即一秒钟移动一次。
4、根据定时计数器控制动态显示电路图图1-9编写一个P0口控制段选信号和P2口的高四位控制位选信号的四位数码管动态显示程序,不使用延时程序,必须使用定时计数器的中断,显示内容“1234”。
5、自己编写程序,设计数码管动态显示和定时计数器的创意实验,可以增加连接线。
注意:调整适当的延时时间,不使用定时计数器中断不算完成。
图1-7 计数器应用电路图图1-8 定时计数器控制流水灯电路图图1-9 定时计数器控制动态显示电路图评分表第一个#include <REGX51.H> #define uint unsigned int#define uchar unsigned char sbit gnd=P3^0;uchar temp;uchar i,j;bit k=0;//////////////////////////////void delay_ms(uint t){uchar i;while(t--){for(i=0;i<110;i++){;;}}}///////////////////////////////void init(){TMOD=0x05;TH0=(65536-1)/256;TL0=(65536-1)%256;ET0=1;TR0=1;EA=1;gnd=0;}///////////////////////////////void INT0_1(void) interrupt 1 {if(T0==0){delay_ms(10);if(T0==0){j++;if(j==3){k=~k;j=0;}TH0=(65536-1)/256;TL0=(65536-1)%256;}}else{TH0=(65536-1)/256;TL0=(65536-1)%256;}}///////////////////////////////void main(){init();while(1){P1=0xff;if(k==0){temp=0x80;}if(k==1){temp=0x01;}for(i=0;i<8;i++){P1=~temp;if(k==0){temp=temp>>1;}if(k==1){temp=temp<<1;}delay_ms(500);}}}第二个#include <REGX51.H> #define uint unsigned int#define uchar unsigned char sbit gnd=P3^0;uchar temp;uchar i,j,l;bit k=0;//////////////////////////////void delay_ms(uint t){uchar i;while(t--){for(i=0;i<110;i++){;;}}}///////////////////////////////void init(){TMOD=0x55;TH0=(65536-1)/256;TL0=(65536-1)%256;TH1=(65536-1)/256;TL1=(65536-1)%256;ET1=1;TR1=1;ET0=1;TR0=1;EA=1;gnd=0;}///////////////////////////////void timer_0(void) interrupt 1 {if(T0==0){delay_ms(10);if(T0==0){j++;if(j==3){k=~k;j=0;}TH0=(65536-1)/256;TL0=(65536-1)%256;}}else{TH0=(65536-1)/256;TL0=(65536-1)%256;}}///////////////////////////////void timer_1(void) interrupt 3 {if(T1==0){delay_ms(10);if(T1==0){l++;if(l==4){k=~k;l=0;}TH1=(65536-1)/256;TL1=(65536-1)%256;}}else{TH1=(65536-1)/256;TL1=(65536-1)%256;}///////////////////////////////void main(){init();while(1){P1=0xff;if(k==0){temp=0x80;}if(k==1){temp=0x01;}for(i=0;i<8;i++){P1=~temp;if(k==0){temp=temp>>1;}if(k==1){temp=temp<<1;}delay_ms(500);}}}第三个#include <REGX51.H> #define uint unsigned int#define uchar unsigned char uchar temp,count;uchar i;///////////////////////////////void init(){TMOD=0x51;TH0=(65536-10000)/256;TL0=(65536-10000)%256; TH1=(65536-10)/256;TL1=(65536-10)%256;ET0=1;TR0=1;ET1=1;TR1=1;EA=1;///////////////////////////////void timer_0(void) interrupt 1{count++;TH0=(65536-10000)/256;TL0=(65536-10000)%256;if(count==5){T0=~T0;count=0;}}///////////////////////////////void timer_1(void) interrupt 3{uchar i;i++;TH1=(65536-10)/256;TL1=(65536-10)%256;P1=~temp;temp=temp<<1;if(i==8){temp=0x01;i=0;}}///////////////////////////////void main(){init();P1=0xff;temp=0x01;while(1);}第四个#include <REGX51.H>#define uint unsigned int#define uchar unsigned charuchar code duan[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; uchar code wei[]={0xef,0xdf,0xbf,0x7f};///////////////////////////////void init(){TMOD=0x01;TH0=(65536-5000)/256;TL0=(65536-5000)%256;ET0=1;TR0=1;EA=1;}///////////////////////////////void timer_0(void) interrupt 1{uchar count;TH0=(65536-5000)/256;TL0=(65536-5000)%256;P0=duan[count+1];P2=wei[count];count++;if(count==4){count=0;}}///////////////////////////////void main(){init();while(1);}第五个#include <REGX51.H>#define uint unsigned int#define uchar unsigned charuchar code duan[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; uchar code wei[]={0xef,0xdf,0xbf,0x7f};uchar num[4];uchar sum;char sum1=60;uchar sec,min;uchar count,i;bit key0=0;bit key4=0;sbit gnd=P3^0;void Bcd(uint number);void key();///////////////////////////////void init(){TMOD=0x11;TH0=(65536-5000)/256;TL0=(65536-5000)%256; ET0=1;TR0=1;EA=1;gnd=0;}///////////////////////////////void key(){if(T0==0){while(T0==0);key0=~key0;}if(T1==0){while(T1==0);key4=~key4;}}///////////////////////////////void timer_0(void) interrupt 1 {TH0=(65536-5000)/256; TL0=(65536-5000)%256; key();if(key0==0){if(key4==0){count++;if(count==200){sec++;count=0;}if(sec==60)min++;sec=0;}if(min==60){min=0;}sum=min*100+sec;}else{;;}Bcd(sum);if(i==1){P0=(duan[num[i]]&0x7f);} else{P0=duan[num[i]];}P2=wei[i];i++;if(i==4){i=0;}}else{if(key4==0){count++;if(count==200){sum1--;count=0;if(sum1<0){sum1=60;}}}Bcd(sum1);if(i==1){P0=(duan[num[i]]&0x7f);} else{P0=duan[num[i]];}P2=wei[i];i++;if(i==4){i=0;}}///////////////////////////////void Bcd(uint number){num[0]=number/1000;num[1]=(number%1000)/100;num[2]=((number%1000)%100)/10; num[3]=((number%1000)%100)%10; }///////////////////////////////void main(){init();while(1);}。
实验五 定时器计数器实验
实验五定时器/计数器实验
一.实验目的
1.学习内部计数器、定时器的使用方法和编程方法
2.学习用查询方式应用定时器
3.掌握用中断方式应用定时器
二.实验设备
电脑、THDPJ-2型单片机开发综合实验箱及连接线
三.实验内容
1.将E:\原始程序\T10-计数器.asm,另存为E:\ 班级文件夹\个人文件夹\*.asm,接线并运行程序,记录结果。
接线方法:T0端接单次脉冲发生器,P1口接LED灯。
2.用查询定时器溢出方式实现1秒延时,并取代实验1(流水灯实验)中的延时1秒的子程序(当然,仍可以将延时写成子程序)。
3.用中断方式实现步骤2。
(自编流程图及程序)
4.(选作)在步骤3的基础上增加一个外部中断(INT0)。
一旦中断,要求显示高4位亮2秒(用循环子程序实现延时2秒)。
四.实验报告要求:每个步骤有硬件接线图、流程图,有程序,有观察到的现象。
最后有实验心得。
主程序框图
主程序框图。
计数器实验报告
计数器实验报告实验目的,通过实验掌握计数器的工作原理和使用方法,加深对数字电路的理解。
一、实验原理。
计数器是一种能够按照一定规律进行计数的电路。
在数字电路中,计数器是十分常见的一种元件,它能够将输入的脉冲信号转换为相应的数字输出。
常见的计数器有二进制计数器、十进制计数器等。
二、实验器材。
1. 计数器芯片。
2. 电源。
3. 示波器。
4. 逻辑开关。
5. 连接线。
6. 示波器探头。
三、实验步骤。
1. 将计数器芯片插入实验板中,并连接好电源。
2. 将示波器探头连接到计数器芯片的输出端口。
3. 通过逻辑开关输入脉冲信号,观察示波器上的输出波形。
4. 调整逻辑开关的输入频率,记录下不同频率下的输出波形。
5. 分析实验结果,总结计数器的工作特性。
四、实验结果。
经过实验,我们观察到在不同的输入频率下,计数器的输出波形呈现出不同的计数规律。
当输入频率增加时,计数器的计数速度也随之增加。
通过示波器的观测,我们可以清晰地看到计数器的工作状态,从而加深对其工作原理的理解。
五、实验分析。
通过本次实验,我们深入了解了计数器的工作原理和特性。
计数器作为数字电路中的重要元件,广泛应用于各种计数和计时场合。
掌握计数器的工作原理对于进一步学习数字电路和逻辑设计具有重要意义。
六、实验总结。
本次实验通过实际操作,使我们更加深入地理解了计数器的工作原理和特性。
在今后的学习和工作中,我们将进一步应用和拓展所学知识,不断提高自己的实践能力和创新能力。
七、实验心得。
通过本次实验,我对计数器有了更加深入的了解,也增强了对数字电路的兴趣。
在未来的学习和工作中,我将继续努力,不断提升自己的专业能力,为实现自己的梦想奠定坚实的基础。
以上就是本次计数器实验的实验报告,希望能对大家有所帮助。
谢谢!。
定时器实验报告
定时器实验报告引言定时器是现代电子设备中常见的一种功能模块,它可以提供精确的时间计量和控制。
本实验旨在通过对定时器的使用和调试,深入了解定时器的工作原理和应用。
一、实验目的本次实验的主要目的有三点:1. 了解定时器的基本原理和功能;2. 学会使用定时器进行时间计量和控制;3. 掌握定时器在电子设备中的应用。
二、实验装置和器材1. 单片机开发板;2. 电源;3. 连接线。
三、实验原理定时器是一种基于震荡电路和计数器的电子模块,通过内部的晶振或外接的时钟信号驱动,能够按照设置的时间间隔产生特定的脉冲或控制信号。
四、实验操作步骤1. 将开发板上的定时器模块与电源和单片机连接好;2. 在代码中设置定时器的工作模式和计数器初值;3. 运行程序,观察定时器是否正常工作;4. 尝试调整定时器的工作参数和配置,观察其对输出信号的影响。
五、实验结果与分析在本次实验中,经过不断的尝试和调试,我们成功实现了以下几个功能:1. 使用定时器生成1秒的周期信号,并控制LED灯的闪烁。
通过观察LED灯的亮灭状态,我们可以直观地判断定时器的工作是否正常。
2. 设定定时器的计数器初值为10,并在每次触发计数器溢出时输出一个特定的脉冲信号。
通过示波器测量输出信号的时间间隔,我们可以验证定时器的精度和稳定性。
3. 调整定时器的工作参数,如工作模式、计数器分频倍数等,观察对输出信号的影响。
我们发现不同的参数设置会导致输出信号的频率、占空比等发生变化,进一步验证了定时器的灵活性和可调性。
六、实验总结通过本次实验,我们对定时器的基本原理和使用方法有了更深入的了解。
定时器作为一种常用的电子模块,广泛应用于各种电子设备中,如计时器、时钟、PWM信号发生器等。
掌握定时器的使用技巧,可以为我们在电子设备的设计与开发中提供有力的支持。
实验中我们发现,定时器的性能主要受到两个因素的影响,即晶振或时钟信号的精度和定时器的配置参数。
在实际应用中,我们需要根据具体需求选择合适的硬件和适当的软件设置,以保证定时器的稳定性和精确性。
实验五--时序逻辑电路实验报告
实验五时序逻辑电路(计数器和寄存器)-实验报告一、实验目的1.掌握同步计数器设计方法与测试方法。
2.掌握常用中规模集成计数器的逻辑功能和使用方法。
二、实验设备设备:THHD-2型数字电子计数实验箱、示波器、信号源器件:74LS163、74LS00、74LS20等。
三、实验原理和实验电路1.计数器计数器不仅可用来计数,也可用于分频、定时和数字运算。
在实际工程应用中,一般很少使用小规模的触发器组成计数器,而是直接选用中规模集成计数器。
2.(1) 四位二进制(十六进制)计数器74LS161(74LS163)74LSl61是同步置数、异步清零的4位二进制加法计数器,其功能表见表5.1。
74LSl63是同步置数、同步清零的4位二进制加法计数器。
除清零为同步外,其他功能与74LSl61相同。
二者的外部引脚图也相同,如图5.1所示。
表5.1 74LSl61(74LS163)的功能表清零预置使能时钟预置数据输入输出工作模式R D LD EP ET CP A B C D Q A Q B Q C Q D0 ××××()××××0 0 0 0 异步清零1 0 ××D A D B D C D D D A D B D C D D同步置数1 1 0 ××××××保持数据保持1 1 ×0 ×××××保持数据保持1 1 1 1 ××××计数加1计数3.集成计数器的应用——实现任意M进制计数器一般情况任意M进制计数器的结构分为3类,第一类是由触发器构成的简单计数器。
第二类是由集成二进制计数器构成计数器。
第三类是由移位寄存器构成的移位寄存型计数器。
第一类,可利用时序逻辑电路的设计方法步骤进行设计。
定时计数器实验-单片机
单片机实验报告G A T EC /TM 1M 0G A T EC /TM 1M 0TH1TL1TH0TL0T1方式T1引脚T0引脚机器周期脉冲内部总线TMODTCON 外部中断相关位T F 1T R 1T F 0T R 0实验五 定时/计数器实验一、实验目的1.学习8051内部定时/计数器的工作原理及编程方法; 2.掌握定时/计数器外扩中断的方法。
二、实验原理8051单片机有2个16位的定时/计数器:定时器0(T0)和定时器1(T1)。
它们都有定时器或事件计数的功能,可用于定时控制、延时、对外部事件计数和检测等场合。
T0由2个特殊功能寄存器TH0和TL0构成,T1则由TH1和TL1构成。
作计数器时,通过引脚T0(P3.4)和T1(P3.5)对外部脉冲信号计数,当输入脉冲信号从1到0的负跳变时,计数器就自动加1。
计数的最高频率一般为振荡频率的1/24。
定时/计数器的结构:定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。
TMOD 是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON 是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。
计数器初值的计算:设计数器的最大计数值为M(根据不同工作方式,M 可以是213、216或28),则计算初值X的公式如下:X=M-要求的计数值(十六进制数)定时器初值的计算:在定时器模式下,计数器由单片机主脉冲fosc经12分频后计数。
因此,定时器定时初值计算公式:X=M-(要求的定时值)/(12/fosc)80C51单片机定时/计数器的工作由两个特殊功能寄存器控制。
TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。
❖工作方式寄存器TMOD:工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。
其格式如下:GATE:门控位。
GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息工程学院实验报告课程名称:微机原理与接口技术Array实验项目名称:定时器/计数器实验实验时间:班级:姓名:学号:一、实验目的1. 掌握8254 的工作方式及应用编程。
2. 掌握8254 典型应用电路的接法。
二、实验设备PC 机一台、TD-PITD+实验系统一套。
三、实验原理8254 是Intel 公司生产的可编程间隔定时器。
是8253 的改进型,比8253 具有更优良的性能。
8254 具有以下基本功能:(1)有 3 个独立的16 位计数器。
(2)每个计数器可按二进制或十进制(BCD)计数。
(3)每个计数器可编程工作于 6 种不同工作方式。
(4)8254 每个计数器允许的最高计数频率为10MHz(8253 为2MHz)。
(5)8254 有读回命令(8253 没有),除了可以读出当前计数单元的内容外,还可以读出状态寄存器的内容。
(6)计数脉冲可以是有规律的时钟信号,也可以是随机信号。
计数初值公式为:n=f CLKi ÷f OUTi、其中f CLKi 是输入时钟脉冲的频率,f OUTi 是输出波形的频率。
图5-1 是8254 的内部结构框图和引脚图,它是由与CPU 的接口、内部控制电路和三个计数器组成。
8254 的工作方式如下述:(1)方式0:计数到0 结束输出正跃变信号方式。
(2)方式1:硬件可重触发单稳方式。
(3)方式2:频率发生器方式。
(4)方式3:方波发生器。
(5)方式4:软件触发选通方式。
(6)方式5:硬件触发选通方式。
图5-1 8254 的内部接口和引脚8254 的控制字有两个:一个用来设置计数器的工作方式,称为方式控制字;另一个用来设置读回命令,称为读回控制字。
这两个控制字共用一个地址,由标识位来区分。
控制字格式如表5-1~5-3 所示。
表5-1 8254 的方式控制字格式表5-2 8254 读出控制字格式表5-3 8254 状态字格式8254 实验单元电路图如下图所示:图5-2 8254 实验电路原理图四、实验内容与步骤1. 计数应用实验编写程序,将8254 的计数器0 设置为方式3,计数值为十进制数4,用单次脉冲KK1+作为CLK0 时钟,OUT0 连接INTR1,每当KK1+按动5 次后产生中断请求,在屏幕上显示字符“5”。
实验步骤:(1)实验接线如图5-3 所示。
图5-3 (a) 8254 计数应用实验接线图图5-3(b) 8259计数应用实验实物接线图(2)运行Tdpit 集成操作软件,进入编辑调试集成环境。
(3)根据程序设计使用语言不同,在“语言设置”菜单项中设置所使用的语言。
如图 5-4所示。
该项一经设置,会再下次启动后仍保持不变。
图5-4 设置语言环境(4)开始新建文件进行编程。
点击“文件”菜单项中的“新建”,可以新建一个空白文档。
默认名为Td-pit1。
如图5-5所示。
(5)编写程序,如图5-6 所示,并保存,此时软件会提示输入新的文件名,输入文件名后点击保存。
图5-6 8254计数应用实验程序编辑界面(6)点击,编译文件,若程序编译无误,然后再点击,连接程序。
编译连接成功会在输出信息栏显示输出信息,如图5-7 所示。
图5-7 编译连接输出信息(7)编译连接成功后可以点击,运行程序,按动KK1+产生单次脉冲,观察实验现象。
(8)可改变计数值,验证8254 的计数功能。
2. 计数应用实验编写程序,将8254 的计数器 2 设置为方式3,用信号源 1.8432MHz 作为CLK2 时钟,计数初值为100,相当对CLK2 进行100 分频。
在OUT2 输出频率为18.432KHz 的时钟。
将OUT2 连接到计数器0 的CLK0,设置计数器0 也工作在方式3,计数初值为18432,相当是进行18432 分频。
则在OUT0 得到1Hz 的输出。
实验步骤:(1) 接线图如图5-8 所示,按图接线。
图5-8(a) 8254 定时应用实验接线图图5-8(b) 8254定时应用实验实物接线图(2)运行Tdpit 集成操作软件,根据实验内容,编写实验程序,编译、链接。
图5-9 8254定时应用实验程序编辑界面图5-10编译连接输出信息(3) 单元中GATE0 已经连接了一个上拉电阻,所以GATE0 不用连接。
(4) 运行实验程序,OUT0输出接D0 观察LED灯的闪烁频率是否为1HZ。
(5) 用软件所带示波器进行观测,观测方法:点击快捷工具栏上“”按钮,启动示波器显示窗口,即可观察波形显示。
五、实验结果及分析:1. 计数应用实验(1) 编译连接成功后,使用运行命令运行程序,按动KK1+产生单次脉冲,查看结果。
图5-12 结果显示窗口分析:每当KK1+按动5 次后产生中断请求,则在屏幕上显示字符“5”。
(2)改变计数值,验证8254 的计数功能。
图5-13 改变计数值实验结果分析:将实验程序中的计数初值改为6,并将屏幕显示字符改为“7”。
实验结果为:每当KK1+按动7次后产生中断请求,则在屏幕上显示字符“7”。
2. 定时应用实验(1) 运行实验程序,用软件所带示波器进行观测,观测方法:点击快捷工具栏上“”按钮,启动示波器显示窗口,即可观察波形显示。
示波器显示界面如图5-11所示。
图5-11 示波器显示界面分析:直接将OUT0 输出接D0,则观察到LED灯每秒亮一次,即输出是1HZ的脉冲。
也可用软件所带示波器进行观测,观测的波形如图5-11所示。
六、实验总结:通过本实验,我了解了8254 的工作方式及应用编程,以掌握了8254 典型应用电路的接法。
通过本次实验加深了对理论编程的知识的理解,巩固了我的理论知识。
附录:;T8254-1.asm;查看端口资源分配情况,记录实验系统I/O端口始地址INTR_IV ADD EQU 003CH ;INTR对应的中断矢量地址IOY0 EQU 0D000H ;片选IOY0对应的端口始地址MY8254_COUNT0 EQU IOY0+00H*4 ;8254计数器0端口地址MY8254_COUNT1 EQU IOY0+01H*4 ;8254计数器1端口地址MY8254_COUNT2 EQU IOY0+02H*4 ;8254计数器2端口地址MY8254_MODE EQU IOY0+03H*4 ;8254控制寄存器端口地址STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSDA TA SEGMENTCS_BAK DW ? ;保存INTR原中断处理程序入口段地址的变量IP_BAK DW ? ;保存INTR原中断处理程序入口偏移地址的变量IM_BAK DB ? ;保存INTR原中断屏蔽字的变量STR1 DB 'COUNT: $' ;显示的字符串DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXCLIMOV AX,0000H ;替换INTR的中断矢量MOV ES,AXMOV DI,INTR_IV ADDMOV AX,ES:[DI]MOV IP_BAK,AX ;保存INTR原中断处理程序入口偏移地址MOV AX,OFFSET MYISRMOV ES:[DI],AX ;设置当前中断处理程序入口偏移地址ADD DI,2MOV AX,ES:[DI]MOV CS_BAK,AX ;保存INTR原中断处理程序入口段地址MOV AX,SEG MYISRMOV ES:[DI],AX ;设置当前中断处理程序入口段地址IN AL,21HMOV IM_BAK,AL ;保存INTR原中断屏蔽字AND AL,7FHOUT 21H,ALSTIMOV DX,OFFSET STR1 ;显示字符串MOV AH,9INT 21HMOV DX,MY8254_MODE ;初始化8254工作方式MOV AL,10H ;计数器0,方式0OUT DX,ALMOV DX,MY8254_COUNT0 ;装入计数初值MOV AL,4OUT DX,ALWAIT1: MOV AH,1 ;判断是否有按键按下INT 16HJZ W AIT1 ;无按键则跳回继续等待,有则退出QUIT: CLIMOV AX,0000H ;恢复INTR原中断矢量MOV ES,AXMOV DI,INTR_IV ADDMOV AX,IP_BAK ;恢复INTR原中断处理程序入口偏移地址MOV ES:[DI],AXADD DI,2MOV AX,CS_BAK ;恢复INTR原中断处理程序入口段地址MOV ES:[DI],AXMOV AL,IM_BAK ;恢复INTR原中断屏蔽寄存器的屏蔽字OUT 21H,ALSTIMOV AX,4C00H ;返回到DOSINT 21HMYISR PROC NEAR ;中断处理程序MYISRPUSH AXMOV AL,35HMOV AH,0EHINT 10HMOV AL,20HINT 10HMOV DX,MY8254_COUNT0 ;重装计数初值MOV AL,4OUT DX,ALOVER: MOV AL,20H ;向PC机内部8259发送中断结束命令OUT 20H,ALPOP AXIRETMYISR ENDPCODE ENDSEND START;--------------------------------------------------------------------------------------------------------------------- ;T8254-2.asm;查看端口资源分配情况,记录实验系统I/O端口始地址IOY0 EQU 0D000H ;片选IOY0对应的端口始地址MY8254_COUNT0 EQU IOY0+00H*4 ;8254计数器0端口地址MY8254_COUNT1 EQU IOY0+01H*4 ;8254计数器1端口地址MY8254_COUNT2 EQU IOY0+02H*4 ;8254计数器2端口地址MY8254_MODE EQU IOY0+03H*4 ;8254控制寄存器端口地址STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODESTART: MOV DX,MY8254_MODE ;初始化8254工作方式MOV AL,0B6H ;计数器2,方式3OUT DX,ALMOV DX,MY8254_COUNT2 ;装入计数初值MOV AL,64H ;100分频OUT DX,ALMOV AL,00HOUT DX,ALMOV DX,MY8254_MODE ;初始化8254工作方式MOV AL,36H ;计数器0,方式3OUT DX,ALMOV DX,MY8254_COUNT0 ;装入计数初值MOV AL,00H ;18432分频OUT DX,ALMOV AL,48HOUT DX,ALQUIT: MOV AX,4C00H ;结束程序退出INT 21HCODE ENDSEND START。