北邮微机原理与接口技术硬件实验报告.pdf

上传人:tbuqq 文档编号:5109597 上传时间:2020-02-03 格式:PDF 页数:30 大小:338.46KB
返回 下载 相关 举报
北邮微机原理与接口技术硬件实验报告.pdf_第1页
第1页 / 共30页
北邮微机原理与接口技术硬件实验报告.pdf_第2页
第2页 / 共30页
北邮微机原理与接口技术硬件实验报告.pdf_第3页
第3页 / 共30页
北邮微机原理与接口技术硬件实验报告.pdf_第4页
第4页 / 共30页
北邮微机原理与接口技术硬件实验报告.pdf_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《北邮微机原理与接口技术硬件实验报告.pdf》由会员分享,可在线阅读,更多相关《北邮微机原理与接口技术硬件实验报告.pdf(30页珍藏版)》请在三一文库上搜索。

1、1 微原硬件实验报告 班级: 07118 班 学号: 070547 班内序号: 26 姓名:杨帆 2 实验一熟悉实验环境及IO 的使用 一, 实验目的 1. 通过实验了解和熟悉实验台的结构,功能及使用方法。 2. 通过实验掌握直接使用Debug 的 I、O 命令来读写IO 端口。 3. 学会 Debug 的使用及编写汇编程序 二,实验内容 1. 学习使用Debug 命令,并用 I、O 命令直接对端口进行读写操作, 2.用汇编语言编写跑马灯程序。(使用 EDIT 编辑工具 )实现功能 A.通过读入端口状态 (ON 为低电平 ),选择工作模式 (灯的闪烁方式、速度 等)。 B.通过输出端口控制灯的

2、工作状态(低电平灯亮 ) 三,实验步骤 1.实验板的IO 端口地址为EEE0H 在 Debug 下, I 是读命令。 (即读输入端口的状态 -拨码开关的状态 ) O 是写命令。 (即向端口输出数据 -通过发光管来查看 ) 进入 Debug 后, 读端口 拨动实验台上八位拨码开关 输入 I 端口地址回车 屏幕显示xx 表示从端口读出的内容 ,即八位开关的状态ON 是 0,OFF 是 1 写端口 输入O 端口地址xx (xx 表示要向端口输出的内容)回车 查看实验台上的发光二极管状态,0 是灯亮 ,1 是灯灭。 2. 在 Debug 环境下 ,用 a 命令录入程序 ,用 g 命令运行 CDebug

3、 -a mov dx, 端口地址 mov al,输出内容 out dx, al 3 mov ah, 0bh int 21h or al, al jz 0100 int 20h -g 运行查看结果,修改输出内容 再运行查看结果 分析 mov ah, 0bh int 21h or al, al jz 0100 int 20h 该段程序的作用 3.利用 EDIT 工具编写汇编写跑马灯程序程序 实现功能 A.通过读入端口状态 (ON 为低电平 ),选择工作模式 (灯的闪烁方式、 速度等 )。 B.通过输出端口控制灯的工作状态(低电平灯亮 ) CEDIT 文件名 .asm 录入程序 按 Alt 键 打开

4、菜单进行存盘或退出 编译文件 CMASM 文件名 .asm 连接文件 CLINK 文件名 .obj 运行文件 或用 Debug 进行调试。 四,程序流程图 4 Begin 点亮第 8盏灯 调用延时子程序 检测拨码开关状态 最低位拨码开关被打开? 向右依次点亮 LED向左依次点亮 LED 检测键盘缓冲区 有按键行为? 结束,返回 DOS NOYES NO YES 图表1:实验 1 的程序流程图 五,源程序代码 DATA SEGMENT ; 数据段 BB DB 0FFH ; DATA ENDS STACK SEGMENT PARA STACK STACK ; 堆栈段 DB 100 DUP(?) S

5、TACK ENDS CODE SEGMENT ; 代码段 ASSUME CS:CODE, SS:STACK ,DS:DATA BEGIN:MOV AX,DATA MOV DS,AX 5 MOV AX,STACK MOV SS,AX MOV BL,7FH BEG:MOV DX,0EEE0H MOV AL,BL OUT DX,AL ;点亮第 8 盏灯 CALL COUNT ;延时 MOV BL,AL IN AL,DX TEST AL,01H ;最低位拨码被按下?方向选择 MOV AL,BL JZ RL RR: ROR AL,1 ; 未按键,则向右点亮 JMP R1 RL:ROL AL,1 ; 按下

