微原实验报告8253
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计数器定时器的应用

微原硬件实验报告北京邮电大学微机原理硬件实验报告实验三:8253计数器/定时器的应用专业:信息工程学生姓名:×××学号:×××指导教师:××完成时间:2013年11月29日一、实验目的 (3)二、实验原理及内容 (3)1、实验原理 (3)①8253定时器介绍 (3)②8253初始化 (3)③8253控制字 (3)④注意事项 (4)2、实验内容 (4)①基本功能 (4)②拓展功能 (5)三、硬件连接图及程序流程图 (5)1、硬件连接图 (5)①8253定时器 (5)②数码管 (6)③译码器 (7)④扬声器 (7)⑤分频器 (8)2、程序流程图 (9)四、源程序 (10)五、实验结果 (12)六、实验总结 (13)1、都是不认真听课惹的祸 (13)2、难听的曲子 (13)七、实验收获与心得体会 (13)八、思考题 (13)一、实验目的1、进一步熟悉汇编语言;2、学习掌握8253用作定时器的编程原理。
二、实验原理及内容1、实验原理①8253定时器介绍Ⅰ、微机系统使用的8254,其3个通道均有固定的用途:0号计数器为系统时钟源,每隔55ms向系统主8259IR0提一次中断请求;1号计数器用于动态存储器的定时刷新控制;2号计数器为系统的发声源。
用户在使用微机系统的时候,可以使用0号和2号计数器,但不能改变对1号计数器的初始化。
Ⅱ、实验箱上的8253,其数据线D7—D0,地址线A1、A0和控制线RD、WR通过总线驱动卡和微机系统的三总线相连。
除此之外,三个计数器的引出段和片选端都是悬空的,这意味着实验箱上的8253的三个计数器都归用户使用,你可以单独使用其中的一个计数器,也可以串联使用其中的2个或3个计数器。
Ⅲ、8253计数器的输入信号,其频率不能超过2MHz,否则长时间使用,芯片过热,容易烧毁②8253初始化使用8253前,要进行初始化编程。
可编程定时器计数器(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的各种工作方式测试实验一、实验内容1、编写程序分别显示0,2,3几种工作方式下的波形本实验使用8253A的定时/计数器2,GATE2接高电平,CLK2接1MHZ的时钟脉冲,OUT2接示波器观测输出波形。
实验中,要求记录定时器的时间常数,测试方式2和方式3下的输出周期信号的频率和周期。
2、采用图3-2来产生1秒的时钟周期(此内容不做要求,根据实验的时间确定)图3-2为定时器的级联方式,主要用于产生长时间的定时操作。
图3-2实际上对输入时钟进行了两次分频。
三、实验线路连接io8253aequ 200hio8253bequ 201hio8253cequ 203hcode segmentassumecs:codestart:mov dx,io8253c ;向8253写控制字mov al,36h ;使0通道为工作方式3outdx,almov ax,0 ;写入循环计数初值1000mov dx,io8253aout dx,al ;先写入低字节moval,ahout dx,al ;后写入高字节mov ah,4ch ;程序退出int 21hcode endsend start实验四、利用8255A实现LED的流水点亮实验一、实验内容PC口接8个拨动开关K1-K8,PB口接8个LED。
初始由开关K1-K8设定8位不同的值,当执行程序后LED按K1-K8初始设定的值点亮,并向右流动(8255A工作在0方式),同时在数码管上显示“8255A”(数码管的片选信号自定)。
关于数码管的编程方法请看实验平台介绍(TPC-386EX学生实验指导书)。
二、实验接线图将8255A的片选信号8255CS插孔和译码输出210H-21FH插孔相连。
三、实验编程提示根据难易程度,学生可以选择完成下列两个程序之一:1、LED右流水仅仅取决于第1次开关的位置,一旦LED流水开始,LED流水的次序将不再理睬开关位置的重新变化。
2、在LED右流水中,如果开关的位置发生了变化,LED右流水从变化的位置重新开始。
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
硬件实验三 8253

一、实验目的1、掌握8253的基本工作原理和编程方法。
2、了解微机控制直流继电器的一般方法。
3、进一步熟悉使用8255、8253。
二、实验内容1、按图3-1虚线连接电路,将计数器0设置为方式0,计数器初值为N(N ≤0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)。
图3-12、按图3-2连接电路,将out1接LED 灯L0,让灯亮1s,熄灭1s (频率1HZ)。
图3-23、实验电路如图3-3,按虚线连接电路:CLK0接1MHZ ,GATE0,GATE1,接+5V ,OUT0接CLK1,OUT1接PA0,PC0接继电器驱动电路的开关输入端Ik 。
编程使用8253定时,让继电器周而复始的闭合5秒钟(指示灯灯亮),断开5秒钟(指示灯灯灭)。
图3-34. 实验电路如图3-4,8253的CLK0接1MHZ时钟,GATE0接8255的PA1,OUT0和8255的PA0接到与门的两个输入端,K8跳线连接喇叭,编程使计算机的数字键1、2、3、4、5、6、7作为电子琴按键,按下即发出相应的音阶。
图3-4 电子琴电路三、编程提示1、8253控制寄存器地址283H计数器0地址280H计数器1地址281HCLK0连接时钟1MHZ将8253计数器0设置为方式3、计数器1设置为方式0并联使用,CLK0接1MHZ时钟,设置两个计数器的初值(乘积为5000000)启动计数器工作后,经过5秒钟OUT1输出高电平。
通过8255A口查询OUT1的输出电平,用C口PC0输出开关量控制继电器动作。
继电器开关量输入端输入“1”时,继电器常开触点闭合,电路接通,指示灯发亮,输入“0”时断开,指示灯熄灭。
2、利用8255的PA0口来施加控制信号给与门,用来控制扬声器的开关状态。
再利用设置不同的计数值,使8253产生不同频率的波形,使扬声器产生不同频率的音调,达到类似与音阶的高低音变换。
微机原理实验 可编程定时器计数器82548253实验

图2 8253/8254定时器/计数器实验连线图
六、实验源程序清单
CODE SEGMENT
ASSUME CS:CODE
ORG 100H
START:MOV AL, 00010110B;控制字00-计数器0,01-低8位,011-方式3,0-二进制
OUT 03H,AL;将控制字写入控制寄存器
实验报告(45)
总分
指导教师签字:
年月日
备注:
注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。
2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。
图1可编程定时器/计数器8253/8254原理图
(2).计数器都有6种工作方式:
方式0—计数过程结束时中断;
方式1—可编程的单拍脉冲;
方式2—频率发生器;
方式3—方波发生器;
方式4—软件触发;
方式5—硬件触发。
(3)6种工作方式主要有5点不同:
一是启动计数器的触发方式和时刻不同;二是计数过程中门控信号GATE对计数操作的影响不同;三是OUT输出的波形不同;四是在计数过程中重新写入计数初值对计数过程的影响不同;五是计数过程结束,减法计数器是否恢复计数初值并自动重复计数过程的不同。
九、实验总结
硬件实验相对来说趣味性大了很多,同时也使得程序没那么复杂不过存在的问题突出表现于受到硬件实验条件的制约,硬件上的小问题就有可能导致不能出显预想的结果这也就使得在硬件连接上要很小心。
十、思考题
1.若8254模块选通线CS连到MCU主模块的地址A12,则应如何修改程序?
答:改变了存储芯片的地址范围所以将程序对应的地址范围改过即可。接A12对应地址范围是6800~6FFFH;接A14对应地址范围是3800~3FFFH。
可编程定时器计数器(8253)实验报告

END START
5・对程序进行编译、链接、仿真,仿真结果如图4、图5所示。
图4方波图(A通道,黄色)
图Байду номын сангаас脉冲图(D通道,绿色)
六、实验总结
本次实验,巫点在于自己找资料,理解透8253的控制方式及工作原理。只 要理解了 8253的原理,再配上汇编指令,便轻松完成本次实验。
到现在,一共做了 6次实验。6次实验都是与外设打交道,故常用到的指令 就MOV, OUT, IN三条指令,常用到的寄存器就AX, DX,常用到的寻址方式 是寄存器间接寻址(DX用在此处)。当访问的端口地址小于255时,则可以采 用直接寻址,不用DX间接寻址;当访问的端口地址大于255时,寄存器间接寻 址则是必须的,必须用到DX寄存器。
START:JMPTCONT
TCONTRO EQU 0A006H
TCONO
EQU OAOOOH
TCONl
EQU OA002H
TCON2
EQU OA004H
TCONT:
MOV DX.TCONTRO
MOV Ak27H;计数器0,只写初值«8位■方式3.BCD码
OUT DX.AL
MOV DX.TCONO
MOVAklOH;时钟为IMH乙计数时间“usrOOO•输出频率1KHZ
01读/写计数器低8位
10读/写计数器高8位
11先读/写计数器低8位,
畀读/写计数器髙8位」
图2 8253控制字格式
8253有4个端口,且通过A[1…0]引脚控制着4个端口。访问端口如所示。
A1
A0
访问端口
0
0
CNT0端口地址
0
1
CNT1端口地址
1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华北电力大学
实验报告
|
|
实验名称 8253应用
课程名称微机原理及应用
|
|
专业班级:自动化1202 学生姓名:屈言雪
学号: 201202020222 成绩:
指导教师:程海燕实验日期: 2014/12/16
一、实验目的及要求:
实验目的:(1) 学习可编程定时/计数器8253的工作原理及工作方式;
(2)掌握使用8253的应用编程方法,并设计出相应电路在实验箱上正确连接;
(3)熟练掌握WAVE6000实验系统的使用
实验要求:1、基本要求:利用8253输出周期为1秒的方波。
2、在8259的IR2端输入中断请求信号,该信号由8253的方波信号产生(频率
1Hz)。
每来一个上升沿,申请中断一次,CPU响应后通过输出接口74LS273使发
光二极管亮,第1次中断,LED0亮,第2次中断,LED1亮,…… 第8次中断,
LED7亮,中断8次后结束。
二、实验设备
1.计算机
b6000微机实验箱
3.导线若干
三、实验内容
1、基本要求:利用8253输出周期为1秒的方波。
2、在8259的IR2端输入中断请求信号,该信号由8253的方波信号产生(频率1Hz)。
每来
一个上升沿,申请中断一次,CPU响应后通过输出接口74LS273使发光二极管亮,第1次中断,LED0亮,第2次中断,LED1亮,…… 第8次中断,LED7亮,中断8次后结束。
四、实验步骤
1、Proteus中的设计:
(1)连接好8086与74LS373,如图:
(2)设置38译码器译码:根据74LS273地址为8000H,知A15-A0只有A15为1、其余全为0时,即Y0有效时选中273;8259的地址为9000H,Y1有效时选中8259;8253的地址为A000H,Y2有效时选中8253;将38译码器的A、B、C端口分别接地址A12、A13、A14,
使能端E1接A15,E2、E3都接地,如图:
(3)连线8259,注意8259的A0要连接8086的A1,因为8259的数据端连接8084的低八位数据线,即偶存储体,因此8086的A0一直为0,若用8259的A0连8086的A0,则不能选中8259的奇地址端口;但在实验室中,由于使用的是只有8位的8088,用8088的A0连接8259的A0即可;使能端连接Y1,8259的地址为9000H,即A15-A12分别为1001,38译码器Y1有效选中8259;8259IR2端接8253的OUT1,表示将方波信号送入IR2申请中断,
相当于开关的作用;如图:
273,MR接电源的原因:MR只有接电源时,273才具有锁存功能。
如图:
(5)8253的设置:
使用8253将1MHZ的信号变为1HZ的信号,因此将OUT0的输出连OUT1的输入;38译码器Y2有效时选中8253,因此使能端连接Y2;OUT0的输入端连接方波发生器;A0、A1端连接8086的
A1、A2,若是8088,则连8088的A0、A1,原理同8259;如图:
总设计图如下:
一次一盏,时隔一秒,如图:
软件流程图:
程序:
T8259A EQU 9000H T8259B EQU 9002H OUT273 EQU 8000H CODE SEGMENT ASSUME CS:CODE START:
MOV DX,0A006H MOV AL,37H
OUT DX,AL
MOV DX,0A000H MOV AL,00H
OUT DX,AL
MOV AL,10H
OUT DX,AL
MOV DX,0A006H MOV AL,77H
OUT DX,AL
MOV DX,0A002H MOV AL,00H
OUT DX,AL
MOV AL,10H
OUT DX,AL
CLI
MOV AL,13H
MOV DX,T8259A OUT DX,AL
MOV AL,80H
MOV DX,T8259B OUT DX,AL
MOV AL,01H
OUT DX,AL
MOV AX,0000H
MOV DS,AX
MOV BX,82H*4
MOV AX,OFFSET INTP
MOV [BX],AX
INC BX
INC BX
MOV AX,SEG INTP
MOV [BX],AX ;非规范装入中断向量
MOV DX,T8259B
IN AL,DX
AND AL,0FBH
OUT DX,AL ;编程开放IRQ2
MOV BL,1H ;编程灯全灭
MOV CX,8 ;设置中断次数
STI
L1:MOV AL,82H
MOV DX,0B000H
OUT DX,AL
CMP CX,0
JZ QUIT
JMP L1 ;Proteus中8086模型有问题,它取得的中断号是最后发到总线上的数据,并不是由8259发出的中断号,所以造成了要在这里执行EOI的假相,QUIT:CLI
MOV DX,T8259B
IN AL,DX
OR AL,04H
OUT DX,AL ;编程关闭IRQ2
STI
JMP $
INTP PROC NEAR ;中断服务子程序
CLI
PUSH AX
MOV AL,BL
MOV DX,OUT273
OUT DX,AL
ROL BL,1
SUB CX,1
MOV AL,20H
MOV DX,T8259A
OUT DX,AL
POP AX
STI
IRET ;自己编写中断服务子程
INTP ENDP
CODE ENDS
END START
2、LAB6000实验箱上的设计:
一、实验结果与数据分析
二、结论。