当前位置:文档之家› 微机实验8253

微机实验8253

浙江工业大学计算机学院实验报告实验名称定时/计数器(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 展望。

相关主题