6、则向左点亮 R1:MOV BL,AL MOV AH,0BH INT 21H ; 检查键盘缓冲区 OR AL,AL JZ BEGIN MOV AX,4C00H INT 21H COUNT PROC NEAR ; 延时子程序 PUSH AX MOV DX,0EEE0H IN AL,DX ; 检测拨码状态 MOV AH,0 MOV BX,0 ADD BX,AX POP AX COU1: MOV CX,0FFFFH 6 COU2: LOOP COU2 COU3: DEC BX ; 调速 JNZ COU1 RET COUNT ENDP CODE ENDS END BEGIN 六,思考题 通过实验说明用d

7、ebug 中的 a 命令录入实验中给出的小程序中,有些语句可以 不写出“ h”字符的原因。 通过观察可以发现,编码时,凡是十六进制数据都是要加H 的, 而地址则不用。这是因为编译时所能识别的数据有多种,为了保证编 译正常进行,必须要告诉编译器数据的类型。而地址只有默认的16 进制形式,所以不需指定类型就能完成正确的编译,所以无须加 H。而在 DEBUG 环境下,它的默认数据格式就是十六进制的,所以 就不需要写出“ H”字符;否则通不过编译。 七,实验收获和体会 在这次实验中,我们初步熟悉了在Debug环境下使用 I/O 命令, 实现了对拨码开关状态的读取以及对发光二极管亮灭的控制,即初步 尝试

8、了对于微机接口的控制。 通过控制发光二极管的亮与灭,结合相 关程序的设计, 我们实现了一个简单的跑马灯程序。结合查询拨码开 关的状态,能够实现点亮发光二极管的方向、模式和速度的调整。这 个跑马灯实验的程序使用的是简单的分支结构。 这次实验的要点是对I/O 接口译码电路的理解以及使用,通过在 Debug环境下的 I/O 命令,我们测试了外设功能, 这使我们了解了地 址与端口的对应情况,从而明确了跑马灯程序编写的流程和注意事 项。通过该译码电路实验, 我掌握了地址译码电路的设计方法和实现 原理,对硬件的 I/O 接口技术有了进一步的认识。 这次实验也为以后 的实验打下了基础,特别是, 应先理解了译

9、码电路的工作原理,然后 才能进行编程。 7 实验二8255A 并行接口应用 一, 实验目的 1.掌握 8255A 的功能及方式0、1 的实现 2.熟悉 8255A 与 CPU 的接口 ,以及传输数据的工作原理及编程方法。 3.了解七段数码管显示数字的原理。 4.掌握同时显示多位数字的技术。 二,实验内容 在实验一的基础上学习PIO 芯片(8255)编程应用 ,熟悉平台的主要内容。 CS 用 Y0 (EE00H) (一) 简要说明 : 在方式 0(输入/输出)下,以 A 口为输出口 ,B 口为输出口 , A 口接六个共阴 极数码 管的八位段码 ,高电平点亮数码管的某一段, B 口接数码管的位选

10、(即 要使哪个数码管亮 ), 高电平选中某一位数码管点亮。 8255A 中 A 端口地址 EE00H B 端口地址 EE01H C 端口地址 EE02H 控制地址EE03H 八段数码管的显示规律及数码管的位选规律自己查找, 可用实验一中 ,学过的 I、O 命令来做。 (二)6 位数码管静态显示在数码管电路上静态地显示6 位学号 ,当主机键 盘按下任意键时 ,停止显示 ,返回 DOS。提示:该电路 6 个数码管的同名阳极 段已经复接 ,当段选寄存器寄存了一个字型编码 之后,6 个数码管都有可能显示出相同的数字。如果要使6 个数码管“同时” 显示不同的数字,必须采用扫描显示的方法 ,通过选位寄存器

