北邮微原硬件实验_第1页
北邮微原硬件实验_第2页
北邮微原硬件实验_第3页
北邮微原硬件实验_第4页
北邮微原硬件实验_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、0H在Debug下,I是读命令。(即读输入端口的状态-拨码开关的状态)0是写命令。(即向端口输出数据-通过发光管来查看)进入Debug后,读端口拨动实验台上八位拨码开关输入I端口地址回车屏幕显示xx表示从端口读出的内容,即八位开关的状态 0N是O,0FF是1写端口输入 0端口地址 xx (xx表示要向端口输出的内容)回车 查看实验台上的发光二极管状态,0是灯亮,1是灯灭。2. 在Debug环境下用a命令录入程序,用g命令运行CDebug -amov dx,端口地址mov al,输出内容out dx, almov ah, Obhint 21hor al, aljzO1OOint 20h-g运行查

3、看结果,修改输出内容再运行查看结果分析mov ah, Obhint 21hor al, aljzO1OOint 2Oh该段程序的作用:检测键盘有没有按键,有则返回DOS。没有继续执行3.利用EDIT工具编写汇编写跑马灯程序程序实现功能A. 通过读入端口状态(ON为低电平),选择工作模式(灯的闪烁方式、速度等)B. 通过输出端口控制灯的工作状态(低电平灯亮)CEDIT文件名.asm录入程序按Alt键打开菜单进行存盘或退出编译文件CMASM 文件名.asm连接文件CLINK 文件名.obj运行文件或用Debug进行调试。四,程序流程图硬件连线图:V-T0 luF -=5U3五,源程序代码data

4、segme nt led db Ocfhdata endsstack segme nt stack stack db 100 dupstack ends code segme ntassume cs: code, ds: data, ss: stack start proc far push ds xor ax, ax push ax mov ax, data mov ds, ax mov dx, 0eee0hIoop0: in al, dx mov ah, al and al, 80h xor al, 80h jz loop4 mov al, ah and al, 40h xor al, 4

5、0h jz loop2 mov ah, aland al, 20h xor al, 20h jz stop rol led, 1 jmp loop3Ioop2: ror led ,1 Ioop3: and ah, 3fh mov cl,ah mov ch, 0 mov al,led out dx, al inc ex loop1: call delay loop loopl jmp loopO loop4: retf stop: mov led, Offh mov al, led out dx,al jmp loopO start endp delay proc push cx mov cx,

6、1500h delayl: push cx mov cx,800h delay2: loop delay2 pop cx loop delayl pop cx ret delay endp code ends end start 六,思考题通过实验说明用debug中的a命令录入实验中给出的小程序中,有些语句可以 不写出“ h”字符的原因。答:在DEBU环境下,地址都是默认以16进制显示的,所以当语句中的数据是地址时,可以不加H,如果输入的不是地址而是数据时,就要加上H以表示为十六进制数七,实验收获和体会在这次试验中,我主要学会使用debug环境下的I/O命令,利用该命令点亮 了 LED灯,并且

7、读取了拨码开关的状态,并知道了如何利用键盘检测返回DOS在跑马灯实验中,我学会了写延时子程序,在一开始只用了一层循环,导致速度 过快而无法观察到跑马灯的效果,在同学的帮助下我编写了二层循环才达到了应 有的效果。同时,自己也整体的练习了汇编语言程序的编写,包括段声明,子程 序编写等等。除了软件部分,也学习了实验板上的电路连接,初步了解了CPU是如何通过总线读写数据和地址的,为以后的学习奠定了基础。实验二8255A并行接口应用一、实验目的1. 掌握8255A的功能及方式0、1的实现2. 熟悉8255A与CPU的接口,以及传输数据的工作原理及编程方法。3. 了解七段数码管显示数字的原理。4. 掌握同

8、时显示多位数字的技术。二、实验要求在实验一的基础上学习 PIO芯片(8255)编程应用,熟悉平台的主要内容。CS 用 Y0 (EE00H)1. 查找八段数码管的显示的显示规律及位选规律在方式0(输入/输出)下,以A 口为输出口 ,B 口为输出口 , A 口接六个 共阴极数码管的八位段码,高电平点亮数码管的某一段,B 口接数码管的位 选(即要使哪个数码管亮),高电平选中某一位数码管点亮。8255A 中A端口地址EE00HB端口地址EE01HC端口地址EE02H控制地址EE03H八段数码管的显示规律及数码管的位选规律自己查找 ,可用实验一中,学 过的I、O命令来做。2. 6位数码管静态显示学号在数

