微机实验8253
实验五 8253定时器

实验五8253定时器/计数器接口实验5.1实验目的掌握8253定时器/计数器的工作方式及应用编程。
5.2实验条件1. 北京达盛科技有限公司“缔造者”电子电气技术综合实验台、CPU挂箱、8086CPU模块。
2. PC机1台,已安装实验台8086开发调试软件。
3. 万用表、示波器。
5.3实验内容CPU挂箱自带一个脉冲发生器,按基频6.0MHz进行1分频(CLK0)、二分频(CLK1)、四分频(CLK2)、八分频 (CLK3)、十六分频(CLK4)输出方波。
编程设定8253计数器0、计数器1、计数器2工作于方波方式,观察其输出波形。
其中T0、T1的时钟由脉冲发生器的CLK3提供,其频率为750KHz,T0、T1的计数器初值设为927CH(37500十进制),则OUT0、OUT1输出的方波周期为(37500*4/3*10-6=0.05s)。
T2采用OUT0的输出为时钟,如果在T2中设置计数器初值为n,则OUT2输出方波周期为n*0.05s。
5.4实验步骤1. 实验接线将8253定时器/计数器的CS8253与地址译码电路的CS0相连,8253的CLK0、CLK1与脉冲发生器的CLK3相连8253的CLK2与OUT0相连,8253的OUT1与示波器相连,OUT2与开关量输入输出电路的LED1相连。
2. 建立PC机与8086CPU模块间的通讯连接将8086CPU模块正确地放在CPU挂箱上的CPU插槽中,系统上电后按下RESET键,几秒钟之后如果显示“P_”,说明CPU挂箱上的8086系统复位及8086CPU模块监控程序运行正常。
在PC机上打开8086开发调试软件,根据提示按下RESET键,几秒种后如果显示“C_”,说明与PC机通讯正常,同时8086开发调试软件用户界面提示通讯成功。
如果通讯不成功,试着选择串口COM2。
3. 编辑汇编语言源程序8086开发调试软件是将编辑、汇编、连接和调试集成在一起的综合开发环境,同时具有断点设定、程序下载到实验台等功能。
8253音乐发生器微机原理实验