11、选择某一位数 码管,显示其数字 (对应段值 为 1),然后关闭此数码管 ,再选择下一位数码管 进行显示 ;如果在一秒钟内 ,每一位数码管都能显示30 次以上 ,则人眼看到 的是几位数码管同时在显示。 实验证明 ,在扫描显示过程中 ,每一位显示延迟1ms 是最佳选择。 8 (三)6 位数码管动态显示 要求在数码管电路1-6 位数码管上按图3.2 所示的规律 ,动态显示字符串 HELLO,当 主机键盘按下任意键时结束。 二, 程序流程图 程序一:静态显示学号 8255初始化 第1位输出 BX 延时 第2位输出 BX+1 延时 第3位输出 BX+2 延时 第4位输出 BX+3 延时 第5位输出 BX

12、+4 延时 第6位输出 BX+5 延时 键盘输入? 退出 当前输出字符地 址赋给 BX YES NO 图表2:静态显示学号的程序流程图 9 四,源程序代码 程序一:显示静态学号 DATA SEGMENT ; 数据段 SHOW DB 0EDH,61H,0EDH,0d9H,39H,61H ;” 0” ,” 7” ,” 0” ,” 5” ,” 4” ,” 7” COUNT EQU $-SHOW CAT DB 01H ;8 段数码管选通信号 DATA ENDS STACK SEGMENT STACKSTACK DB 100H DUP(?) STACK ENDS ;代码段 CODE SEGMENT AS

13、SUME CS:CODE, DS:DATA, SS:STACK START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX NEXT: MOV CX,COUNT LEA BX,SHOW MOV CAT,01H ; 最先点亮第 1 个数字 AGAIN:MOV AL,80H ;8255的方式选择 MOV DX,0EE03H ;A 口方式 0 输出 OUT DX,AL ;B 口方式 0 输出 MOV AL,CAT MOV DX,0EE01H ;B 口为数码管选通端口 OUT DX,AL MOV AL,BX MOV DX,0EE00H

14、;A 口为 8 段数码管 OUT DX,AL ; 依次显示学号数字 10 MOV AL,00H MOV DX,0EE00H OUT DX,AL ; 熄灭 INC BX SHL CAT,1 ; 左移点亮数字位置 LOOP AGAIN MOV AH,0BH ; 检测键盘缓冲区 INT 21H OR AL,AL JZ NEXT RET START ENDP CODE ENDS END START 程序二:动态显示HELLO DATA SEGMENT ; 数据段 COUNTDOWN DW ? ; 时延计数器 SPDCOUNT DW 00H ; 控速计数器 LEDCOUNT DB 00H ;LED CO

15、UNT CATCOUNT DB 00H ;CAT COUNT TMP DB 00H LED DB ? CAT DB 01H ; 数码管选通信号 SPEED DW 0000H DATA ENDS STACK SEGMENT STACK STACK DB 100 DUP(?) STACK ENDS CODE SEGMENT ; 代码段 ASSUME CS:CODE, DS:DATA, SS:STACK ;延时子程序 11 DELAY1 PROC MOV COUNTDOWN,03FFH LOOPD: DEC COUNTDOWN JNZ LOOPD RET DELAY1 ENDP ;给变量 LED 赋

16、值的子程序 ENCODE PROC ;根据 LEDCOUNT 的当前值,给变量LED 赋值 ;使其显示相应的字符 CMP LEDCOUNT,00H JA EN1 MOV LED,00H ;BLANK “_“ JMP NEXT EN1: CMP LEDCOUNT,01H JA EN2 MOV LED,00H ;BLANK “_“ JMP NEXT EN2:CMP LEDCOUNT,02H JA EN3 MOV LED,00H ;BLANK “_“ JMP NEXT EN3:CMP LEDCOUNT,03H JA EN4 MOV LED,00H ;BLANK “_“ JMP NEXT EN4:CM

17、P LEDCOUNT,04H JA EN5 MOV LED,00H ;BLANK “_“ JMP NEXT EN5: CMP LEDCOUNT,05H JA EN6 12 MOV LED,00H ;BLANK “_“ JMP NEXT EN6: CMP LEDCOUNT,06H JA EN7 MOV LED,3DH ; ” H” JMP NEXT EN7: CMP LEDCOUNT,07H JA EN8 MOV LED,0DCH ; ” E” JMP NEXT EN8: CMP LEDCOUNT,08H JA EN9 MOV LED,8CH ; ” L” JMP NEXT EN9:CMP LE