9、码管电路上静态地显示 6位学号,当主机键盘按下任意键时,停止 显示,返回DOS。3. 6位数码管动态显示 HELLO要求在数码管电路1-6位数码管上按图3.2所示的规律,动态显示字符 串HELLO,当 主机键盘按下任意键时结束。三、实验原理 1.八段数码管的显示的显示规律及位选规律经实验发现8255A的数码管的显示规律如下图所示:PA6PA3PA2PA5PA4PAOPA7I . PA1由此很容易得到数字09及字母AF的编码:字形01234567编码0EDH21H0F4H0F1H39H0D9H0DDH61H字形S9ABCDEF编码0FDH0F9H7DH9DH0CCH0B5H0DCH5CH2. 6

10、位数码管静态显示学号该电路6个数码管的同名阳极段已经复接,当段选寄存器寄存了一个字 型编码之后,6个数码管都有可能显示出相同的数字。如果要使6个数码管“同时”显示不同的数 字,必须采用扫描显示的方法,通过选位寄存器选择某 一位数码管,显示其数字(对应段值 为1),然后关闭此数码管,再选择下一位 数码管进行显示;如果在一秒钟内,每一位数码 管都能显示30次以上,则人 眼看到的是几位数码管同时在显示。实验证明,在扫描显示过程中,每一位显示延迟1ms是最佳选择3. 6位数码管动态显示 HELLO1本实验应在上面实验的基础上完成2.在数据段,按下列规律设置12个字型码:MESG DB 0,0,0,0,

11、0,0,3DH,0DCH,8CH,8CH,0EDH,0POINT DW MESGPOINT单元存放 MESG单元的有效地址,程序取出POINT单元的 内容一 BX,然后用BX间址取数送数码管电路,扫描显示6个字符。每过0.5s将POINT单元的内容加1,再将POINT单元的内容一 BX,。POINT单元内容加1,使字 符串显示的首地址向高地址移动一个单元,从而使6位字符串向“左”移动一位,实现动态显示。4. 动态显示的速度可控制(快或慢),利用实验一读入端口的5. 动态显示的示意图如下:四、程序框图2. 6 位数码管动态显示 HELLO8255初始化point偏移地址 送 BX, SI1f计数

12、器CX=255J1r最右边数码管显示BX的字符1 1厂左边一个数码管显示BX+1的字符 -1F左边一个数码管显示BX+2的字符1f左边一个数码管显示BX+3的字符 一丿1左边一个数码管显示BX+4的字符1f左边一个数码管显示BX+5的字符- 丿V否五、程序清单1. 6位数码管静态显示学号DATA SEGMENTNUM1 DB 0F4H,21H,21H,61H,0F4H,0FDH; 211728NUM2 DB 0F4H,21H,0EDH,61H,21H,0DDH; 211716 ;将两个学号都存在数据段,供显示选择DATA ENDSSTACK SEGMENT STACK STACK;堆栈段DB

13、100 DUPSTACK ENDSCODE SEGMENT;代码段ASSUME SS:STACK,DS:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV DX,0EE03HMOV AL,80HOUT DX,AL;初始化段基址;给8255A写入控制字;A 口与B 口输出模式LOP:MOV AH,0BHINT 21HOR AL,ALJZ LOP1MOV DX,0EE01HMOV AL,00H;判断是否有键盘输入;若有,则先把显示清零OUT DX,ALMOV AH,4CHINT 21H;再中止程序LOP1:XOR SI,SI

14、;SI存放学号段码偏移量MOV CX,06H;CX存放扫描次数MOV DX,0EEE0HIN AL,DX;判断拨码开关取低位疋否为高电平MOV BH,ALMOV AL,01HSHR BH,1;AL存放位选信号JC NUM;若拨码开关为高电平则输出学号一MOV SI,OFFSET NUM1JMP LOP2NUM:MOV SI,OFFSET NUM2 ;否贝 U输出学号二;开始循环LOP2: MOV DX,0EE01HOUT DX,AL;向A 口输出位选信号DEC DX;切换为B 口PUSH AXMOV AL,SIOUT DX,ALPOP AX;输出对应学号的段选信号INC DX;切换回A 口IN