8253音乐发生器实验接线图:单线连接:排线连接:将模块电源JP3接通将电源模块的JP7跳接. ?????I/O端口地址:8255的4个端口地址为300H~303HA口:300H,B口:301H,C口:302H,命令口:303H。
8253的四个端口地址为304H~307H其中通道0为304H,通道1为305H,通道2为306H,命令口为307H 流程图:系统资源分配本平台系统提供的I/O地址范围是300H~3FFH,目前已使用的I/O地址有:8255A:300H~303H8253A:304H~307H8251A:308H~30BHDAC0832:30FH8237A:主片0~0FH;从片0C0H~0DEH8259A:主片20H,21H;从片0A0H,0A1H在此区有一个TP1测试点,可以对译码信号进行检测。
本平台为用户提供了两个中断识别源分别为:IRQ2和IRQ10,当用户需要进行中断实验时,可以任意用单线连接,进行中断申请。
跳线开关说明; 音乐发生器程序Source Filesstack segment stackdw 200 dup(?)sstack endsdata segmentbg db 'Two tigers ...'db 0ah,0dhdb 'press any key to stop! ',0ah,0dh,'$'freq dw 2 dup(262,294,330,262) ;"两只老虎"乐曲中,音符的频率(音阶)dw 2 dup(330,349,392) ;其中,0频率表示结尾dw 2 dup(392,440,392,349,330,262)dw 2 dup(294,196,262),0time dw 10 dup(8),16,8,8,16 ; "两只老虎"乐曲中,音符的延时(节拍)dw 2 dup(4,4,4,4,8,8) ;其中4,8,16表示延时的次数dw 2 dup(8,8,16)old_seg dw ?old_off dw ?data endscode segmentassume cs:code, ds:data, ss:sstackstar proc far ;程序开始mov ax,datamov ds,axmov ax,sstackmov ss,axpush di ;寄存器压栈push sipush bppush bxmov al,90h ;8255初始化mov dx,303hout dx,almov al,0ch ;关闭8253的T2计数器(8255的PC6=0)mov dx,303hout dx,almov al,00h ;关闭喇叭(8255的PC0=0)mov dx,303hout dx,almov al,0b6h ;8253初始化mov dx,307hout dx,almov dx,offset bg ;显示提示信息mov ah,9int 21hmov si,offset freq ;设置频率指针→simov bp,offset time ;设置延时指针→bppp: mov ah, 0bh ;检测是否有任意键按下?int 21hcmp al,00jne end_sing ;若有,则结束演凑mov di,[si] ;取1个音符的频率→dicmp di,0 ;检测是否是乐曲结尾je end_sing ;若是,则结束演凑mov dx,12h ;计算音符的频率所对应的8253计数初值mov ax,34dch ;1.19318MHzdiv dimov dx,306h ;向8253装入计数初值out dx,al ;先装低字节mov al,ahout dx,al ;再装高字节mov dx,303h ;打开喇叭(8255的PC0=1)out dx,almov al,0dh ;打开8253的T2(PC6=1),开始发声out dx,almov bx,ds:[bp] ;取1个音符的延时次数→bxcall time_delay ;调用延时子程mov dx,303h ;关闭8253的T2(PC6=0)mov al,0chout dx,almov al,00h ;关闭喇叭(PC0=0)out dx,aladd si,2 ;取下1 个音符的频率add bp,2 ;取下1 个音符的延时次数jmp pp ;继续end_sing:mov dx, 303h ;关闭8253的T2mov al, 0chmov al, 00h ;关闭喇叭out dx, alpop bx ;寄存器出栈pop bppop sipop dimov ax,4c00h ;返回DOSint 21hstar endpnew_intr proc ;新中断服务程序dec bx ;该服务程序只将延时次数-1iretnew_intr endptime_delay proc near ;延时子程序pushf ;压栈push dspush espush bxmov ah,35h ;取原中断(INT1CH)的向量,并保存mov al,1ch ;INT 1CH —用户时钟服务int 21hmov old_off, bxmov bx, esmov old_seg, bxpop bxpop espush dsmov ah, 25h ;设置新中断服务程序的向量mov al, 1chmov dx, seg new_intrmov ds,dxlea dx, new_intrint 21hpop dsTD: cmp bx,0h ;延时次数已到?jnz TD ;未到,则继续mov ah,25h ;已到,则恢复原中断向量mov al,1chmov dx,old_segpush dxmov dx,old_offpop dsint 21hpop dspopf;time delay endrettime_delay endpcode endsend star ;程序结束。
实验三 8253计数器原理及分频实验

03H
1
00H
1
1
D2位
1
方式2
计数开
CLK
方式0
1 0
计数开
1
ห้องสมุดไป่ตู้
1
0
0
1
方式2
0
计数关
fX
计数器1计数结束后,同时自动关闭计数器2。读IN2,D2位为1
03H
00H
D2位
关闸门,地址0x03写入0x00 : D3位
0
1
0
方式2
计数关
CLK
方式0
计数开
方式2
计数关
1
1
0
1
0
1 0
0
0
1
0 1
往地址0x03写入0x00,关闸门。 然后锁存计数器2,再读计数器2的计数值,进行频率计算。
③ OUT:输出引脚。当计数到“0”时,OUT 引脚上必然有输出, 输出信号波形取决于工作方式。
8253内部端口的选择及每个通道的读/写操 作的选择如下表所示
RD WR A1 A0 寄存器选择和操作 1 0 0 0 写入计数器 0 1 0 0 1 写入计数器 1 1 0 1 0 写入计数器 2 1 0 1 1 写入控制寄存器 0 1 0 0 读计数器 0 0 1 0 1 读计数器 1 0 1 1 0 读计数器 2 0 1 1 1 无操作(3 态)
0 二进制 1 BCD
▼ 8253的工作方式和输出波形
方 功能
式
输出波形
0 计完最后一个数中断
写入计数值 N 后,经过 N+1 个 CLK 脉冲输出变高
1 硬件再触发单拍脉冲
单拍脉冲的宽度为 N 个 CLK 脉冲
可编程定时器计数器(8253)(微机实验报告)