18、DCOUNT,09H JA ENA MOV LED,8CH ; ” L” JMP NEXT ENA:CMP LEDCOUNT,0AH JA ENB MOV LED,0EDH ; ” O” JMP NEXTB ENB:MOV LED,00H ;BLANK “_“ NEXTB: RET ;这里请注意:若要改变LED 点亮的模式,改变 ENCODE 子程序中 ;变量 LED 的赋值模式即可 ENCODE ENDP ;循环点亮控制子程序 ;CAT 是 8 段数码管的选通信号,这个子程序将 ;根据当前 CATCOUNT 的值给 CAT 赋值 CATENCO PROC 13 CMP CATCOUNT,00

19、H JA EB1 MOV CAT, 01H JMP NEXT EB1: CMP CATCOUNT,01H JA EB2 MOV CAT, 02H JMP NEXT EB2: CMP CATCOUNT,02H JA EB3 MOV CAT, 04H JMP NEXT EB3: CMP CATCOUNT,03H JA EB4 MOV CAT, 08H JMP NEXT EB4:CMP CATCOUNT,04H JA EB5 MOV CAT, 10H JMP NEXT EB5: MOV CAT, 20H NEXT: RET CATENCO ENDP ;主程序 START:MOV AX, DATA M

20、OV DS, AX MOV ES, AX MOV AL, 80H ;8255初始化 MOV DX, 0EE03H OUT DX, AL ;A 口方式 0 输出, B 口方式 0 输出, C 口无关 14 S1S:MOV DX,0EEE0H ; 检测拨码开关状态 IN AL, DX ; 若拨码开关最低位置位 MOV SPEED,0FFFH ; 则选择快速模式 AND AL, 01H ; 未被置位则选择慢速模式 JZ FL3 MOV SPEED 07FFH ;快速模式 FL3:INC CATCOUNT CMP CATCOUNT,06H ; 一轮是否显示完毕? JB FL1 MOV CATCOUNT

21、,00H ;CATCOUNT值回零 INC SPDCOUNT MOV DX,SPEED CMP SPDCOUNT,DX ;根据速度选择, JB FL1 ;控制改变 CAT 的频率 MOV SPDCOUNT,00H INC TMP CMP TMP,06H JB FL1 MOV TMP,00H FL1: MOV DL,CATCOUNT ADD DL,TMP MOV LEDCOUNT,DL CMP LEDCOUNT,0CH JB FL2 SUB LEDCOUNT,0CH FL2: CALL CATENCO ;依次点亮数码管 MOV DX, 0EE01H MOV AL, CAT OUT DX, AL

22、CALL ENCODE ;选择此数码管显示的字符 MOV DX, 0EE00H 15 MOV AL, LED OUT DX, AL CALL DELAY1 ;调用延时子程序 MOV AH, 0BH ;检测键盘缓冲区 INT 21H OR AL, AL JZ S1S MOV AX, 4C00H INT 21H CODE ENDS END START 五,实验心得与体会 这次实验中,我们使用8255A并行接口芯片和数码管实现了一个 数码管的静态和动态显示字符的程序。在实验过程中我遇到了很多困 难,现在想来也许是 4 个微机接口原理硬件按实验中最难的一个。这 也许是由于课本的教学进度滞后于实验进度,

23、我们不太清楚 8255A的 工作原理和编程要点。首先,我们对于数码管的8 段 LED 灯对应的 端口地址并不清楚,所以要在Debug环境下使用 I/O 指令对其进行 测试,确定下来这8 段 LED 灯的地址,之后才可以根据所要输出的 字符给出正确的编码。 第二个比较重要, 而且也比较困扰我的问题是 延时和数码管选通控制。由于数码管是共阴极/ 共阳极的,如果不对 选通信号进行控制, 则它们在同一时间只能显示同一字符。为了实现 同时显示不同字符, 就要通过扫描(依次点亮数码管) 的方式来实现, 这就要给 CAT 信号依次赋值,并且在扫描的过程中要用到延时。 动态显示的程序设计思想与静态时的大体相同