15、C SI;切换为学号的下一位,共6位ROL AL,1;循环扫描位选信号CALL DELAY;扫描延时,一个周期大约1msLOOP LOP2;循环扫描6次JMP LOP;回到开头,进行下一次扫描JDELAY PROC NEAR;延时程序,通过执行指令消耗时间,形成延时PUSH BXPUSH CX;外层循环,;内层循环;循环3*16A4次,周期大约为1msMOV BX,0003HLOP3: MOV CX,0FFFFHLOP4: LOOP LOP4DEC BXJNZ LOP3POP CXPOP BXRETDELAY ENDPCODE ENDSEND START2. 6 位数码管动态显示 HELLOD

16、ATA SEGMENTHELLO DB 3DH,0DCH,8CH,8CH,0EDH,0TEMP DW 0010H;循环显示的段码POINT DW HELLO;循环显示指针DATA ENDSSTACK SEGMENT STACK STACK;堆栈段DB 100 DUPSTACK ENDSCODE SEGMENT;代码段ASSUME SS:STACK,DS:DATA,CS:CODESTART:MOV AX,SEG DATAMOV DS,AXMOV AX,SEG STACKMOV SS,AX;初始化段基址MOV DX,0EE03H;初始化控制字MOV AL,80HOUT DX,ALLOP:MOV B

17、X,TEMP ;外层循环变量,循环 TEMP次,大约每0.5S滚动一次INC POINT;每结束一次内层循环,将指针值加一CMP POINT,OFFSET HELLO+06H;若滚动完 6 次,将“ HELLO ”和一个空格显示一遍,再从头开始 滚动JNZ LOP1SUB POINT,07HLOP1: DEC BXJZ LOPXOR SI,SIMOV CX,06HMOV DX,0EEE0HIN AL,DXTEST AL,01HJNZ LOPPMOV TEMP,0054HJMP AALOPP: MOV TEMP,0010HAA:MOV SI,POINT;内层循环;每次循环BX减一,判断BX是否为

18、0;更内层循环,扫描6次数码管;滚动速度选择;若拨码开关拨下来;滚动速度变慢;否则变快,TEMP的值决定了延时时间,从而控制速度MOV AX,0001HLOP2: MOV DX,0EE01HOUT DX,ALDEC DXPUSH AX;位选信号;静态显示数码管的程序段;输出位选;将目前的指针值赋给偏移寄存器MOV AL,SIOUT DX,ALPOP AXINC DXINC SIROL AL,1CALL DELAYPUSH AXMOV AH,0BHINT 21HOR AL,ALJNZ EXITPOP AXLOOP LOP2JMP LOP1EXIT: MOV AH,4CHINT 21H;输出段选;

19、位选右移一位涎时;判断是否有键盘输入;按任意键退出;循环扫描6次;扫描完,回到内层循环DELAY PROC NEARPUSH BXPUSH CXMOV BX,0003HLOP3: MOV CX,0FFFFHLOP4: LOOP LOP4DEC BXJNZ LOP3POP CXPOP BXRETDELAY ENDPCODE ENDS;延时子程序,通过循环执行指令来实现延时;外层循环;内层循环;延时3*16A4次END START六、实验结果讨论1. 静态显示学号实验中,关键在于找好延时时间,延时过长会导致,显示数字闪烁,无法稳定;显示时间过短,系统循环次数多,显示亮度降低。延时1ms左右是最佳选

20、择。2. 动态显示HELLO中,为了每次滚动正确显示,并且能够明确区分两个 HELLO,在HELLO后加一个空格,正好形成六个字符,每次滚动完,延时后,再次滚动 显示。这段代码的核心在于循环与延时控制,用1ms延时来清晰显示字符,用0.5s延时来循环位选,实现了滚动显示“ HELLO ”的效果。七、实验心得与收获这次试验让我们掌握了 8255A的功能及方式0、1的实现。在任何操作进 行前,都要先对工作方式进行选择。初始化编程是功能实现的基础。正确选择工 作方式和端口地址后才能正常实现数据输入输出及显示控制功能。数码管的静态显示和动态显示,让我对汇编语言的循环以及延时程序有了 更深的了解。只有设

