




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 / 17 文档可自由编辑打印实验一设计数码管电子表一一实验要求:实验要求:使用使用 8253 的两个计数器串连,作为微机系统的外扩定时源,以数码管电路的两个计数器串连,作为微机系统的外扩定时源,以数码管电路作为外扩输出设备,采用中断方式编程,实现数码管电子表作为外扩输出设备,采用中断方式编程,实现数码管电子表“具体要求如具体要求如下:下:1六位数码管分别显示时,分,秒。六位数码管分别显示时,分,秒。2初始时间由主机键盘输入。初始时间由主机键盘输入。3主机按任意键停止计时返回主机按任意键停止计时返回 DOS。二:实验电路二:实验电路 +5V 与计算机数据线相连 208H20FH 接 B4 端
2、子 A(+5V) A1 Q2 B(8MHZ) A0 IOR IOW 8253 CS 200H207H(*注意:A1,A0 用来选择 8253 内部三个计数器中的一个,它们分别与计算机地址线的低两位相连。RD,WR 用来控制 8253 的读写,它们分别与计算机的 IOR,IOW 相连)电路分析:电路分析:从 Q2 出来的时钟频率为 1MHZ,为实现一秒钟调用一次中断,必须要每 1000000 次时钟调用一次中断。我们同时将计数器 0 和计数器 1 的初值都设为 1000,并将计数器 0 的输出OUT0 作为计数器 1 的时钟,并将计数器 1 的输出 OUT1 连到 B4 端子上,这样就实现了每1
3、00010001000000 次时钟调用一次中断。三三8253 控制字格式控制字格式 D7 D6 D5 D4 D3 D2 D1 D0 SC1 SC2 RL1 RL0 M2 M1 M0 BCD GATE0 D7-D0GATE1 OUT0 OUT1CS OUT2A1 CLK0A0 CLK1RD CLK2 WR 2*393IO 地址译码器数码管电路通道选择:00=计数器 001=计数器 110=计数器 211=非法操作类型:00=计数器锁存01读/写低字节10读/写高字节11读/写 16 位字,先低字节,后高字节方式选择:000方式 0001方式 1X10方式 2X11方式 3100方式 4101方
4、式 5计数方式:0=二进制计数1BCD 码计数2 / 17 文档可自由编辑打印四程序清单:四程序清单:TITLE DISPTIMEDSEG SEGMENT INPUT_TIM DB Please input the current t ime.,13,10,$ SHOW_TIM DB Time is as the follow.Press Ctr-C to exit.,13,10,$ BAD_DATA DB Digits mush be between 0 and 9,13,10,$ BAD_HRS DB Hour must be between 0 and 23,13,10,$ BAD_MI
5、NS DB Minutes mush be between 0 and 59,13,10,$ BAD_SECS DB Seconds mush be between 0 and 59,13,10,$ CRLF DB 13,10,$ ASK_HRS DB Hour(0-23):$ ASK_MINS DB Minute(0-59):$ ASK_SECS DB Second(0-59):$ USER DB 3,3 DUP(?) TIME DB 3 DUP(?) COUNT DW 1 OLD0A DD ? TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
6、,77H,7CH,39H,5EH,79H,71HDSEG ENDSSSEG SEGMENT STACK STACK DB 256 DUP(?)SSEG ENDSCSEG SEGMENTASSUME CS:CSEG,SS:SSEG,DS:DSEG,ES:DSEGSTART PROC FAR MOV AX,DSEG MOV DS,AX CALL GET_TIME CLI CALL I8253 (初始化 8253) CALL I8259 (初始化 8259) CALL RD0A (读入原 0A 中断向量) CALL WR0A(写入新中断向量)ROTATE: CALL DISPLAY(只要不按键,就不
7、断调用 DISPLAY 显示 TIME 变量中的时间) MOV AH,1 INT 16H JZ ROTATE (按键输入后退出。 ) CALL RESET MOV AH,4CH INT 21H RETSTART ENDP;*(SERVICE 为新的中断程序)SERVICE PROC NEAR PUSH AX PUSH DS MOV AX,DSEG MOV DS,AX CALL CHANGE_TIME(函数 CHANGE_TIME 用以将时间增加一秒)MOV AL,20H OUT 20H,AL(送应答信号) POP DS POP AX IRETSERVICE ENDP;*(此函数将保存在 TIM
8、E 变量中的时间显示在数码管上。)DISPLAY PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI MOV SI,OFFSET TIME MOV BX,OFFSET TABLE MOV CL,4 MOV AL,SI MOV AH,AL3 / 17 文档可自由编辑打印 SAR AL,CL AND AH,00001111B XLAT MOV DX,201H OUT DX,AL MOV DX,200H MOV AL,01H OUT DX,AL MOV AL,0 OUT DX,AL MOV AL,AH XLAT MOV DX,201H OUT DX,A
9、L MOV DX,200H MOV AL,02H OUT DX,AL MOV AL,0 OUT DX,AL MOV AL,SI+1 MOV AH,AL SAR AL,CL AND AH,00001111B XLAT MOV DX,201H OUT DX,AL MOV DX,200H MOV AL,04H OUT DX,AL MOV AL,0 OUT DX,AL MOV AL,AH XLAT MOV DX,201H OUT DX,AL MOV DX,200H MOV AL,08H OUT DX,AL MOV AL,0 OUT DX,AL MOV AL,SI+2 MOV AH,AL SAR AL,
10、CL AND AH,00001111B XLAT MOV DX,201H OUT DX,AL MOV DX,200H MOV AL,10H OUT DX,AL MOV AL,0 OUT DX,AL MOV AL,AH XLAT MOV DX,201H OUT DX,AL MOV DX,200H MOV AL,20H OUT DX,AL MOV AL,0 OUT DX,AL POP SI POP DX POP CX POP BX POP AX RETDISPLAY ENDP;* I8253 PROC NEAR MOV AL,00110100B MOV DX,20BH OUT DX,AL(设定 8
11、253 的计算器 0,写入时先低字节后高字节,方式 2,二进制计数) MOV AX,1000 MOV DX,208H OUT DX,ALMOV AL,AH OUT DX,AL(计数器 0 的初值设为 1000。 ) MOV AL,01110100B MOV DX,20BH OUT DX,AL(设定 8253 的计算器 1,入时先低字节后4 / 17 文档可自由编辑打印高字节,方式 2,二进制计数) MOV AX,1000 MOV DX,209H OUT DX,AL MOV AL,AH OUT DX,AL (计数器 1 初值设为 1000。 ) RETI8253 ENDP;*I8259 PROC
12、 NEAR IN AL,21H AND AL,11111011B OUT 21H,AL IN AL,0A1H AND AL,11111101B OUT 0A1H,AL RETI8259 ENDP;*RD0A PROC NEAR MOV AX,350AH INT 21H MOV WORD PTR OLD0A,BX MOV WORD PTR OLD0A+2,ES RETRD0A ENDPWR0A PROC NEAR PUSH DS MOV AX,CSEG MOV DS,AX MOV DX,OFFSET SERVICE MOV AX,250AH INT 21H POP DS RETWR0A ENDP
13、;*RESET PROC NEAR MOV DX,WORD PTR OLD0A MOV DS,WORD PTR OLD0A+2 MOV AX,250AH INT 21H (恢复原来的中断向量) IN AL,0A1H OR AL,00000010B OUT 0A1H,AL (屏蔽用户中断) RETRESET ENDP;*(函数 GET_TIME 的作用是接受用户输入的时间,并把它保存在 6 字节变量 TIME中。为了保证程序的严谨,如果输入的时间非法,则显示出错信息并要求重输。 )GET_TIME PROC NEAR LEA DX,INPUT_TIM MOV AH,9 INT 21H (提示输入
14、时间)HOUR: LEA DX,ASK_HRS MOV AH,9 INT 21H (提示输入小时) CALL INPUT_TIME (函数 INPUT_TIME 的功能是把用户输入的字符转化为时间值并存放在 BL 中如果输入的不是数字,那么让标志寄存器CF1) JC HOUR (输入不是数字,重输) CMP BL,23H JNA HRS2 (如果输入的数字比 24 小,那么跳到HRS2 去执行下面的内容;如果输入的数字大于等于 24,那么要求重输。对于分,秒的输入也按照此法处理。 ) LEA DX,BAD_HRS MOV AH,9 INT 21H JMP HOURHRS2: PUSH BXMI
15、N: LEA DX,ASK_MINS MOV AH,9 INT 21H CALL INPUT_TIME JC MIN CMP BL,59H5 / 17 文档可自由编辑打印 JNA MIN2 LEA DX,BAD_MINS MOV AH,9 INT 21H JMP MINMIN2: PUSH BXSEC: LEA DX,ASK_SECS MOV AH,9 INT 21H CALL INPUT_TIME JC SEC CMP BL,59H JNA SEC2 LEA DX,BAD_SECS MOV AH,9 INT 21H JMP SEC(以下程序段将输入的的时间保存在 TIME变量中)SEC2:
16、MOV SI,OFFSET TIME MOV SI+2,BL POP BX MOV SI+1,BL POP BX MOV SI,BL RETGET_TIME ENDP;*(函数 INPUT_TIME 的功能是把用户输入的字符转化为时间值并存放在 BL 中;如果输入的不是数字,那么让标志寄存器CF1)INPUT_TIME PROC NEAR LEA DX,USER MOV AH,0AH INT 21H LEA DX,CRLF MOV AH,9 INT 21H CMP USER+1,1 JAE CONVERT MOV BL,0 RETCONVERT: MOV CL,4 MOV AL,USER+2
17、CALL CHECK JC LEAVE AND AL,0FH MOV BL,AL CMP USER+1,2 JB CLR_CF SHL BL,CL MOV AL,USER+3 CALL CHECK JC LEAVE AND AL,0FH OR BL,ALCLR_CF: CLCLEAVE: RETINPUT_TIME ENDP;*CHECK PROC NEAR CMP AL,0 JB ERROR CMP AL,9 JA ERROR CLC RETERROR: LEA DX,BAD_DATA MOV AH,9 INT 21H STC RETCHECK ENDP;*(此函数将保存在 TIME 变量中
18、的时间增加一秒)CHANGE_TIME PROC NEAR PUSH AX PUSH CX PUSH DX PUSH SI MOV SI,OFFSET TIME MOV AL,SI MOV CH,AL MOV AL,SI+1 MOV CL,AL MOV AL,SI+26 / 17 文档可自由编辑打印 MOV DH,AL(CH:CL:DH时:分:秒) MOV AL,DH ADD AL,1 DAA MOV DH,AL CMP DH,60H JNE EXITCHG MOV DH,0 MOV AL,CL ADD AL,1 DAA MOV CL,AL CMP CL,60H JNE EXITCHG MOV
19、 CL,0 MOV AL,CH ADD AL,1 DAA MOV CH,AL CMP CH,24H JNE EXITCHG MOV CH,0EXITCHG: MOV SI,OFFSET TIME MOV SI,CH MOV SI+1,CL MOV SI+2,DH POP SI POP DX POP CX POP AX RETCHANGE_TIME ENDPCSEG ENDS END START 五五.实验总结实验总结:1.由于与本实验相关的程序上学期编过(在屏幕上显示时间) ,所以这次实验我的程序中的主要部分是用的以前的,添加了将时间显示在数码管上的程序。上学期编的那个程序中,我用三个字节来存
20、储时分秒,这次仍然沿用这个习惯。但这个习惯使我在编将时间显示在数码管上的子程序(DISPLAY)的时候遇到了困难,因为一个字节代表的是数码管上的两个位置,所以编查表程序时必须把那个字节的信息拆分为两个字节再进行查表,这使程序繁琐,可读性降低。如果用六个字节分别存储时的十位,时的个位,分的十位,分的个位,秒的十位,秒的个位,那么在编显示程序时确实方便了许多,但是在编改变时间的程序时却会更复杂一些。因此这两种方法各有利弊。2.在程序的结束 RESET 函数中一定要屏蔽用户中断,否则下一次调用程序时就不会响应中断,这个问题让我耗费了很多时间。实验二:小键盘按键识别一实验要求一实验要求:本次实验的要求
21、与前一实验类似,但仅要求识别小键盘 09 数字键,将小键盘键入的任意长的 09 数字串,采用左移位动态显示的方法显示在数码管电路上,当小键盘按下”R”时停止演示.二程序框图二程序框图: 预置:A 口为方式 0 输出 B 口为方式 0 输入0PA7-PA0PB2-PB0 AH7 / 17 文档可自由编辑打印 Y 无键闭合 N:AH 为闭合键“列值” Y三实验电路图:三实验电路图:AH=7?延时 20ms预置:B 口为方式 0 输出A 口为方式 0 输入列值 PB2-PB0PA7-PA0 AL根据 AX 内容,查找键值表,显示相应的键值。是 R?结束演示8 / 17 文档可自由编辑打印四四8255
22、 方式选择控制字方式选择控制字 1 D6 D5 D4 D3 D2 D1 D0五源程序:五源程序:TITLE LITTLEKEYBOARDSSEG SEGMENT PARA STACK STACK DB 256 DUP (0)SSEG ENDSDSEG SEGMENT A_8255 EQU 210H B_8255 EQU 211H CON_8255 EQU 213H BUFFER DB 6 DUP(0) HANG DB ? LIE DB ? NEWHANG DB ? NEWLIE DB ? TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,方式选择
23、控制字标志A 组方式:00方式 001方式 11X方式 2A 口 IO1输入0输出C 上半口 IO:1输入0输出B 组方式:0方式 01方式 1B 口IO:1输入0输出C 下半口 IO:1=输入0输出 9 / 17 文档可自由编辑打印DSEG ENDSCSEG SEGMENT ASSUME CS:CSEG, DS:DSEG,SS:SSEG START PROC NEAR MOV AX,DSEG MOV DS,AXCALL CLOSEALL(关掉数码管,防止因为最初数码管有显示而使程序执行不正常。)CMPAGAIN: CALL DISPLAY(DISPLAY 函数用来将 BUFFER 中的键值显
24、示在数码管上。)MOV DX,CON_8255MOV AL,10000010BOUT DX,AL (设定 A 口方式 0 输出,B 口方式 0 输入)AGAIN: CALL DISPLAY MOV DX,A_8255 MOV AL,0 OUT DX,AL (0PA7-PA0) MOV DX,B_8255 IN AL,DXAND AL,00000111B (取出 PB0PB2CMP AL,00000111B JE AGAIN MOV LIE,AL(将列值保存) CALL DELAY1(延时 20ms) MOV DX,CON_8255MOV AL,10010000BOUT DX,AL(预置 A 口
25、方式 0 输入,B 口方式 0 输入) MOV DX,A_8255 IN AL,DX MOV HANG,AL(将行值保存)CALL GETINPUT(GETINPUT 函数通过行值和列值查出输入的键值,并将它保存在 AL 中,如果输入是 R,则 AL 赋值为 FFH;如果输入非法字符,则 AL 赋值为 0AH。 ) CMP AL,0AHJE CMPAGAIN(如果是非法字符则跳回) CMP AL,0FFHJNE CONTINUE(如果是 R 则退出程序.) CALL CLOSEALL MOV AH,4CH INT 21HCONTINUE:CALL CHANGE(CHANGE 函数用来改变 BU
26、FFER 中保存的键值) MOV DX,CON_8255MOV AL,10000010BOUT DX,AL (设定 A 口方式 0 输出,B 口方式 0 输入)LLL:CALL DISPLAYMOV DX,B_8255IN AL,DXAND AL,00000111B (取出 PB0PB2)CMP AL,00000111BJNE LLLJMP CMPAGAIN(不断扫描,如果不松开按键,那么就循环等待;直到按键松开就跳回。) RETSTART ENDP;*(此函数用以延时 20MS)DELAY1 PROC NEAR PUSH AX PUSH CX PUSH DX MOV AH,86H MOV C
27、X,0 MOV DX,20000 INT 15H POP DX POP CX POP AX RET10 / 17 文档可自由编辑打印DELAY1 ENDP;*(GETINPUT 函数通过行值和列值查出输入的键值,并将它保存在 AL 中,如果输入是 R,则 AL 赋值为 FFH;如果输入非法字符,则 AL 赋值为 0AH。 )GETINPUT PROC NEAR CMP LIE,00000110B JE LIE0 CMP LIE,00000101B JE LIE1 CMP LIE,00000011B JE LIE2 MOV AL,0AH RETLIE2:CMP HANG,00010000B JE
28、 NEXT MOV AL,0AH RETNEXT:MOV AL,0FFH RETLIE0:CMP HANG,B JE KEY8 CMP HANG,B JE KEY9 MOV AL,0AH RETKEY8:MOV AL,8 RETKEY9:MOV AL,9 RETLIE1:CMP HANG,B JE KEY0 CMP HANG,B JE KEY1 CMP HANG,B JE KEY2 CMP HANG,B JE KEY3 CMP HANG,B JE KEY4 CMP HANG,B JE KEY5 CMP HANG,B JE KEY6 CMP HANG,B JE KEY7 MOV AL,0AH R
29、ETKEY0:MOV AL,0 RETKEY1:MOV AL,1 RETKEY2:MOV AL,2 RETKEY3:MOV AL,3 RETKEY4:MOV AL,4 RETKEY5:MOV AL,5 RETKEY6:MOV AL,6 RETKEY7:MOV AL,7 RETGETINPUT ENDP;*(CHANGE 函数用来改变 BUFFER 中保存的键值,将 BUFFER 中的键值移位,最后一位加入 AL 中的新键值。)CHANGE PROC NEAR PUSH AX PUSH SI MOV SI,OFFSET BUFFER MOV AH,SI+1 MOV SI,AH MOV AH,SI
30、+2 MOV SI+1,AH MOV AH,SI+3 MOV SI+2,AH MOV AH,SI+4 MOV SI+3,AH MOV AH,SI+5 MOV SI+4,AH MOV SI+5,AL POP SI POP AX RET11 / 17 文档可自由编辑打印CHANGE ENDP;*(DISPLAY 函数用来将 BUFFER 中的键值显示在数码管上。)DISPLAY PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI MOV BX,OFFSET TABLE MOV SI,OFFSET BUFFER MOV CL,1XUNHUAN: MOV
31、 AL,SI XLAT MOV DX,201H OUT DX,AL MOV DX,200H MOV AL,CL OUT DX,AL MOV DX,200H MOV AL,0 OUT DX,AL INC SI SHL CL,1 CMP CL,40H JNE XUNHUAN POP SI POP DX POP CX POP BX POP AX RETDISPLAY ENDP;*(此函数用在退出程序时将数码管关闭.)CLOSEALL PROC NEAR PUSH AX PUSH CX PUSH DX MOV CL,1XUNHUAN1: MOV DX,200H MOV AL,CL OUT DX,AL
32、MOV AL,0 OUT DX,AL SHL CL,1 CMP CL,20H JNE XUNHUAN1 POP DX POP CX POP AX RETCLOSEALL ENDPCSEG ENDS END START六实验总结:六实验总结: 1实验电路板上 8255 的端口地址位 210H213H,这与书上给的不一样,开始时在这方面花费了较多时间。2通过此次程序设计,我对计算机读取键盘值的过程有了一定的认识。最开始编程序时并没有想到如果始终按同一个键不放,数码管上就会一下子出来很多字符。调试时发现了这个问题,想到的解决方法有两种,一种是每一次按键后检测键是否松开,直到松开后再继续执行下一次判断
33、;另一种是按键后延缓一个固定的时间(大约 0.2 秒)再判断(计算机的键盘就是采取这样的方法) 。 本程序采用的是第一种方法。3编程序要养成好的习惯,我最初的程序结束时并没有关掉数码管,以致下次用时数码管显示不正确。好的程序应该各方面想得周到一些,例如我后来在开始和结束时都加了关闭数码管程序(CLOSEALL) ,这就避免了上述问题。4我并没有采用查表得方法来获得键值,我觉得用跳转的方法能使程序的可读性强一些。当然,程序代码会长许多,但此法由于思路清楚,比较容易查错。【实验三】数/模、模/数转换实验12 / 17 文档可自由编辑打印一、实验目的、实验目的:了解数/模、模/数转换的基本原理,掌握
34、 ADC0809 和 DAC0832 芯片的使用方法。二、实验任务:二、实验任务:在实验箱上设计并连接 ADC0809 芯片的接线,按中断方式(利用 EOC 发中断申请)对单通道模拟量进行 A/D 转换。A/D 转换结果送入 PC 机后,再由 PC 机送至 DAC0832 进行 D/A 转换,结果送至双踪示波器,与原信号进行对比观察。模拟信号源:由电位器中心抽头可以得到一个可调节的直流电压。电位器一端接地,另一端接+5V。三、实验电路:三、实验电路:四:源程序四:源程序TITLE ADDASSEG SEGMENT STACK STACK DB 256 DUP(?)SSEG ENDSDSEG S
35、EGMENT OLD0A DD ?DSEG ENDSCSEG SEGMENT ASSUME CS:CSEG,DS:DSEG,SS:SSEGSTART PROC NEARMOV AX,DSE MOV DS,AX CLI CALL I8259(初始化 8259) CALL RD0A(保存原 0A 中断向量) CALL WR0A(写入新的中断向量。 ) STI MOV DX,230H MOV AL,0OUT DX,AL (230H 为模拟量输入口,进行一次虚拟写操作,启动 A/D 转换.)WAIT_IN: MOV AH,1 INT 16H JZ WAIT_IN CALL RESET MOV AH,4
36、CH INT 21H RET13 / 17 文档可自由编辑打印START ENDP;*SERVICE PROC NEAR PUSH AX PUSH DS MOV AX,DSEG MOV DS,AX CLI IN AL,230H(读入 A/D 转换后的值到 AL 中。)MOV DX,228H OUT DX,AL(启动 D/A 转换) MOV DX,229H OUT DX,AL(将 AL 的值写入D/A 转换器) MOV DX,230H MOV AL,0 OUT DX,AL(再次启动 A/D 转换器,为下一次转换做准备。)STI POP DS POP AX IRETSERVICE ENDP;*I8
37、259 PROC NEAR IN AL,21H AND AL,11111011B OUT 21H,AL IN AL,0A1H AND AL,11111101B OUT 0A1H,AL RETI8259 ENDP;*RD0A PROC NEAR MOV AX,350AH INT 21H MOV WORD PTR OLD0A,BX MOV WORD PTR OLD0A+2,ES RETRD0A ENDP;*WR0A PROC NEAR PUSH AX PUSH DS MOV AX,CSEG MOV DS,AX MOV DX,OFFSET SERVICE MOV AX,250AH INT 21H P
38、OP DS POP AX RETWR0A ENDP;*RESET PROC NEAR MOV DX,WORD PTR OLD0A MOV DS,WORD PTR OLD0A+2 MOV AX,250AH INT 21H IN AL,0A1H OR AL,00000010B OUT 0A1H,AL RETRESET ENDPCSEG ENDS END START五实验总结:五实验总结:1 编写程序时要注意每次中断服务程序执行完成后都要给 AD 端口(230H)执行一次虚拟写操作,从而启动 AD 转换器进行下一个数据的转换。我开始时忽略了这个问题,结果使 DA 输出恒定不遍,无法跟踪输入的变化。2
39、 连线时一定要搞清原理,本实验是 AD 转换完成后用 EOC 端子传输中断请求的方式编程,所以要注意 I/O 口地址译码器的输出端 228H22FH 接 DAC 的片选信号,230H237H 接 ADC 的片选信号,EOC 接总线的 B4 段,另外,要接500的时钟信号,利用 8MHZ 的信号源经 16 分频从 Q3 接出。14 / 17 文档可自由编辑打印实验四 DMA 传送实验一实验目的:一实验目的:掌握 DMA 方式的工作原理和 8237 的编程使用方法。二实验要求:二实验要求:1. 按照实验指导第 61 页的实验接线图连接硬件线路2. 对照【例 3.6.1】的程序清单键入源程序,经汇编
40、和连接后运行程序三实验电路三实验电路三电路分析三电路分析1DMA 读入数据按下 DMA 按键,通过端子向 DMA 通道 1 发硬件 DMA 请求,系统 DMA 控制器向 CPU发总线请求信号,CPU 在执行完当前总线周期后向系统 DMA 控制器发总线响应信号,随即把总线控制权交给 DMA 控制器,此时 DACK1 有效。然后 DMA 控制器将通道 1 的页面地址寄存器及当前地址寄存器中的内容放到地址总线上去,并发出存储器读命令,读出内存单元中的内容送往数据总线。由于 DACK1 有效,通过 J4 短路线选中6116 和双向总线驱动器 74LS245,IOW 有效,通过 J3 短路线,使 611
41、6 的 WE 有效,从而把数据总线上的数据通过 74LS245 写入到 6116 的 0 号单元,完成一次 DMA 读传送。此时通道 1 当前地址寄存器自动加 1,当前字节寄存器自动减 1。另外通过U38 和 JS 引线向分频器输入一个进位脉冲,使分频器计数一次,Q10Q0 输出选择6116 的下一个单元。再反复上述读过程直到当前字节寄存器为 FFFFH 为止,读过程结束。 2将 DMA 数据写到存储器上按下 DMA 按键,通过端子向 DMA 通道 1 发硬件 DMA 请求,系统 DMA 控制器向 CPU发总线请求信号,CPU 在执行完当前总线周期后向系统 DMA 控制器发总线响应信号,随即把
42、总线控制权交给 DMA 控制器,此时 DACK1 有效。然后 DMA 控制器将通道 1 的15 / 17 文档可自由编辑打印页面地址寄存器及当前地址寄存器中的内容放到地址总线上去,并发出存储器读命令,读出内存单元中的内容送往数据总线。由于 DACK1 有效,通过 J4 短路线选中6116 和双向总线驱动器 74LS245,IOR 有效,通过 J2 短路线,使 6116 的 RD 有效,从而读出 6116 当前单元的内容,通过 74LS245 写入到系统数据总线,完成一次DMA 写传送。此时通道 1 当前地址寄存器自动加 1,当前字节寄存器自动减 1。另外通过 U38 和 JS 引线向分频器输入
43、一个进位脉冲,使分频器计数一次,Q10Q0输出选择 6116 的下一个单元。再反复上述读过程直到当前字节寄存器为 FFFFH 为止,写过程结束。4 LS393 在本实验中的作用作为一个分频器,在本实验中起到了选定存储器 6116地址的作用。这是通过输入译码后的进位时钟实现的。四实验程序:四实验程序:DISP MACRO VAR MOV AH,09H MOV DX,OFFSET VAR INT 21HENDM (此宏的功能是将以形参VAR为地址的一个字符串打印在屏幕上)SCANKEY MACRO LOCAL LLLLLL: MOV AH,01H INT 16H JZ LLL(等待直到有键按下)
44、MOV AH,0 INT 16H (将键值保存到AL中)ENDMDATA SEGMENTTEXT DB THE QUICK BROWN FOX JUMPS OVER LAZY DOG DB 0DH,0AH DB THE QUICK BROWN FOX JUMPS OVER LAZY DOG DB 0DH,0AH DB THE QUICK BROWN FOX JUMPS OVER LAZY DOG DB 0DH,0AH,$COUNT EQU $-TEXTBUF DB COUNT DUP(?)MESG DB TO MAKE A DMA REQUEST! DB THEN STRIKE ANY KEY!,0DH,0AH,$DATA ENDSSTACK SEGMENT STACK STACK DB 256 DUP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年甘肃兰州新区金融投资控股集团有限公司招聘考试真题
- 二零二五年度房地产公司成立及融资合作协议
- 2025年度安防设备质量检测与售后服务合同
- 2025年温泉身体矿物霜行业深度研究分析报告
- 住房借住合同范例
- 企业供汽合同范本
- 2025年擦手巾项目投资可行性研究分析报告
- 游泳池装修安全协议书
- 2025年度安全设施设计施工服务合同
- 2025年度门面转让及配套设施建设合同
- 2024-2025年第二学期学校教导处工作计划(二)
- 2025年苏州卫生职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 二零二五年度博物馆场地租赁与文物保护合作协议3篇
- 2025年春新人教版历史七年级下册全册课件
- 2024年钟山职业技术学院高职单招语文历年参考题库含答案解析
- 《汽车空调工作原理》课件
- 骆驼祥子-(一)-剧本
- 2024年郑州黄河护理职业学院单招职业技能测试题库及解析答案
- 魏晋南北朝时期中外文化的交流
- 渔业行业智能化海洋牧场养殖方案
- 教科版五年级下册科学同步练习全册
评论
0/150
提交评论