24、,只是对动态的每 一种状态进行一段时间的静态显示然后换状态而已,所以通过一个二 层循环就能很好地解决这个问题。通过这次实验, 我在编程过程中学 到了很多东西, 不但巩固了书本的知识, 而且体会到了编程的过程中 思维必须很缜密,否则写出来的程序常会导致无法运行甚至死机。 16 实验三8253 计数器 /定时器的应用 一,实验目的 学习掌握 8253 用作定时器的编程原理 二,实验内容 1 完成一个音乐发生器,通过蜂鸣器放出音乐,并在数码管上显示乐谱。 三,电路测试与连接 测试:在 Debug 状态下,用“ O”命令测试 8353 的发生功能, 3 组通道工作 是否正常。 电路连接:8253 的

25、CS 接译码器输出 Y1 其地址为 EE20-EE27H 8253 的 OUT 接蜂鸣器的 BELL 端 8253 的门控信号 GATE 接+5V 8253 的 CLK 端接 Q7(32KHz) 清零复位电路中的T/C 端接地(或接 RESET端) 注意:由于 8253 计数速率应小于 2MHz,CLK0 的输入信号必须由8MHz 经 393 分频到小于 2MHz 后使用。393 分频之后,Q0 输出为 4MHz ,Q1 输出为 2MHz,Q7 输出 32KHz。 编程提示: 18253 控制端口地址为 EE23H 定时器 0 地址为 EE20H 定时器 1 地址为 EE21H 定时器 2 地

26、址为 EE22H 2.定时器可工作在方式3 下。 四,程序流程图 17 START 8253初始化 8255A初始化 设置数码管选通信号 按照乐谱,调用音阶 发声子程序 数码管显示目前音阶 调用延时子程序 有键盘动作? 返回 DOS YES NO 图表3:音乐发声器程序流程图 五,源程序代码 DATA SEGMENT ; 数据段 NUM dw 02fffh ; 延时大小 DATA ENDS STACK SEGMENT STACKSTACK DB 100H DUP(?) 18 STACK ENDS CODE SEGMENT ; 代码段 ASSUME CS:CODE, DS:DATA, SS:ST

27、ACK ; 延时子程序 DELAY PROC FAR PUSHF PUSH CX MOV CX,NUM LOOP1: PUSH CX MOV CX,NUM LOOP2: LOOP LOOP2 POP CX LOOP LOOP1 POP CX POPF RETF DELAY ENDP ; 音阶do 的发声及显示子程序 singdo proc far do:mov dx,0ee20h ;timer0 set mov al,7Dh ;do out dx,al MOV DX,0EE00H ;led show MOV AL,21H ;“1“ OUT DX,AL CALL DELAY retf singd

28、o endp ; 音阶re的发声及显示子程序 singre proc far re: mov dx,0ee20h ;timer0 set 19 mov al,6FH ;re out dx,al MOV DX,0EE00H ;led show MOV AL,0F4H ;“2“ OUT DX,AL CALL DELAY retf singre endp ; 音阶mi 的发声及显示子程序 singmi proc far mi:mov dx,0ee20h ;timer0 set mov al,64H ;mi out dx,al MOV DX,0EE00H ;led show MOV AL,0F1H ;

29、“3“ OUT DX,AL CALL DELAY retf singmi endp ; 音阶fa的发声及显示子程序 singfa proc far fa:mov dx,0ee20h ;timer0 set mov al,5EH ;fa out dx,al MOV DX,0EE00H ;led show MOV AL,39H ;“4“ OUT DX,AL CALL DELAY retf singfa endp ; 音阶so的发声及显示子程序 singso proc far 20 so:mov dx,0ee20h ;timer0 set mov al,53h ;so out dx,al MOV D

30、X,0EE00H ;led show MOV AL,0D9H ;“5“ CALL DELAY retf singso endp ; 音阶la的发声及显示子程序 singla proc far la:mov dx,0ee20h ;timer0 set mov al,4BH ;la out dx,al MOV DX,0EE00H ;led show MOV AL,0DDH ;“6“ OUT DX,AL CALL DELAY retf singla endp ; 音阶ti 的发声及显示子程序 singti proc far mov dx,0ee20h ;timer0 set mov al,43H ;