21、置合理的循环逻辑以及恰当的延时时间,才能得到理想的效果。实验三8253计数器/定时器的应用一、实验目的学习掌握8253用作定时器的编程原理。二、实验要求1完成一个音乐发生器,通过蜂鸣器放出音乐,并在数码管上显示乐谱。2.扩展部分:利用小键盘实现弹琴的功能,并显示弹奏的乐谱。三、实验原理1、电路连接8253的CS接译码器输出 Y1其地址为EE20-EE27H8253的OUT接蜂鸣器的BELL端8253的门控信号GATE接+5V8253 的 CLK 端接 Q7(32KHz)清零复位电路中的T/C端接地(或接RESET端)贝U系统时钟分频后得到的输入频率为 32KHz2、端口地址8253控制端口地址

22、为 EE23H定时器0地址为EE20H定时器1地址为EE21H定时器2地址为EE22H(定时器可工作在方式3下。)3、8253始化使用8253前,要进行初始化编程。初始化编程的步骤是:(1) 制寄存器端口写入控制字对使用的计数器规定其使用方式等。(2) 向使用的计数器端口写入计数初值。4、8253控制字D7D6D5D4m D3 D1D0fn数辭透择|读曹方虫选择|工作方成透样数制选样D7D6 = 00:使用0号计数器,D7D6 = 01:使用1号计数器D7D6 = 10:使用2号计数器,D7D6 = 11:无效D5D4 = 00:锁存当前计数值D5D4 = 01:只写低8位(高8位为0),读出