可编程定时器/计数器(8253)一、实验目的 1)学会8253芯片和微机接口原理和方法。
芯片和微机接口原理和方法。
2)掌握8253定时器定时器//计数器的基本工作原理、工作方式和编程原理。
二、实验内容按图6虚线连接电路,将计数器0设置为方式0,计数器初值为N (N ≤0FH 0FH)),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)。
图 6按图7连接电路,连接电路,将计数器将计数器0、计数器1分别设置为方式3,计数初值设为10001000,用逻辑笔观察,用逻辑笔观察OUT1输出电平的变化(频率1HZ 1HZ))。
图 7三、编程提示1 1、、8253控制寄存器地址控制寄存器地址283H计数器0地址地址 280H 计数器1地址地址 281HCLK0连接时钟连接时钟 1MHZ2 2、参考流程图(见图、参考流程图(见图8、9): 开 始读计数器值显示计数值有键按下吗?开 始送计数器初值N Y结 束结 束设计数器0为工作方式0向计数器0送初值1000先送低字节后送高字节向计数器1送初值1000先送低字节后送高字节设计数器0为工作方式3设计数器1为工作方式3图 8 图图 9四、实验代码1、图6电路的实验代码电路的实验代码CODE SEGMENT ;CODE SEGMENT ;段定义开始(段定义开始(段定义开始(CODE CODE 段)段)ASSUME CS:CODE ; ASSUME CS:CODE ;规定规定CODE 为代码段为代码段START:MOV START:MOV AL,10H ;AL,10H ;AL,10H ;设置控制字设置控制字0001000000010000(计数器(计数器0,方式0,写两个字节,二进制计数)二进制计数)MOV DX,283H ; MOV DX,283H ;把控制寄存器地址放在把控制寄存器地址放在DX 寄存器中寄存器中OUT DX,AL ; OUT DX,AL ;将将AL 的值送入DX 端口端口MOV DX,280H ; MOV DX,280H ;把计数器把计数器0地址放在DX 寄存器中寄存器中MOV AL,0FH ; MOV AL,0FH ;将将0FH 存入AL 寄存器寄存器OUT DX,AL ; OUT DX,AL ;将此时将此时AL 的值送入DX 端口端口LP1: IN AL,DX ;LP1: IN AL,DX ;从从DX 端口读入8位,放在AL 寄存器中寄存器中CALL DISP ; CALL DISP ;调用调用DISP PUSH DX ; PUSH DX ;将将DX 内容保存到堆栈段内容保存到堆栈段MOV AH,06H ; MOV AH,06H ;将将06H 存入AH AH,为了下句调用,为了下句调用21中断中断MOV DL,0FFH ; MOV DL,0FFH ;将将0FFH 存入DLINT 21H ; INT 21H ;调用调用21中断中断POP DX ; POP DX ;将将DX 的内容推出栈段的内容推出栈段JZ LP1 ; JZ LP1 ;如果如果DX 的内容是0,就跳转到LP1MOV AH,4CH ; MOV AH,4CH ;将将4CH 存入AH AH,为了下句调用,为了下句调用21中断中断INT 21H ; INT 21H ;调用调用21中断中断DISP PROC NEAR ;DISP PROC NEAR ;定义一个名为定义一个名为DISP 的子程序的子程序PUSH DX ; PUSH DX ;把把DX 的内容保存到堆栈段中的内容保存到堆栈段中AND AL,0FH ;AL,0FH ;将将AL 寄存器的内容与0FH 进行“与”运算,再把结果存入AL 中MOV DL,AL ; MOV DL,AL ;将将AL 的值送入DL 寄存器寄存器CMP DL,9 ; CMP DL,9 ;比较比较DL 中的值与9的大小的大小JLE NUM ; JLE NUM ;如果如果DL 的值小于或等于9时,则跳转到NUM ADD DL,7 ; ADD DL,7 ;将将DL 的值与7进行相加后,再送入DL 中NUM: ADD DL,30H ;NUM: ADD DL,30H ;将将DL 的值与30H 进行相加后,再送入DL 中 MOV AH,02H ; MOV AH,02H ;将将02H 存入AHINT 21H ; INT 21H ;调用调用DOS21中断中断MOV DL,0DH ; MOV DL,0DH ;结合“结合“结合“MOV AH,02H MOV AH,02H MOV AH,02H”就是说输出”就是说输出0DHINT 21H ; INT 21H ;调用中断指令调用中断指令调用中断指令MOV DL,0AH ; MOV DL,0AH ;结合“结合“结合“MOV AH,02H MOV AH,02H MOV AH,02H”就是说输出”就是说输出0AHINT 21H ; INT 21H ;调用调用DOS21中断中断POP DX ; POP DX ;将将DX 的内容推出栈段的内容推出栈段RET ; RET ;子程序在功能完成后返回调用程序继续执行子程序在功能完成后返回调用程序继续执行 DISP ENDP ; DISP ENDP ;子程序结束子程序结束子程序结束CODE ENDS ; CODE ENDS ;代码段结束代码段结束代码段结束END START ; END START ;程序结束程序结束程序结束2、图7电路的实验代码电路的实验代码CODE SEGMENT ;CODE SEGMENT ;段定义开始(段定义开始(段定义开始(CODE CODE 段)段)ASSUME CS:CODE ; ASSUME CS:CODE ;规定规定CODE 为代码段为代码段START:MOV DX,283H ;START:MOV DX,283H ;把控制寄存器地址放在把控制寄存器地址放在DX 寄存器中寄存器中MOV AL,36H ; MOV AL,36H ;设置控制字设置控制字0011011000110110(计数器(计数器0,方式3,写两个字节,二进制计数)二进制计数)OUT DX,AL ; OUT DX,AL ;将将AL 的值送入DX 端口端口MOV AX,1000H ; MOV AX,1000H ;该语句是立即寻址方式,就是把该语句是立即寻址方式,就是把1000H 这个数赋给AX MOV DX,280H ; MOV DX,280H ;把计数器把计数器0地址放在DX 寄存器中寄存器中OUT DX,AL ; OUT DX,AL ;将将AL 的值送入DX 端口端口MOV AL,AH ; MOV AL,AH ;将将AX 的高8位存入AL 寄存器中寄存器中OUT DX,AL ; OUT DX,AL ;将此时将此时AL 的值送入DX 端口端口MOV DX,283H ; MOV DX,283H ;把端口地址放在把端口地址放在DX 寄存器中寄存器中MOV AL,76H ; MOV AL,76H ;设置控制字设置控制字0111011001110110(计数器(计数器1,方式3,写两个字节,二进制计数)二进制计数) OUT DX,AL ; OUT DX,AL ;将将AL 的值送入DX 端口端口MOV AX,1000H ; MOV AX,1000H ;把把1000H 赋给AXMOV DX,281H ; MOV DX,281H ;把端口地址放在把端口地址放在DX 寄存器中寄存器中OUT DX,AL ; OUT DX,AL ;将将AX 的低8位送入DX 端口端口MOV AL,AH ; MOV AL,AH ;将将AX 的高8位存入AL 寄存器中寄存器中OUT DX,AL ; OUT DX,AL ;将将AL 的值送入DX 端口端口MOV AH,4CH ; MOV AH,4CH ;将将4CH 存入AHINT 21H ; INT 21H ;调用调用DOS21中断中断CODE ENDS ;CODE ENDS ;代码段结束代码段结束代码段结束END START ; END START ;程序结束程序结束程序结束五、实验总结通过实验,学会通过实验,学会8253芯片和微机接口原理和方法,掌握8253定时器定时器//计数。
实验三 8253定时 计数器实验

实验三8253定时/计数器实验一.实验目的了解8253的硬件连接方法,掌握8253的各种方式的编程及其原理。
二.实验要求编写程序,将8253的计数器0设置为方式3(方波),计数器1设置为方式2(分频),计数器2设置为方式2(分频);计数器0的输出作为计数器1的输入,计数器1的输出作为计数器2的输入;计数器2的输出接在一个LED上,运行后可观察到该LED在不停地闪烁。
1. 编程时用程序框图中的三个计数初值,计算OUT2的输出频率,用手表观察LED,进行核对。
2. 修改程序中的三个计数初值,使OUT2的输出频率为1Hz,用手表观察LED,进行核对。
3. 上面计数方式选用的是16进制,现若改用BCD码,试修改程序中的三个计数初值,使LED的闪亮频率仍为1Hz。
三.实验电路及连线GATE0~GATE2连至电源+5V,从波特率开关边的f插孔用线连至CLK0,OUT0用线连至CLK1,OUT1用线连至CLK2,OUT2用线连至一个发光管(DL1),8253片选孔CS 用线连至译码处228~22FH插孔。
四.实验说明8253工作频率为0~2MHZ,所以输入的时钟频率必须在2MHZ之下。
实验板上的晶振为4.9152MHZ,需经74LS393(16分频),由Q3输出307200HZ到CLK0(将波特率开关拨至9600)。
五.实验内容(一)程序:DA TA SEGMENTDA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: PUSH DSMOV AX,0HPUSH AXMOV AX,DATAMOV DS,AXCLI ;关中断MOV DX,22BH ;定时器0工作在方式3MOV AL,00110111BOUT DX,ALMOV DX,228HMOV AL,00HOUT DX,ALMOV AL,02HOUT DX,ALMOV DX,22BH ;定时器1工作在方式2MOV AL,01110101BOUT DX,ALMOV DX,229HMOV AL,18HOUT DX,ALMOV AL,00HOUT DX,ALMOV DX,22BH ;定时器2工作在方式2MOV AL,10110101BOUT DX,ALMOV DX,22AHMOV AL,0AHOUT DX,ALMOV AL,00HOUT DX,ALSTIJMP $CODE ENDSEND START输出频率:f=307200HZ/(200H*18H*0AH)=2HZ修改后程序:DA TA SEGMENTDA TA ENDSCODE SEGMENTSTART: PUSH DSMOV AX,0HPUSH AXMOV AX,DATAMOV DS,AXCLI ;关中断MOV DX,22BH ;定时器0工作在方式3 MOV AL,00110111BOUT DX,ALMOV DX,228HMOV AL,00HOUT DX,ALMOV AL,02HOUT DX,ALMOV DX,22BH ;定时器1工作在方式2 MOV AL,01110101BOUT DX,ALMOV DX,229HMOV AL,30H ;初值30HOUT DX,ALMOV AL,00HOUT DX,ALMOV DX,22BH ;定时器2工作在方式2 MOV AL,10110101BOUT DX,ALMOV DX,22AHMOV AL,0AHOUT DX,ALMOV AL,00HOUT DX,ALSTIJMP $CODE ENDSEND START输出频率1HZ(二)OUT1----LED1:点亮0.5s,熄灭0.5sOUT2----LED2:点亮1s,熄灭3s程序:DA TA SEGMENTDA TA ENDSCODE SEGMENTSTART: PUSH DSMOV AX,0HPUSH AXMOV AX,DATAMOV DS,AXCLI ;关中断MOV DX,22BH ;定时器0工作在方式3 MOV AL,00110111B ;OUT DX,ALMOV DX,228HMOV AL,00HOUT DX,ALMOV AL,02HOUT DX,ALMOV DX,22BH ;定时器1工作在方式2 MOV AL,01110111BOUT DX,ALMOV DX,229HMOV AL,35H ;35H 58hOUT DX,ALMOV AL,15H ;15H 02hOUT DX,ALMOV DX,22BH ;定时器2工作在方式2 MOV AL,10110100BOUT DX,ALMOV DX,22AHMOV AL,04H ;04hOUT DX,ALMOV AL,00HOUT DX,ALSTIJMP $CODE ENDSEND START。
可编程定时器计数器(8253) 实验报告

实验名称可编程定时器/计数器(8253) 学生姓名学生学号专业班级指导老师2015-1-7实验六可编程定时器/计数器(8253)一、实验目的掌握8253芯片和微机接口原理和方法,掌握8253定时器/计数器的工作方式和编程原理。
二、实验内容1.设计8253定时器/技术器仿真电路图;2.根据仿真电路图,编写代码,对8253定时器/计数器进行仿真。
三、实验要求1.要求计数器2工作于模式1(暂稳态触发器),计数初值为1250;2.计数器0工作于方式3(方波模式),输出一个1KHz的方波, 8253的输入时钟为1MHz,计数初始值格式为BCD。
3.8253与系统的连接如错误!未找到引用源。
所示。
图 1计数器8253与8086连接原理图注:实验过程中,发现错误!未找到引用源。
有误。
应将8253定时器/计数器右边部分的电阻R2与按钮交换位置。
四、实验原理8253具有3个独立的计数通道,采用减1计数方式。
在门控信号有效时,每输入1个计数脉冲,通道作1次计数操作。
当计数脉冲是已知周期的时钟信号时,计数就成为定时。
8253的工作方式3被称作方波发生器。
任一通道工作在方式3,只在计数值n为偶数,则可输出重复周期为n、占空比为1:1的方波。
进入工作方式3,OUTi输出低电平,装入计数值后,OUTi立即跳变为高电平。
如果当GATE为高电平,则立即开始减“1”计数,OUTi保持为高电平,若n为偶数,则当计数值减到n/2时,OUTi跳变为低电平,一直保持到计数值为“0”,系统才自动重新置入计数值n,实现循环计数。
这时OUTi端输出的周期为n×CLKi 周期,占空比为1:1的方波序列;若n为奇数,则OUTi端输出周期为n×CLKi 周期,占空比为((n+1)/2)/((n-1)/2)的近似方波序列。
8253定时器/计数器控制字决定这定时器0,1,2的工作模式。
一旦CPU对控制字进行写操作,且对相应的定时器有效,则相应定时器改变工作模式,可能准备接收计时初值。
接口技术实验-8253定时计数器

接口技术实验报告
实验三:可编程定时/计数器8253
一、实验目的
1、学会8253芯片和微机接口的原理和方法。
2、掌握8253定时器/计数器的工作方式和编程原理。
二、实验设备
微机原理实验箱、计算机一套。
三、实验内容
8253计数器0,1工作于方波方式,产生方波。
四、实验原理
本实验用到三部分电路:脉冲发生电路、分频电路以及8253定时器/计数器电路。
脉冲发生电路:实验台上提供8MHZ的脉冲源,见下图,实验台上标有8MHZ的插
孔,即为脉冲的输出端。
脉冲发生电路
分频电路:该电路由一片74LS393组成,见下图。
T0-T7为分频输出插孔。
该计数器在加电时由RESET信号清零。
当脉冲输入为8.0MHZ时,T0-T7输出脉冲频率依次为4.0MHZ,2.0MHZ,1.0MHZ,500KHZ,250KHZ,125KHZ,62500HZ,31250HZ。
分频电路
8253定时器/计数器电路:该电路由1片8253组成,8253的片选、数据口、地址、读、写线均已接好,时钟输入分别为CLK0、CLK1。
定时器输出、GATE控制孔对应如下:OUT0、GATE0、OUT1、GATE1。
原理图如下:
注:GATE信号无输入时为高电平
8253定时器/计数器电路
四、实验连线
1、实验连线:
T接8.0MHZ;CLK0插孔接分频器74LS393(左下方)的T2插孔; OUT0接CLK 1;OUT1接发光二极管;
各通道门控信号GATE +5V
2、编程调试程序。
3、全速运行,观察实验结果。
8253实验 微机原理与接口技术

8253 实验硬件接线图
实验要求
(1)掌握8253的编程方法。观察 OUT2 端输出 的波形。
(2)修改程序
使 OUT2 分别输出频率:为 500Hz、10Hz 的方 波。
定时/计数器 8253 实验
1. 实验目的
⑴ 学会 8253 芯片和微机接口原理方法。 ⑵ 掌握 8253 定时器/计数器的工作方式 和编程原理。
ห้องสมุดไป่ตู้CS
A1A0 0通道 1通道 2通道 控制口
2、实验内容
01001000B 01001101B 01001010B 01001111B
8253A的A0、A1接系统地址总线A0、A1,故8253A 有四个端口地址。经地址译码器译码后,四个口地址 为: 48H、49H、4AH、4BH,分别对应通道0、通 道1、通道2和控制字。
(计算计数初值、观察波形)。
3、流程图
8253 实验程序(主程序)
CODE SEGMENT ASSUME CS:CODE EQU 004BH TCONTRO TCON2 EQU 004AH CONTPORT EQU 00DFH DATAPORT EQU 00DEH DATA1 EQU 0500H START: JMP TCONT TCONT: CALL FORMAT CALL LEDDISP MOV DX, TCONTRO MOV AL, 0B6H OUT MOV MOV OUT MOV OUT HLT DX, DX, AL, DX, AL, DX, AL TCON2 00 AL 10H AL
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浙江工业大学计算机学院实验报告实验名称定时/计数器(8253)一、实验内容与要求1.1 实验内容1.计数器方式0实验将计数器0设置为方式0,计数器初值为N(N≤0FH),用手动开关逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)。
2.计数器方式3实验将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化(频率1Hz)。
3. 计数器级联实验将计数器0设置为方式3(方波),计数器1设置为方式2(分频)。
实现计数器0的输出为方波,计数器1的输入是计数器0输出。
人机交互界面设计:实现在显示屏幕上提示输入计数器0(方波)的参数和计数器1(分频信号)的参数。
1.2 实验要求(1)正确完成硬件电路连线;(2)使用8253定时/计数器芯片,除片选引脚,其他信号都已接好,进行有关结构设计和编程(3)编写正确汇编程序,完成正确的屏幕以及硬件仪器的显示。
二、实验原理与硬件连线2.1 实验原理8253/8254 定时/计数器总体结构如图2.1.1所示,外部引脚定义如图2.1.2所示图2.1.1 定时/计数器总体结构 图2.1.2 外部引脚定义2.2 硬件连线1.实验1硬件连线如图2.21所示:图2.2.1 TPC-USB 平台计数器方式0实验连线图2.实验2硬件连线如图2.22所示:U5 8253+5V+5V图2.2.2 TPC-USB平台计数器方式3实验连线3.实验3硬件连线如图2.23所示:U5 8253+5V+5V图2.2.3 TPC-USB平台计数器级联实验连线三、设计思路、步骤和程序流程图3.1 设计思路(1)硬件连线:在TPC-USB实验板上,进行三种方式下的8253计数器实验(2)程序设计:通过对实验要求的理解,编写想关的汇编代码(3)两者结合显示符合实验要求的结果3.2 实验步骤3.3 程序流程(1)计数器方式0实验,流程如图3.3.1:图3.3.1 TPC-USB平台计数器方式0实验流程图(2)计数器方式3实验,流程如图3.3.2:图3.3.2 TPC-USB平台计数器方式3实验流程图(3)计数器级联方式实验,流程如图3.3.3:图3.3.3 TPC-USB平台计数器级联实验流程图四、程序清单与执行结果4.1 程序清单1.计数器方式0实验CODE SEGMENTASSUME CS:CODESTART:MOV AL,10H ;计数器0,方式0,写两个字节,二进制计数MOV DX,283H ;把控制寄存器地址放在DX寄存器中OUT DX,AL ;将AL的值送入DX端口MOV DX,280H ;把计数器0地址放在DX寄存器中MOV AL,0FH ;将0FH存入AL寄存器OUT DX,AL ;将此时AL的值送入DX端口LP1: IN AL,DX ;从DX端口读入8位,放在AL寄存器中CALL DISP ;调用DISPPUSH DX ;将DX内容保存到堆栈段MOV AH,06H ;将06H存入AH,为了下句调用21中断MOV DL,0FFH ;将0FFH存入DLINT 21H ;调用21中断POP DX ;将DX的内容推出栈段JZ LP1 ;如果DX的内容是0,就跳转到LP1MOV AH,4CH ;将4CH存入AH,为了下句调用21中断INT 21H ;调用21中断DISP PROC NEAR ;定义一个名为DISP的子程序PUSH DX ;把DX的内容保存到堆栈段中AND AL,0FH ;将AL寄存器的内容与0FH进行“与”运算,再把结果存入AL中MOV DL,AL ;将AL的值送入DL寄存器CMP DL,9 ;比较DL中的值与9的大小JLE NUM ;如果DL的值小于或等于9时,则跳转到NUMADD DL,7 ;将DL的值与7进行相加后,再送入DL中NUM: ADD DL,30H ;将DL的值与30H进行相加后,再送入DL中MOV AH,02H ;将02H存入AHINT 21H ;调用DOS21中断MOV DL,0DH ;结合“MOV AH,02H”,输出0DHINT 21H ;调用中断指令MOV DL,0AH ;结合“MOV AH,02H”,输出0AHINT 21H ;调用DOS21中断POP DX ;将DX的内容推出栈段RET ;子程序在功能完成后返回调用程序继续执行DISP ENDP ;子程序结束CODE ENDS ;代码段结束END START2.计数器方式3实验CODE SEGMENTASSUME CS:CODESTART:MOV DX,283H ;把控制寄存器地址放在DX寄存器中MOV AL,36H ;设置控制字00110110(计数器0,方式3,写两个字节,二进制计数)OUT DX,AL ;将AL的值送入DX端口MOV AX,1000H ;把1000H这个数赋给AXMOV DX,280H ;把计数器0地址放在DX寄存器中OUT DX,AL ;将AL的值送入DX端口MOV AL,AH ;将AX的高8位存入AL寄存器中OUT DX,AL ;将此时AL的值送入DX端口MOV DX,283H ;把端口地址放在DX寄存器中MOV AL,76H ;设置控制字01110110(计数器1,方式3,写两个字节,二进制计数)OUT DX,AL ;将AL的值送入DX端口MOV AX,1000H ;把1000H赋给AXMOV DX,281H ;把端口地址放在DX寄存器中OUT DX,AL ;将AX的低8位送入DX端口MOV AL,AH ;将AX的高8位存入AL寄存器中OUT DX,AL ;将AL的值送入DX端口MOV AH,4CH ;将4CH存入AHINT 21H ;调用DOS21中断CODE ENDS ;代码段结束END START;程序结束3. 计数器级联实验data segmentmesg1 db 13,10,'counter0:','$'mesg2 db 13,10,'counter1:','$'mesg3 db 13,10,'continue?(y/n)','$'mesg4 db 13,10,13,10,'thank you!',13,10,'$'errorm db 13,10,'input error!','$'counter0 dw 0counter1 dw 0data endscode segmentassume cs:code,ds:data main proc farstart:mov dx,datamov ds,dxdo:sub bx,bxsub ax,axmov counter0,0mov counter1,0 ;initl1:mov dx,offset mesg1 mov ah,09hint 21hrd1 : ;read counter0 mov al,0 ;判断有无输入mov ah,01 ;read a char int 21hcmp al,0jz rd1cmp al,13 ;if enterje fdone1jmp tdone1fdone1: jmp done1tdone1: cmp al,10je fdone1cmp al,'0' ;if input<0 or input>9 errorjb errorcmp al,'9'ja errorpush axmov ax,10mul counter0mov counter0,ax ;counter0=counter*10 pop axsub bx,bxmov bl,alsub bl,30hadd counter0,bx ;counter=counter+input jmp rd1error:mov dx,offset errormmov ah,09hint 21hmov dl,7mov ah,2int 21hjmp done3tr: ;for jmp domov dl,almov ah,02hint 21hmov dl,10int 21hmov dl,13int 21hjmp dol2:mov dx,offset mesg2 mov ah,09hint 21hrd2:mov al,0 ;判断有无输入mov ah,01 ;read counter1int 21hcmp al,0jz rd2cmp al,13 ;if enterje fdone2cmp al,10je fdone2jmp tdone2fdone2: jmp done2tdone2:cmp al,10je fdone2cmp al,'0'jb errorcmp al,'9'ja errorpush axmov ax,10mul counter1mov counter1,ax ;counter1=counter1*10sub bx,bxmov bl,alsub bl,30h ;bh=0add counter1,bx ;counter1=counter1+input jmp rd2done1:jmp l2done2:jmp out8253 ;after enter two counters; set 8253 and do itdone3:mov dx,offset mesg3mov ah,09hint 21hl3: mov ah,07hint 21hcmp al,'y'je trcmp al,'y'cmp al,'n'je quitcmp al,'n'je quitmov dl,7mov ah,02hint 21hjmp l3out8253: ;work code mov al,00110110b mov dx,283hout dx,almov ax, counter0 mov dx,280hout dx,almov al,ahout dx,almov al,01110110b mov dx,283hout dx,almov ax,counter1mov dx,281hout dx,almov al,ahout dx,almov cx,2801delay: loop delayjmp done3quit: ;return to dosmov dx,offset mesg4mov ah,9int 21hmov ax,4c00hint 21hmain endpcode endsend start4.2 执行结果(1)计数器方式0实验,执行结果如图4.2.1所示(2)计数器方式3实验,执行结果如图4.2.2所示(3)计数器级联实验,执行结果如图4.2.3所示图4.2.3实验3执行结果五、程序调试说明和实验感想5.1 调试说明5.2 实验感想与收获5.3 实验特色5.4 展望。