31、ti out dx,al MOV DX,0EE00H ;led show MOV AL,61H ;“7“ OUT DX,AL CALL DELAY retf singti endp ; 音阶高音 do的发声及显示子程序 singdo2 proc far 21 mov dx,0ee20h ;timer0 set mov al,3fH ;high do out dx,al MOV DX,0EE00H ;led show MOV AL,23H ;“1.“ OUT DX,AL CALL DELAY retf singdo2 endp ; 主程序 START PROC FAR MOV AX,DATA M

32、OV DS,AX ;8253 初始化 ini:mov dx,0ee23h ;timer0 initiate mov al,00010110B ;分频比小于 255,mode3,二进制 out dx,al ;8255 初始化 MOV DX,0EE03H ;A 、B口均为方式 0输出 MOV AL,80H OUT DX,AL ;数码管显示的准备工作 MOV DX,0EE01H ; 设置数码管选通信号 MOV AL,01H OUT DX,AL MOV DX,0EE00H ; 显示清零 MOV AL,00H OUT DX,AL ;按照乐谱依次调用音阶发声函数,奏乐 call singmi call s

33、ingmi 22 call singfa call singso call singso call singfa call singmi call singre call singdo call singdo call singre call singmi call singmi call singre call singre mov ah,0bh ;检测键盘缓冲区 int 21h OR AL,AL JNZ goon jmp ini goon:mov ax,4c00h ;返回DOS int 21h ret START ENDP CODE ENDS END START 六,思考题 写出 8253

34、 计数初值、输入频率和输出频率的关系。 答:输出频率= 输入频率/ 8253 计数初值 七,实验心得与体会 通过这次实验,我们学习了8253计数器的使用方法。我们最先了 解到的是 8253的初始化,包括对于计数器的选择,计数初值的输入 23 方式,计数初值的格式,基础器工作方式等等一些内容的设臵。之后 通过加深对各种工作方式的理解,确定下来可以使用方式2 或方式 3 来进行计数器的输出。因为在这两个方式下8253可以充当分频器。 而在本实验中我选用了方式3,原因是方式 2 并非输出方波波形。根 据讲义上给出的各个音符的频率,以及8253计数器的输入频率,并 通过公式:(输出频率= 输入频率/

35、8253 计数初值),我计算得 到各个音阶对应的计数初值。 有了以上的准备, 就可以进行实际的编 程了。对于乐曲的播放, 选用的是逐个发出相应乐音并显示相应乐符 的方法。 总体来说,本实验的程序比较简单,只要按要求写入几个计数器 的控制字和初值即可, 只是在写入的时候要注意控制字写入同一个端 口(其实 8253内部会加以区分并存入不同的寄存器),但各个计数 器有自己的端口,在写入计数初值时不要写错端口。而8253的时钟 信号是由 500KHZ 信号由 8MHZ 时钟经 74LS393分频获得。 通过本实验,我了解了8253的各种工作方式的特点,由8253的 编程可以延伸出很多应用(函数发生器,

36、计数器等等)。 24 实验四串行 8215A 实验 一, 实验目的 1.了解串行通信的一般原理和8251A 的工作原理 2.初步了解RS232 串行口标准及与TTL 电路的连接方法 ; 3.学会扩充8251A 的方法 ,并设计实现用8251A 进行数据传输 ; 4.掌握 8251A 的编程方法。 二,实验内容 (一)自收自发 :采用查询方式 :将内存制定区域内存放的一批数据通过8251A 的 TXD 发 送出去 ,然后从 RXD 接收回来 ,并在屏幕上或数码管上显示出来。 1.连接线路 ,即: 1.8MHz 信号接分频器74LS393 的 CLK 端(已接好 ) ,从 74LS393 的 Q4

37、 (250kHz)接 8253 的 CLK;T/C 接地或接 RESET 2.GATE 接+5V; 3.8253 的 OUT 和 8251A 的 TXC、RXC 相连,作为发送时钟 和接收时钟 ; 4.8251A 的 CS 和 Y2 相连,Y2 地址为 EE40-EE47H; 5.8253 的 CS 和 Y1 相连,Y1 地址为 EE20-EE27H; 6.用导线将TXD 和 RXD 相接,成 为自发自收方式 ; 7.CTS 端必须为低电平 (实验台中已接为低电平 ),8251A 才可 想外发送信号 , RTS、DTR、DSR 可不用。 (但实验台中RTS、DTR、DSR 均已 接地) 25