23、时只读低 8位D5D4 = 10:只写高8位(低8位为0),读出时只读高 8位D5D4 = 11:先读/写低8位,后读/写高8位计数值D3D2D1 = 000:选择方式 0,D3D2D1 = 001 :选择方式 1D3D2D1 = X10:选择方式 2,D3D2D1 = X11 :选择方式 3D3D2D1 = 100:选择方式 4, D3D2D1 = 101:选择方式 5D0= 0:计数初值为二进制,D0 = 1:计数初值为BCD码数5、输出频率计算计数初值=输入频率/输出频率音符对照表为音符1 (do)2 (re)3 (mi)4 (a)5 (so6(h)7 (si)i t do)频 *(HR

24、25628&320Ml3S4 _426.64K0512 分频输出的频率为32khz,则各音符对应的计数初值为1251111009483756763四、程序框图1.音乐发生器8253初始化8255A初始化设置数码管选通信号NO按照乐谱,调用音阶发声子程序数码管显示目前音阶调用延时子程序有键盘动作?YES返回DOS五、程序清单1.音乐发生器datasegment;数据段songdb 7dh,7dh,53h,53h,4bh,4bh,53hdb 5eh,5eh,64h,64h,6fh,6fh,7dhdb 53h,53h,6eh,5eh,64h,64h,6fhdb 53h,53h,5eh,5eh,64h

25、,64h,6fhdb 7dh,7dh,53h,53h,4bh,4bh,53hdb 5eh,5eh,64h,64h,6fh,6fh,7dh;音乐音符,儿歌粉刷匠contequ $-s ongnumdb 21h,21h,0d9h,0d9h,0ddh,0ddh,0d9hdb 39h,39h,0f1h,0f1h,0f4h,0f4h,21hdb 0d9h,0d9h,39h,39h,0f1h,0f1h,0f4hdb 0d9h,0d9h,39h,39h,0f1h,0f1h,0f4hdb 21h,21h,0d9h,0d9h,0ddh,0ddh,0d9hdb 39h,39h,0f1h,0f1h,0f4h,0f4

26、h,21h;对应音符的数码管显示字符Adw 0ee00h ;8255A中 A 端口地址Bdw 0ee01h ;8255A中 B 端口地址condw 0ee03h ;8255A中控制端口地址COdw 0ee20h ; 定时器0地址con2dw 0ee23h ;8253控制端口地址dataendsstacksegment;堆栈段db 100 dupstackendscodesegment;代码段assume cs:code,ds:data,ss:stackstart:movax,datamovds,axmovsi,offset song;SI指向第一个音符movmovdi,offset numcx

27、,c ont;DI指向第一个数码管显示字符loopl:cmpbx,0jnzcontnmovbx,07h ;每一段中有七个音符,循环量设为 7contn:movdx,c on2moval,16houtdx,al;8253控制字movdx,ccc0moval,sioutdx,al;蜂鸣器响,播放对应音符movdx,c onmoval,10001001boutdx,al;8255 控制字movdx,Bmoval,01houtdx,almovdx,Amoval,dioutdx,al;数码管显示对应音符calldelaydecbxjnzn extcalldelayn ext:incdiincsimova

28、h,0bh;检测键盘按键int21horal,aljnzen dlast;任意键按下,退出looploop1;否贝 U,继续播放下一个音符jmpstarten dlast:movdx,Amoval,0outdx,almovdx,0ee20hmoval,0 ;结束程序前,先将输出清零,音乐停止,数码管不显示outdx,almovax,4c00hint21h;延时程序,通过循环指令实现延时pushcxpushbxmovcx,100fhmovbx,0ffffhloop2:noploop3:decbxjnzloop3looploop2popbxpopcxdelay proc nearretdelay

29、endp code endsend start2.键盘弹奏音乐DATA SEGMENTTIMES DW OAFFH ;延时参数1,用来扫描数码管,使音符稳定显示TIMESL DW 00仆H; 延时参数2,用来扫描键盘,输出按键值TIMER0DW0EE20H;各个端口地址TIMER1DW0EE21HTIMER2DW0EE22HCTRL53EQU0EE23HPORTAEQU0EE00HPORTBEQU0EE01HPORTCEQU0EE02HCTRL55EQU0EE03HPORTDEQU0EEE0HMUSICDB100,111,125,0,67,75,83,94,0,0,0,62,0,0,0,0;只

30、有按1 2 3 4 5 6 7 8有值,按剩下的键盘值,没有音乐LED DB 0F1H,0F4H,21H,0,61H,0DDH,0D9H,39H,0,0,0,0FDH,0,0,0,0;对应音符的数码管显示值,在没有音符处不显示ROW DB0EFH;行扫描初值DATA ENDSSTACK SEGMENT STACK STACK; 堆栈段DB 100 DUP (?)STACK ENDSCODE SEGMENT ;代码段ASSUME CS:CODE,DS:DATABEGIN:MOV AX,DATAMOVDS,AXMOVDX,CTRL53MOV AL,00010110B;0号计数器,3方式工作OUTD

31、X,ALMOVDX,CTRL55MOVAL,81H ;A 与B均为0方式,c4位输入4位输出OUTDX,ALMOVDX,PORTBMOVAL,20H ;数码管位选信号,最高位输出OUTDX,ALTEST1:MOV DX,PORTC;检测小键盘按键MOVAL,ROW;行扫描,以延时DELAYL确定的频率不断扫描ANDAL,0F0HOUTDX,ALCALLDELAYLINAL,DX;读入列值无按键时AL=0FANDROW,OFOHSUBAL,ROWORROW,0FHNOTAL;无按键时AL=F0ANDAL,0FH;无按键时AL=00CMPAL,0JNZJ1;有按键时跳转到 J1处理CMPROW,7

32、FH ;行扫描已到第四行JZJ0;回到第一行继续扫描SHLROW,1;到下一行扫描JIAN:MOV AH,0BH;检测键盘是否有按键INT21H;任意键返回DOSORAL,ALJZTEST1;否则继续检测按键EXITMOVINTAH,4CH21H;退出J0:MOVROW,0EFH;回到第一行继续扫描JMPJIANJ1:ESTAL,01H;首先判断疋哪列的按键JZJ2;J1,J2,J3,J4分别代表四列MOVSI,0JMPJ5J2:TESTAL,02H;是第二列的按键?JZ J3MOVSI,1JMPJ5J3:TESTAL,04H;是第三列的按键?JZJ4MOVSI,2JMPJ5J4:TESTAL,08H;是第四列的按键?JZJ5MOV SI,3J5:MOV DX,TIMER0 ; 确定列后,判断是哪一行的按键LEA BX,MUSICJ5 , J6 , J7 , J8 分别代表 1,2,3,4CMP ROW,OEFH;是第一行的按键?JNZJ6;不是,SI+4JMPJ7;是,SI无需处理J6: CMPROW,0DFHJNZJ8ADDSI,4JMPJ7J8: ADDSI,8J7: MOVAL,BX+SIOUTDX,AL ;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论