38、三,实验步骤 1.按原理图连接所需连线 ; 2.在检测连线无误的情况下 ,方可开启电源。 3.运行调试程序 ,发送数据被接收后应正确无误地显示出来。 提示:8251A 数据口地址EE40H,控制口地址EE41H 8253 控制口地址EE23H 8253 通道 0 地址 EE20H 8253 通道 1 地址 EE21H 8253 通道 2 地址 EE22H 四,程序流程图 26 START 8253初始化 写入timer0的计数器初值 8251内部复位 写8251控制字 写8251命令字 有键盘动作? 读入 8251状态 允许收入? 允许发送? 接收字符并送显 发送字符 YES NO YES N

39、O YES 返回 DOS NO 图表4:8251 应用程序流程图 五,源程序代码 data segment ; 数据段 org 10h num db 30h,31h,32h,33h ; ” 0” ,” 1” ,” 2” ,” 3” 的 ASCII 码 disp db 00h data ends stack segment stack stack db 100 dup(?) 27 stack ends code segment ;代码段 assume cs:code,ds:data,ss:stack ; 延时子程序 ; 用于写入控制字或命令字后的维持 delay proc far pushf p

40、ush cx mov cx,0FA0h ;4000 维持 loop1: loop loop1 pop cx popf retf delay endp ; 主程序 start proc far push ds xor ax,ax push ax mov ax,data mov ds,ax ;8253初始化 mov dx,0ee23h mov al,16h ;timer0,读写低八位,方式3,二进制 out dx,al ;timer0计数初值写入 mov dx,0ee20h mov ax,0fah ;分频比 250, 输出频率 =250KHz/250=1khz. out dx,ax 28 ;825

41、1初始化 again: mov dx,0ee41h mov al,40h ;内部复位,且将三个错误标志位复位 out dx,al call delay mov dx,0ee41h mov al,4Eh ; 写方式控制字( 1 停止位,无校验, 8 位数据,波特因子为16 ) out dx,al ; 时钟频率 =16KHz call delay mov al,27h ; 命令控制字:接收、发送均允许 out dx,al call delay mov cx,4 ;收/发 4 次 mov di,0 check: mov ah,0bh ;检测键盘输入 int 21h or al,al jz goon

42、jmp exit goon: mov dx,0ee41h ; 读状态位 in al,dx test al,02h ; 检查 RxRDY ,即检查是否接受到新数据 jnz receive test al,01h ; 检查 TxRDY ,检查是否可以发送字符 jz check sending:mov dx,0ee40h mov al,di+10h ; 送出字符 29 out dx,al call delay inc di loop check jmp return receive:mov dx,0ee40h in al,dx ; 读入字符 mov disp,al mov ah,02h ; 并且在屏

43、幕上显示 mov dl,disp int 21h mov dl, int 21h jmp check return: jmp again exit: mov ax,4c00h int 21h retf start endp code ends end start 六,思考题 在实验中 ,你如何确定RXC 、TXC 的值,写出计算公式。 答:RXC = TXC = 8253 输入时钟频率= 8251的波特率 8251的波特因子 七,实验心得和体会 实验中遇到的一个问题是8251A 需要一个时钟信号,这个信号是 由 8253来提供的,在这里要注意到8251A 所需要的时钟信号,从而 通过计算设臵合

44、适的8253的计数值,这样才能保证8253输出的时钟 信号能够合乎 8251A要求。实验中应对这两种芯片的工作方式,性能 30 和编程原理应了解, 8253 在此作分频器使用,提供满足8251A 工作 需要的输入输出时钟。 8251A作为串行通信接口, 时序是非常重要的, 输入输出之间的时 间差必须控制得合适, 否则就不能正常收发, 这可以通过软件编程实 现,当时序不符合时,可插入等待时间,即软件延时。 通过这次实验对于8251的工作原理有了比较清楚的认识。同时也 加深了对于串并转换的实现和其作用的理解。这次实验中由于自发自 收部分占用的时间太多最后没有能够实现两台计算机通信的扩展要 求,是本实验的一个遗憾。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1