微机原理第二次实验报告
《微机原理及接口技术》实验报告2
![《微机原理及接口技术》实验报告2](https://img.taocdn.com/s3/m/f904a426b90d6c85ec3ac628.png)
5
FFF0H FFF2H FFF4H FFF6H FFF8H FFFAH FFFCH FFFEH 0000H (1)CALL MAX 执行之前
FFF0H FFF2H FFF4H FFF6H FFF8H FFFAH FFFCH FFFEH 0000H (2)CALL MAX 执行之后
FFF0H FFF2H FFF4H FFF6H FFF8H FFFAH FFFCH FFFEH 0000H (3)保护现场之后
《微机原理与接口技术》实验报告 2
学号: 姓名: 班级:
实验地点:
成绩:
实验名称:选择结构程序、循环结构程序及子程序设计 所使用的工具软件及环境:TASM、TLINK、TD
一、 实验目的: 1. 学习转移指令、比较指令及测试指令; 2. 掌握利用转移指令、 比较指令和测试指令设计单分支、 双分支和多分支选择汇编程序的方法; 3. 学习 LOOP、LOOPZ、LOOPNZ 循环指令的功能; 4. 掌握循环程序的设计方法,了解多重循环程序的设计要点。 5. 掌握带重复前缀的串处理指令的应用。 6. 掌握子程序的定义、调用及返回方法; 7. 熟悉主程序与子程序间几种参数传递方法; 8. 深刻理解子程序的调用与返回对堆栈的影响; 二、实验内容:
1
2、编写程序,从键盘输入一个字符串,统计其中数字字符、小写字母、大写字母和空格的个数。
2
3、编写程序实现:有一个带符号字数组 ARRAY,采用冒泡排序算法将 ARRAY 中的数据按照从小 到大的次序进行排序。
3
4、编写程序实现:比较长度相同的两个字符串 STR1 和 STR2,若两个字符串不相同则将第一个不同 字符的下标送变量 INDEX(设字符串中第 1 个字符的下标为 0) ,否则 INDEX 置为-1。 要求: 用带重复前缀的字符串处理指令实现上述功能。
微机原理实验报告册(3篇)
![微机原理实验报告册(3篇)](https://img.taocdn.com/s3/m/1f8f0706cbaedd3383c4bb4cf7ec4afe04a1b13f.png)
第1篇一、实验目的1. 理解和掌握微机的基本组成和工作原理;2. 熟悉微机硬件设备和实验仪器的使用方法;3. 提高动手实践能力,培养解决实际问题的能力;4. 深入理解微机原理课程内容,为后续课程学习奠定基础。
二、实验内容1. 微机系统认识实验2. 微机硬件组成实验3. 微机指令系统实验4. 微机寻址方式实验5. 微机程序设计实验6. 微机接口技术实验三、实验仪器与设备1. 微机原理实验箱2. 示波器3. 数字万用表4. 计算机一台5. 实验指导书四、实验步骤与内容1. 微机系统认识实验(1)观察实验箱的结构,了解各个模块的功能;(2)熟悉实验箱的电源、复位、运行等按钮的使用方法;(3)学习微机系统的工作流程,包括加电、复位、启动等过程;(4)观察微机系统启动后的运行状态,了解各个模块的协同工作。
2. 微机硬件组成实验(1)观察实验箱的CPU、内存、I/O接口等硬件模块;(2)学习CPU的内部结构,包括寄存器、控制单元、运算单元等;(3)学习内存的存储原理,了解ROM、RAM等存储器的特点;(4)学习I/O接口的工作原理,了解中断、DMA等传输方式。
3. 微机指令系统实验(1)学习微机指令系统的基本格式,包括操作码、地址码等;(2)掌握微机指令系统的寻址方式,包括立即寻址、直接寻址、间接寻址等;(3)编写简单的汇编语言程序,实现加、减、乘、除等运算;(4)学习微机中断处理过程,了解中断向量表、中断服务程序等概念。
4. 微机寻址方式实验(1)学习微机寻址方式的基本概念,包括直接寻址、间接寻址、寄存器寻址等;(2)编写程序,实现不同寻址方式下的数据访问;(3)观察不同寻址方式对程序执行速度的影响。
5. 微机程序设计实验(1)学习汇编语言程序设计的基本方法,包括数据定义、指令编写、程序结构等;(2)编写简单的程序,实现数据交换、排序等操作;(3)学习微机程序的调试方法,包括单步执行、断点设置等。
6. 微机接口技术实验(1)学习微机接口技术的基本概念,包括并行接口、串行接口等;(2)观察实验箱中的并行接口、串行接口等模块,了解其工作原理;(3)编写程序,实现数据在并行接口、串行接口之间的传输;(4)学习微机中断处理在接口技术中的应用。
西电微机原理实验报告
![西电微机原理实验报告](https://img.taocdn.com/s3/m/de021ef6cc22bcd127ff0c64.png)
微机系统实验报告班级: 031214 学号: 03121370 姓名:孔玲玲地点: E-II-312 时间:第二批实验一汇编语言编程实验一、实验目的(1)掌握汇编语言的编程方法(2)掌握DOS功能调用的使用方法(3)掌握汇编语言程序的调试运行过程二、实验设备PC机一台。
三、实验内容(1)将指定数据区的字符串数据以ASCII码形式显示在屏幕上,并通过DOS功能调用完成必要提示信息的显示。
(2) 在屏幕上显示自己的学号姓名信息。
(3)循环从键盘读入字符并回显在屏幕上,然后显示出对应字符的ASCII码,直到输入“Q”或“q”时结束。
(4)自主设计输入显示信息,完成编程与调试,演示实验结果。
考核方式:完成实验内容(1)(2)(3)通过,完成实验内容(4)优秀。
实验中使用的DOS功能调用: INT 21H表3-1-1 显示实验中可使用DOS功能调用AH 值功能调用参数结果1 键盘输入并回显AL=输出字符2 显示单个字符(带Ctrl+Break检查) DL=输出字符光标在字符后面6 显示单个字符(无Ctrl+Break检查) DL=输出字符光标在字符后面8 从键盘上读一个字符AL=字符的ASCII码9 显示字符串DS:DX=串地址,‘$’为结束字符光标跟在串后面4CH 返回DOS系统AL=返回码四、实验步骤(1)运行QTHPCI软件,根据实验内容编写程序,参考程序流程如图3-1-1所示。
(2)使用“项目”菜单中的“编译”或“编译连接”命令对实验程序进行编译、连接。
(3)“调试”菜单中的“进行调试”命令进入Debug调试,观察调试过程中数据传输指令执行后各寄存器及数据区的内容。
按F9连续运行。
(4)更改数据区的数据,考察程序的正确性。
五、实验程序DATA SEGMENTBUFFER DB '03121370konglingling:',0AH,0DH,'$'BUFFER2 DB 'aAbBcC','$'BUFFER3 DB 0AH,0DH,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXmov ah,09hmov DX,OFFSET BUFFERint 21hMOV SI,OFFSET BUFFER2lab1:cmp BYTE PTR [SI],'$'je lab2MOV AL,DS:[SI]AND AL,0F0H ;取高4位MOV CL,4SHR AL,CLCMP AL,0AH ;是否是A以上的数JB C2ADD AL,07HC2: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HMOV AL,DS:[SI]AND AL,0FH ;取低4位CMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21Hadd SI,1jmp lab1lab2:mov ah,09hmov DX,OFFSET BUFFER3int 21hmov ah,01hint 21hcmp al,'q'je lab3mov BL,ALAND AL,0F0H ;取高4位MOV CL,4SHR AL,CLCMP AL,0AH ;是否是A以上的数JB C4ADD AL,07HC4: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HMOV AL,BLAND AL,0FH ;取低4位CMP AL,0AHJB C5ADD AL,07HC5: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21Hjmp lab2lab3:mov ah,4chint 21hCODE ENDSend START六、实验结果实验二数码转换实验一、实验目的(1)掌握不同进制数及编码相互转换的程序设计方法。
微机原理分正负的实习报告
![微机原理分正负的实习报告](https://img.taocdn.com/s3/m/8859a17ecec789eb172ded630b1c59eef8c79afc.png)
微机原理实习报告一、实习目的与意义本次微机原理实习旨在让我们更好地理解和掌握微机原理的基本知识,培养我们动手能力和实际操作技能,提高我们的综合素质和工程实践能力。
二、实习内容与过程在实习过程中,我们主要学习了微机原理的基本知识,包括微机系统组成、微处理器结构、指令系统、存储器、输入输出接口等方面。
同时,我们还进行了实际的操作,包括编程、电路连接、故障排查等。
具体来说,我们首先学习了微机系统组成,了解了微机系统的基本构成和各部分的作用。
然后,我们学习了微处理器结构,了解了微处理器的内部结构和各部分的功能。
接着,我们学习了指令系统,了解了指令的格式和分类,并学会了编写简单的程序。
此外,我们还学习了存储器和输入输出接口,了解了存储器的分类和特点,以及输入输出接口的功能和应用。
在实际操作方面,我们首先学习了编程,掌握了基本的编程语言和编程方法。
然后,我们进行了电路连接,学会了使用电子仪器和工具,了解了电路连接的方法和注意事项。
最后,我们进行了故障排查,学会了诊断和解决电子设备中常见的问题。
三、实习成果与收获通过本次实习,我深入理解了微机原理的基本知识,掌握了微机系统组成、微处理器结构、指令系统、存储器、输入输出接口等方面的知识。
同时,我也提高了自己的动手能力和实际操作技能,学会了编程、电路连接、故障排查等实际操作。
通过本次实习,我深刻认识到了微机原理在现代工程中的重要性,也体会到了工程实践的乐趣和意义。
我相信,本次实习对我的专业学习和未来的工程实践都将产生积极的影响。
四、实习总结本次微机原理实习让我受益匪浅,不仅让我掌握了微机原理的基本知识,也提高了我的动手能力和实际操作技能。
同时,我也深刻认识到了微机原理在现代工程中的重要性。
我相信,这次实习对我的学习和未来的工作都将产生积极的影响。
新版西电微机原理第二次上机实验报告-新版-精选.pdf
![新版西电微机原理第二次上机实验报告-新版-精选.pdf](https://img.taocdn.com/s3/m/d47a5f1b3968011ca3009171.png)
西电微机原理第二次上机实验报告学号:姓名:一、实验目的1.熟练掌握汇编语言程序设计的方法及上机步骤。
2.掌握算术运算中,十进制数调整指令的应用。
3.掌握子程序的设计方法。
4.掌握DOS功能的调用方法。
二、实验仪器586微机 1台三、实验内容编写求十进制数12678532与21736543之和的程序,并将和以十进制数的形式送屏幕显示。
编程要求与提示:[1] 两个加数均以压缩(组合)十进制数形式存放在ADD1和ADD2为首址的存贮器单元。
[2] 和以压缩十进制数的形式存入SUM以下单元。
[3] 将和送到屏幕显示部分功能的实现采用子程序的形式。
[4] 实验步骤如下:a. 用全屏幕编辑软件建立源程序。
b.用masm.exe汇编程序对源程序进行汇编,形成目标程序。
c. 用link.exe连接程序对目标程序进行连接形成可执行文件。
d. 用DEBUG对连接通过的可执行程序进行调试。
四、实验内容对应的源程序及流程源程序如下:STACK SEGMENT STACKDB 10H DUP(00)STACK ENDSDATA SEGMENTADD1 DB 12H,67H,85H,32HADD2 DB 21H,73H,65H,43HSUM DB 4H DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOV AX, DATAMOV DS, AXMOV AX, DATAMOV ES, AXMOV AX,STACKMOV SS,AXLEA SI, ADD1[3]LEA BX, ADD2[3]LEA DI,SUM[3]MOV CX,4CLCL1:MOV AL,[SI]ADC AL,[BX]DAAMOV [DI],ALDEC SIDEC BXDEC DILOOP L1CALL DISPAL; ------------EXITPROC:MOV AH,4CH ;结束程序MOV AH,1INT 21H; ------------DISPAL PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH DILEA DI,SUMMOV CX,4DISPAL2:MOV AL,[DI]SHR AL,1SHR AL,1SHR AL,1SHR AL,1MOV AH,2MOV DL,ALADD DL,30HINT 21HMOV AL,[DI]AND AL,0FHMOV AH,2MOV DL,ALADD DL,30HINT 21HINC DILOOP DISPAL2POP DIPOP DXPOP CXPOP BXPOP AXRETDISPAL ENDPCODE ENDSEND START运行结果如下:五、问题讨论1.在以十进制数形式参加运算的程序设计中,应注意那些问题。
微机原理实验报告_2
![微机原理实验报告_2](https://img.taocdn.com/s3/m/136261bafbb069dc5022aaea998fcc22bcd1431d.png)
实验一汇编语言的编译、链接和调试一、实验目的1、学会使用masm对汇编源程序进行编译、链接、调试、运行。
2、掌握汇编语言的程序格式。
3、巩固所学的汇编语言指令。
二、实验环境1、硬件:PC 微机2、软件:宏汇编MASM 软件三、实验原理1、汇编语言程序的上机与处理过程2、汇编语言的程序格式(1)汇编程序一般由若干段组成,每个段都有一个名字,以SEGMENT作为段的开始,以ENDS作为段的结束,这两者前要冠以相同的名字作为段名。
(2)代码段和堆栈段必不可少,数据段和附加段可根据需要设置。
堆栈段的SEGMENT之后有关键字STACK。
代码段中有伪指令ASSUME告诉汇编程序,在各种指令执行时所要访问的各段寄存器将分别对应哪一段。
(3)源程序的每一段是由若干行汇编语句组成,每一行只有一条语句,且不能超过128个字符,但一条语句允许有后续行,最后均以回车结束。
(4)整个源程序必须以END语句结束,它通知汇编程序停止汇编。
四、实验内容进入DOS环境中相应的目录下。
如汇编软件的文件来为:D:\MASM,则对应的操作为(1)选择windows的“开始”→“程序”→“附件”→“命令提示符”(2)在DOS命令提示符下输入如下命令(其中带下划线部分为输入内容)。
C:\Documents and Settings\new>D:D:\>CD MASMD:\MASM>EDIT TEXT.ASM进入编辑程序,在其环境下输入编好的源程序,然后在盘上生成一个扩展名为.asm的文件。
程序示例DATA SEGMENTDA1 DB 10H,20H,30H,40HDA2 DB 0F0H,0B0H,0A0H,90HDA3 DB 00H,00H,00H,00HDATA ENDSSTACK1 SEGMENT PARA STACKDB 10 DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,DATAMOV DS,AXMOV AL,[DA1]ADD AL,[DA2]MOV [DA3],ALMOV AL,[DA1+1]ADC AL,[DA2+1]MOV [DA3+1],ALMOV AL,[DA1+2]ADC AL,[DA2+2]MOV [DA3+2],ALMOV AL,[DA1+3]ADC AL,[DA2+3]MOV [DA3+3],ALCODE ENDSEND START3. 用宏汇编程序MASM,将扩展名为.ASM的源程序汇编成目标程序,即生成盘上扩展名为.OBJ的文件。
微机原理与接口技术实验报告二
![微机原理与接口技术实验报告二](https://img.taocdn.com/s3/m/e121c36a0a4c2e3f5727a5e9856a561252d321cb.png)
微机原理与接口技术实验报告(二)1、实验内容一:实验目的:(1) 阅读《实验操作.ppt》, 学习汇编工具的使用(2) 学习附录的程序代码, 理解并输入、编译和查错3) 学习利用编译错误信息进行附录的程序修改;(程序包含一个语法错误和一个逻辑错误)4)学习程序流程控制: (条件跳转指令ja jb (call指令, 观察程序执行时堆栈的变化(学会用debug –g命令设置断点);5 )学习程序中有限的寄存器的使用。
2.实验内容:(1)打开masm for windows软件, 在其中输入实验要求附给的程序, 保存后运行, 程序报错:(2)经分析发现, “noneeded”没有定义, 改为“notneeded”后正常运行(3)运行过程中发现当字母或数字个数达到两位数时, 统计结果的各位与十位对调了。
如下图, 字母数应为13, 但显示为31(4)经检查, 发现第80行程序有误, inc指令应改为dec指令。
运行后程序正常, 调试完毕。
如下图程序框图如下:实验内容二:1.实验目的及内容:编写完整程序, 实现功能:统计以下字符串STR中空格的数目, 结果保存在COUNT中, 并把个数在屏幕上显示出来。
STR DB ' AB CDE FG H I J K L MNOPQ RST UV W XYZ 12 34 56 78 9'L EQU $-STRCOUNT DB ?(字符串STR可以从这里直接拷贝到程序中)实验结果:程序如下:dispmsg macro messgemov ah,9lea dx,messgeint 21hendmDATA segmenttishi db 0dh,0ah,'the original string is:' string db ' AB CDE FG H I J K L MNOPQ RST UV W XYZ 12 34 56 78 9' STRINGLEN= $-stringnewline db 0dh,0ahNspace db 0dH,0aH,'Number of char space is:',?,?Nsp db ?,'$'DATA endsSTACK segment stack 'stack'sta db 100 dup(?)stack endsCODE segmentASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,seg DATAMOV DS,AXxor cx,cxxor dl,dlmov cl,stringlenlea bx,stringcnt:mov al,[bx]cmp al,' 'jz yesspinc blloop cnt jmp shijinzhiyessp:inc dlinc blloop cntjmp shijinzhishijinzhi:lea bx,Nspmov ah,02hint 21hcall char2asc dispmsg tishiMOV AH,4CHINT 21Hchar2asc procmov dl,10 next: xor ah,ahdiv dladd ah,'0'mov [bx],ahdec bxor al,aljnz nextretchar2asc endpcode endsend startEND START运行结果如下:程序流程图如下:实验中遇到的问题及解决方法:1.汇编语言中寄存器有限, 在使用时注意是否保存寄存器中原有的值, 防止在使用寄存器时将原值改变。
北京工业大学微机原理实验报告2
![北京工业大学微机原理实验报告2](https://img.taocdn.com/s3/m/494ca3085e0e7cd184254b35eefdc8d376ee142c.png)
北京工业大学微机原理实验报告2微机原理实验报告—实验二熟悉汇编程序建立及其调试方法姓名:学号:一、实验目的1、熟悉汇编语言源程序的框架结构,学会编制汇程序。
2、熟悉汇编语言上机操作的过程,学会汇编程序调试方法。
二、实验内容1、学习编写汇编语言源程序的方法,了解数据存放格式。
2、阅读给出的程序,找出程序中的错误。
3、通过调试给出的汇编语言源程序,了解并掌握汇编语言程序的建立、汇编、链接、调试、修改和运行等全过程。
三、实验预习1、阅读实验指导第一章的内容,了解汇编语言程序建立、汇编、链接、调试的全过程。
2、下面的汇编语言源程序有错误的,试给程序加注释。
通过调试手段找出程序中的错误并修改之。
写出程序的功能,画出程序流程图。
(1)程序修改前:STACKSG:SEGMENT PARA STACK ‘STACK’ ;不能有冒号DB 256 DUP(?)STACKSG ENDSDATASG: SEGMENT PARA ‘DATA’;不能有冒号BLOCK DW 0,-5,8,256,-128,96,100,3,45,6,512DW 23,56,420,75,0,-1024,-67,39,-2000COUNT EQU 20MAX DW ?DATASG ENDSCODESG: SEGMENT ;不能有冒号ASSUME SS:STACKSG , CS:CODESGASSUME DS:DATASGORG 100HBEGIN MOV DS, DATASG ;BEGIN: 应改为MOV AX , DATASG MOV DS, AX LEA SI ,BLOCKMOV CX, COUNTDEC CXMOV AX , [SI]CHKMAX ADD SI,2 ;应加冒号CHKMAX: CMP [SI] , AXJLE NEXTMOV AX , [SI]DEC CX ;删除NEXT: LOOP CHKMAXMOV MAX ,AXMOV AH, 4CHINT 21HCODESG ENDSEND BEGIN(2)程序修改后:STACKSG SEGMENT PARA STACK ‘STACK’DB 256 DUP(?)STACKSG ENDSDATASG SEGMENT PARA ‘DATA’BLOCK DW 0,-5,8,256,-128,96,100,3,45,6,512DW 23,56,420,75,0,-1024,-67,39,-2000COUNT EQU 20MAX DW ?DATASG ENDSCODESG SEGMENTASSUME SS:STACKSG , CS:CODESGASSUME DS:DATASGORG 100HBEGIN MOV AX , DATASGMOV DS, AXLEA SI ,BLOCKMOV CX, COUNTDEC CXMOV AX , [SI]CHKMAX:ADD SI,2CMP [SI] , AXJLE NEXTMOV AX , [SI]NEXT: LOOP CHKMAXMOV MAX ,AXMOV AH, 4CHINT 21HCODESG ENDSEND BEGIN(3)程序注释:STACKSG SEGMENT PARA STACK 'STACK'DB 256 DUP(?)STACKSG ENDS ;定义堆栈段DATASG SEGMENT PARA 'DATA' ;数据段定义BLOCK DW 0,-5,8,256,-128,96,100,3,45,6,512DW 23,56,420,75,0,-1024,-67,39,-2000 ;定义变量BLOCK包含20个字COUNT EQU 20 ;COUNT=20MAX DW ? ;定义字变量MAX并不赋值DATASG ENDSCODESG SEGMENT ;代码段定义ASSUME SS:STACKSG , CS:CODESG ;说明STACKSG是堆栈段ASSUME DS:DATASG ;CODESG是代码段,DATASG是数据段ORG 100HBEGIN: MOV AX, DATASGMOV DS, AX ;DS指向DATASGLEA SI ,BLOCK ;取BLOCK的有效地址给SIMOV CX, COUNT ;CX=20DEC CX ;CX=CX-1MOV AX , [SI] ;将DS:[SI]里的值送到AX CHKMAX : ADD SI, 2 ;SI=SI+2CMP [SI] , AX ;比较DS:[SI]与AX值的大小JLE NEXT ;如果DS:[SI]的值小于AX里的值,则跳转到NEXT MOV AX , [SI] ;将DS:[SI]的值送到AXNEXT: LOOP CHKMAX ;循环CHKMAXMOV MAX ,AX ;将AX的值送到变量MAXMOV AH, 4CH ;结束INT 21HCODESG ENDSEND BEGIN(4)程序的流程图:Y NNY(5)程序的功能:找出20个数中的最大值并保存。
微机原理第二次实验报告
![微机原理第二次实验报告](https://img.taocdn.com/s3/m/e4a6745484254b35effd3428.png)
微机原理第二次实验报告实验二:加法及判断程序调试实验实验报告健行理工1402班 陈丽红 201424450202一、实验目的1. 掌握编写汇编语言源程序的基本方法和基本框架。
2. 学会编写顺序结构、分支结构和循环结构的汇编程序,掌握宏定义与宏调用的方法。
3.掌握程序中数据的产生与输入输出的方法。
二、实验内容1. 用汇编语言编写一个加法程序: 1325十9839,用ASCII 码的形式将加数与被加数存放在数据区DATA1和DATA2中,并将相加结果显示输出。
2. 设有一组数据: 5,-4,0,3,100,-51,编程判断:每个数是>0、=0、还是<0 ?并输出其判断结果。
即:⎪⎩⎪⎨⎧<-=>=010001x x x y 当当当三、程序说明3.1实验内容一:(1) 两个数据先以相反的顺序以ASCII 码的形式存放在数据段的DATA1和DATA2中,相加时从DATA1和DATA2的起始字节开始相加,也就是从数的个位数开始相加。
相加后的结果存放在DATA2开始的存储单元中,同时用DL 保存进位位。
(2)对于本题来说,题目为两个四位数相加,所以定义循环数为4。
(3) 程序中的加法运算是ASCII 码运算,后面应加一条ASCII 码加法调整指令AAA ,经AAA 调整的加法指令,将ASCII 码的数据高4位清“0”,因此要将结果每位数高4位拼成3,变成ASCII 码存到DATA2中。
(4)一位运算结束后将用于保存进位位的DL 复原,进入循环,进行下一位求和计算。
(5)由于计算是从个位数相加开始,所以存入DATA2中的数据应该以相反的顺序输出,故再进行一轮循环输出,得到最终的计算结果。
3.2实验内容二:(1)首先将原始数据(5,-4,0,3,100,-51)装入起始地址为VAR 的字节存储单元中。
(2)将判断结果以字符串的形式分别存放在数据区中,以便在显示输出时调用。
(3)判断部分采用CMP 指令。
微机原理第二次实验报告-董东启
![微机原理第二次实验报告-董东启](https://img.taocdn.com/s3/m/6039a895cc22bcd126ff0ce8.png)
实验二定时器实验一、实验目的与要求利用定时器控制产生占空比可变的PWM波,通过实验验证进一步加强对定时器功能的认识,掌握定时器的使用方法。
1、用P1.0口输出PWM波,利用按键控制占空比的增加和降低,用示波器查看P1.0口的输出波形。
2、引导学生进行利用现有程序演示定时器动态显示数码管实验,了解数码管动态扫描方式。
二、实验注意事项1、启动KEIL软件,选择菜单“工程\新建工程”以建立工程(扩展名为.uv2,如T2a.uv2)。
2、选择菜单“文件\新文件”以建立一个新的文本编辑窗口,在窗口中输入参考源程序1并保存(扩展名为.asm),如test2a.asm,然后将其加入到源程序组1中。
3、在工程菜单的选项“目标1属性”中设置相应的选项,包括“输出\产生hex文件”选项以便汇编生成HEX代码供编程器使用,在“调试\使用KeilMonitor-51 Driver”的设置中选择相应的串口号。
4、使用“工程”中的“编译全部文件”完成相应的文件编译,如果程序格式正确将生成相应HEX代码文件,如T2a.hex。
如果提示有编译错误请自行修改源程序然后再重新编译。
5、用单根连线将P1.0(JP44)连接到8路指示灯部分(JP32)的LED0,将P1.6、P1.7(JP44)分别连接到JP37的K01、K02。
6、完成仿真器与计算机之间的连线并通电。
7、在KEIL软件中启动“调试\开启仿真模式”,然后用“运行”命令实现全速运行的仿真。
8、观察实验现象并分别依次按下K01、K02,观察并记录实验现象然后在KEIL软件中启动“中断运行-调试(debug)\关闭仿真模式”退出仿真,选择“工程\关闭工程”可关闭当前工程。
9、参考步骤1-4完成参考源程序2的建立与输入,如新项目T2b.uv2和新的源程序test2b.asm,完成编译与仿真设置。
10、用8PIN连线将P0口连接到数码管数据输入端,P2口连接到数码管控制端。
11、输入程序并仿真运行,注意数码管的显示内容。
微机原理实验报告 实验二
![微机原理实验报告 实验二](https://img.taocdn.com/s3/m/ba0b324bb307e87101f6963c.png)
4.全速运行时拨动开关,观察发光二极管的变化。当开关某位置于L时,对应的发光二极管点亮,置于H时熄灭。
5.编写实验报告。
本实验用到两部分电路:开关量输入输出电路和8255可编程并口电路。
设计原理图及源程序
程序框图:
源程序:
问题讨论
在实验中确认正确编译好且试验箱能运行程序之后并开始自己的程序运行,可为什么不能得到预期的结果?
(3)A端口有一个8位的数据输出缓冲锁存器和一个输入缓冲锁存器,用以暂存数据,B、C端口各有一个8位的数据输出锁存器和一个输入缓存器。
(4)8255A内部结构及引脚:三个可编程的数据端口A、B、C,数据总线缓冲器,内部控制逻辑——A组和B组控制,④读写控制逻辑.
(5)8255A的控制字:方式选择控制字8255A C端口按位置位/复位控制字
(6)8255A是通用的可编程并行接口芯片,可将在一个与TTL兼容的I/O设备与CPU相连,如果与使用高于8MHz时钟的CPU一起工作,需要插入等待状态,输出提供至少2.5mA的吸收电流,最大为4mA。
2.实验接线:CS0CS8255 PA0~PA7平推开关的输出K1~K8 PB0~PB7发光二极管的输入LED1~LED8。
1.设计原理:
(1)可编程控制改变端口功能,8255A有三种工作方式:
方式0,基本输入/输出;方式1,选通联络工作方式;方式2,双向输入/输出方式,只有A端口具有此功能。
(2)可编程并行接口芯片8255A为40引脚双列直插芯片,它有三个独立的端口,分别称为A、B、C端口,每个端口有8根数据线,通过数据线可以与I/O设备交换数据。
微机原理实验报告书
姓名学号实验时间
课题名称
实验二8255并行口实验实 Nhomakorabea目的1.掌握8255A的基本工作方式
北邮微机原理 第二次软件实验报告
![北邮微机原理 第二次软件实验报告](https://img.taocdn.com/s3/m/dc21dd9c680203d8ce2f24de.png)
微机原理与接口技术中断实验与编程报告姓名学院信息与通信工程学院专业班级学号班内序号目录一、实验目的 (2)二、实验任务及内容 (2)1设计思路 (2)2流程图 (3)3源代码 (4)4子程序清单 (9)三、实验结果 (10)四、实验总结 (12)一、实验目的编一程序,在显示器上显示时、分、秒。
借用计数器8253的Timer0作为中断源,通过8259A向CPU发中断,每10ms产生一次中断。
在中断服务程序中管理刷新时、分、秒。
要求:输入文件名,(如CLK)后,清屏后显示:Current time is xx:xx:xx(时分秒键盘输入)打回车,时、分、秒开始计时。
时钟不停的刷新。
当键入ctrl+c时,停止计时,返回系统,且系统正常运行不死机。
二、实验任务及内容1设计思路1)定义数据段和堆栈段。
数据段存放中断次数count100,输入的时间信息(8位字符),用于提示的字符串信息。
堆栈段存放256个空字符。
2)宏名check的定义。
判断输入的字符是否超出允许输入的范围,若超出范围,报错后返回程序开始处。
3)主程序。
初始化寄存器。
清屏。
(执行过程见注释部分)显示字符串str1。
用于说明输入格式(xx:xx:xx)和输入后开始计时的方式(按回车键开始)将输入的8个字符存入数据段。
使用DOS功能调用01H,通过DI,把存放在AL 中的键入字符存入以tenhour为开始的数据段,并使用宏指令check判断输入字符是否超过范围。
键入回车,开始计时。
使用DOS 功能调用01H ,把键入的键与回车键对应码0DH进行比较。
若键入其他键,报错,返回程序开始。
将原来08H 中断号设置的入口地址换成本程序中timer 的起始地址,保证在发生08H 中断时,程序自动进入timer 过程。
为时钟计时器置初值。
43H 端口是指8253三通道定时器中的命令寄存器,所使用的命令字36H 表示选用0通道定时器,以3号方式(产生方波)计数等。
微机原理实验二 8255A并行接口应用
![微机原理实验二 8255A并行接口应用](https://img.taocdn.com/s3/m/98abb78583d049649b6658bf.png)
实验二8255A并行接口应用一、实验目的1.掌握8255A的功能及方式0、1的实现2.熟悉8255A与CPU的接口,以及传输数据的工作原理及编程方法。
3.了解七段数码管显示数字的原理。
4.掌握同时显示多位数字的技术。
二、8255应用小结1.8255的工作方式一片8255内部有3个端口,A口可以工作在方式0、方式1或方式2,B口可以工作在方式0、方式1,C口可以工作在方式0。
方式0是基本型输入/输出。
这种方式和外设交换数据时,8255端口与外设之间不使用联络线。
方式1为选通型输入/输出。
用这种方式和外界交换数据时,端口和外设之间要有联络信号。
方式2是双向数据传送,仅A口有这项功能。
当A口工作在方式2时,B口仍可以工作在方式0或方式1,但此时B口方式1只能用查询方式与CPU交换信息。
2. 工作方式选择字8255工作方式选择字共8位(如图),存放在8255控制寄存器中。
最高位D7为标志位,D7=1表示控制寄存器中存放的是工作方式选择字,D7=0表示控制寄存器中存放的是C口置位/复位控制字。
3.C口置/复位控制字8255的C口可进行位操作,即:可对8255C口的每一位进行置位或清零操作,该操作是通过设置C口置/复位字实现的(图8-10)。
C口置/复位字共8位,各位含义如下:3.8255A的控制信号与传输动作的对应关系4.命令字与初始化编程8255有两个命令字,即方式选择控制字和C口置0/置1控制字,初始化编程的步骤是:①向8255控制寄存器写入“方式选择控制字”,从而预置端口的工作方式。
②当端口预置为方式1或方式2时,再向控制寄存器写入“C口置0/置1控制字”。
这一操作的主要目的是使相应端口的中断允许触发器置0,从而禁止中断,或者使相应端口的中断允许触发器置1,从而允许端口提出中断请求。
注意:“C口置0/置1控制字”虽然是对C口进行操作,但是该控制字是命令字,所以要写入控制寄存器,而不是写入C口控制寄存器。
东南大学微机原理第二次实验报告
![东南大学微机原理第二次实验报告](https://img.taocdn.com/s3/m/e799205dad02de80d4d840e4.png)
《微机实验及课程设计》实验报告实验二汇编语言程序设计姓名:学号:专业:仪器科学与工程学院实验室:计算机硬件技术实验时间: 2014年04月24日报告时间: 2014年05月7日评定成绩:审阅教师:实验目的与内容目的:1)进一步熟悉汇编语言程序的编辑、宏汇编、链接、运行基本概念;2)熟练掌握动态调试程序TD/DEBUG 的常用命令或窗口功能,学会用TD/DEBUG 调试程序,修改数据和寄存器等环境;3)熟悉掌握汇编语言程序的典型数据结构设计、典型程序流控制方法,了解DOS/BIOS 功能调用的基本方法内容:1.从键盘输入任意字符串后,存入自定义存储单元,判断处理后将字符串中小写字母转换为大写字母(其它字符不变),并按原顺序将这些字符在屏幕上显示出来(参考程序P36),并显示字符串“The total number is XXXXX”。
2.从键盘输入一个0~255之间的十进制数,将其转换为16进制数,并在屏幕上显示变换前后的数据(参考程序P38)。
流程图实验源程序实验1data segmentinput db 100,100 dup(?)string1 db 0dh,0ah,'please input your strings',0dh,0ah,'$' string2 db 0dh,0ah,'the string you input are:',0dh,0ah,'$' string3 db 0dh,0ah,'do you want to conyinue(y/n)',0dh,0ah,'$' string4 db 0dh,0ah,'the total number is',0dh,0ah,'$'data endsstacks segment stackdb 256 dup(?)stacks endscode segmentassume cs:code,ds:data,ss:stacksmain proc farstart:mov ax,datamov ds,axmov ax,stacksmov ss,axloop1:mov dx,offset string1mov ah,09hint 21hmov dx,offset inputmov ah,0ahint 21hmov dx,offset string2mov ah,09hint 21hcall dispmov dx,offset string4mov ah,09hint 21hmov cl,input[1]add cl,30hmov dl,clmov ah,02hint 21hmov dx,offset string3mov ah,09hint 21hmov ah,01hint 21hcmp al,'y'jz loop1mov ah,4chint 21hmain endpdisp proc nearxor cx,cxmov cl,input[1]mov si,2again:mov dl,input[si]cmp dl,61h ;判断是否是小写字母jb nextcmp dl,7ahja nextsub dl,20h ;将小写字母转换成大写字母next:mov ah,02hint 21hinc siloop againretdisp endpcode endsend startdata segmentright db 1input db 4,5 dup(0)output db 00hten db 0ahstring1 db 0dh,0ah,'please input your number(0~255)',0dh,0ah,'$'string2 db 0dh,0ah,'The number you input is (00H~FFH)',0dh,0ah,'$' string3 db 0dh,0ah,'Do you want to continue (y/n):',0dh,0ah,'$'string4 db 0dh,0ah,'The number you input is not from 0~255',0dh,0ah,'$' data ends;----------------------------------------------------------------------- stacks segment stackdb 256 dup(0)stacks ends;----------------------------------------------------------------------- code segmentassume cs:code,ds:data,ss:stacksmain proc farstart:mov ax,datamov ds,axmov ax,stacksmov ss,axloop1:mov output,00hmov dx,offset string1mov ah,09hint 21hmov dx,offset inputmov ah,0ahint 21hmov right,1call changecmp right,0jz errormov dx,offset string2mov ah,09hint 21hmov al,outputmov dl,almov cl,4shr dl,clcall dispmov dl,aland dl,0fhcall dispjmp goerror:mov dx,offset string4mov ah,09hint 21hgo: mov dx,offset string3mov ah,09hint 21hmov ah,01hint 21hcmp al,'y'jz loop1mov ah,4chint 21hmain endp;------------------------------------------------------------------------ change proc nearclcxor ax,axxor bx,bxxor dx,dxmov cl,input[1]mov si,2again:mov bl,input[si]cmp bl,30hjb error1cmp bl,39hja error1sub bl,30hdec clcmp cl,0jz overmov ax,1push cxloop2:mul tenloop loop2pop cxmul bladd output,al ;----jc errorinc sijmp againover:add output,bl ;----jnc over1error1:mov right,0over1:retchange endp;--------------------------------------------------------------------------- disp proc nearpush dxpush axcmp dl,9jbe numadd dl,7 ;----num: add dl,30hmov ah,02h int 21hpop axpop dxretdisp endpcode ends end start实验结果实验一实验二。
微机原理与嵌入式系统第二次实验报告北京联合大学
![微机原理与嵌入式系统第二次实验报告北京联合大学](https://img.taocdn.com/s3/m/7001d4bf767f5acfa0c7cd0c.png)
北京联合大学微机原理与嵌入式系统实验报告学院:信息学院专业:电脑科学与技术课程:微机原理与嵌入式系统班级:计科1203B 姓名:王晴学号:2015年 5 月27日Debug的使用(基础与验证型〕一、实验目的及任务目的:掌握汇编语言程序设计的基本方法和技能;熟练掌握使用全屏幕编辑程序EDIT编辑汇编语言源程序;熟练掌握宏汇编程序MASM的使用;熟练掌握连接程序LINK的使用。
任务:1、实验内容汇编语言程序设计上机过程如图1.1所示。
汇编语言程序上机过程〔一〕用编辑程序EDIT建立汇编语言源程序文件(ASM文件)在Windows 2000或者在Windows XP环境下鼠标单击“开始”→“运行”,在“运行”中输入“CMD”进入DOS模式,运行EDIT软件,例如:D> EDIT hello.ASM进入EDIT的程序编辑画面时,输入汇编语言源程序〔二〕用汇编程序MASM将ASM文件汇编成目标程序文件(OBJ文件)当源程序建立以后,仍以hello.asm程序为例,我们用汇编程序MASM对hello.asm源程序文件进行汇编,以便产生机器码的目标程序文件hello.obj〔三〕用连接程序LINK生成可执行程序文件(EXE文件)经汇编后产生的二进制的目标程序文件(OBJ文件)并不是可执行程序文件(EXE文件),必须经连接以后,才能成为可执行文件。
连接程序并不是专为汇编语言程序设计的。
如果一个程序是由假设干个模块组成的,也可通过连接程序LINK把它们连接在一起。
这些模块可以是汇编程序产生的目标文件,也可以是高级语言编译程序产生的目标文件。
〔四〕程序的执行当我们建立了可执行文件hello.EXE后,就可直接在DOS下执行该程序:C>二、原理1、汇编语言源程序的汇编过程汇编语言源程序的汇编过程是是利用汇编程序〔MASM〕对已编辑好的源程序文件〔.ASM〕进行汇编,将源程序文件中以ASCII码表示的助记符指令逐条翻译成机器码指令,并完成源程序中的伪指令所指出的各种操作,最后可以建立3个文件:扩展名为 .OBJ的目标文件、扩展名为 .LST 的列表文件和扩展名为 .CRF 的交叉索引文件。
uestc微机原理实验报告2
![uestc微机原理实验报告2](https://img.taocdn.com/s3/m/53dd8ee481c758f5f61f6712.png)
ldrr3,[r2]
orrr3,r3,#0x01e0
bicr3,r3,#0x01E0;按位清零
strr3,[r2] ;GPG8(即LED8) output0
ldrr0,=0xffffff;初始计数值
bldelay
;-------------实现LED5-LED8全部熄灭并调用延时-------------------
(二)LED C语言实验(选做)
八、实验数据及结果分析
ARM汇编控制LED实验:要求是实现一个流水灯,四个灯第一次点亮一个,第二次两个,第三次三个,第四次四个,然后全部熄灭。要实现这个程序,应该是在按位清零的时候对流水灯响应的位置清零就可以。
;GPIO寄存器宏定义
GPGCON EQU 0x56000060
4、在ledtest.s文件中添加汇编代码,点亮LED7,熄灭LED5,LED6,LED8,并调用延时。
5、在ledtest.s文件中添加汇编代码,点亮LED8,熄灭LED5,LED6,LED7,并调用延时。
6、在ledtest.s文件中添加汇编代码,实现LED5-LED8依次点亮。
7.连接好JTAG仿真板,一口与PC的并口相连,另一口与开发板的JTAG口相连,打开开发板电源。打开H-jtag程序,检测CPU,点击RVDS中的“Debug”,打开RVD进行硬件调试
;----------点亮LED5,LED6,LED7,熄灭LED8,并调用延时----
ldrr3,[r2]
orrr3,r3,#0x01e0
bicr3,r3,#0x00E0;按位清零
strr3,[r2];GPG7(即LED7) output0
西安交大微机原理第二次实验报告
![西安交大微机原理第二次实验报告](https://img.taocdn.com/s3/m/3c4f2810581b6bd97f19eaba.png)
微型计算机原理与接口技术第二次实验报告实验者姓名:实验者学号:所在班级:报告完成日期:20年月日实验四8255A并行接口实验一、实验目的1.学会通过PC总线、驱动器、译码器等在PC机外部扩充新的芯片。
2.了解8255A并行口的工作原理。
3.掌握8255A初始化的程序设计方法。
4.掌握8255A方式0的基本输入/输出和方式1的选通型输入/输出方式的使用方法。
二、实验内容1.[实验一]使8255A工作于方式0,将由C口读入的开关状态从A口输出到LED上显示出来。
接线方式:断开电源,将8255A的CS接I/O地址输出端288H~28FH,C口接逻辑电平开关K0~K7,A口接LED显示电路L0~L7。
2.[实验二]使8255工作于方式1,将由A口读入的状态从B口输出到LED上显示出来。
接线方式:断开电源,将8255A的CS接I/O地址输出端288H~28FH,A口接逻辑电平开关K0~K5,B口接LED显示电路L0~L5,C口相应位分别接开关或LED发光二极管。
三、程序及框图1.实验一:8255A工作于方式0[程序代码]PPIA EQU 288HPPIB EQU 289HPPIC EQU 28AHPPICTL EQU 28BHDATA SEGMENTMESS1 DB '8255A IN MODE 0!',0DH,0AH,'$'MESS2 DB 'ENTER ANY KEY RETURN TO DOS!',0DH,0AH,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET MESS1 ;数据段段寄存器结构MOV AH,09HINT 21H ;显示提示信息1MOV DX,OFFSET MESS2MOV AH,09HINT 21H ;显示提示信息2MOV AL,10001001BMOV DX,PPICTLOUT DX,ALCOUNT:MOV DX,PPIC ;8255A的C口读入数据IN AL,DXMOV DX,PPIA ;将数据送至8255A的A口输出OUT DX,ALMOV AH,06H ;若有键按下,则退出MOV DL,0FFHINT 21HJZ COUNTMOV AX,4C00HINT 21HCODE ENDSEND START[实验框图]2.实验二:8255A工作于方式1[程序代码]PPIA EQU 288HPPIB EQU 289HPPIC EQU 28AHPPICTL EQU 28BHDATA SEGMENTMESS1 DB '8255A IN MODE 0!',0DH,0AH,'$'MESS2 DB 'ENTER ANY KEY RETURN TO DOS!',0DH,0AH,'$' DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET MESS1MOV AH,09HINT 21HMOV DX,OFFSET MESS2MOV AH,09HINT 21HMOV AL,10111101BMOV DX,PPICTLOUT DX,ALCOUNT:MOV DX,PPIC ;从C口读入IBF(PC5)状态信号IN AL,DXAND AL,00100000B ;取PC5位来看JZ COUNT ;IBF=0,YES则跳COUNTMOV DX,PPIA ;从A口读入数据IN AL,DXPUSH AXRDC:MOV DX,PPIC ;从C口读入OBF(PC1)状态信号IN AL,DXAND AL,0000010B ;取PC1位来看JZ RDC ;IBF=0,YES则跳COUNTPOP AXMOV DX,PPIB ;向B口输出数据OUT DX,ALMOV AH,06HMOV DL,0FFHINT 21HJZ COUNTMOV AX,4C00HINT 21HCODE ENDSEND START[实验框图]四、实验结果及分析1.实验一:8255A工作于模式0按照连线要求,在TPC-ZK实验板上连好线。
微机原理实验报告2
![微机原理实验报告2](https://img.taocdn.com/s3/m/0b548d668e9951e79b892732.png)
(3) 将 LJMP LP1 改为 SJMP LP0,机器码为
,其中
为偏移量,它是
6、循环程序往往用 令 修改
传递数据,用 R7 控制循环 ,用指令 判断循环
,用调用 。 ,(08H)= ,(09H)=
作为循环体,用指
7、执行 ACALL 前(SP)= (PC)=
,执行 ACALL 时,(SP)=
组别
指导教师
实验程序:
实验室 K1-303 实验名称
时间
一、实验目的 1、掌握顺序结构程序设计。 2、掌握分支结构程序设计。 3、掌握控制转移类指令。 4、掌握子程序设计。 二、实验设备 DVCC 仿真系统一套、计算机一台 三、实验内容 1、SJMP、AJMP 和 LJMP 的区别 2、X、Y 以补码的形式存放在 20H、21H 中,编写程序实现如下函数:
实 验 报 告
专业 姓名 班级 学号
实验二 汇编语言程序设计
一个 码,01H~7FH 说明向 PC(增大、减小)方向跳,80H~FFH 说明向 PC(增大、 减小)方向跳,这说明 SJMP 可以在当前 PC 值 范围内无条件转移。 2、X、Y 以补码的形式存放在 20H、21H 中,编写程序实现如下函数:
论 年 教 师 批 阅 年 月 日 正是子程序的
,而堆栈中这两个单元存放的是 ,原 09H 的值弹给
执行到 RET 后,(SP)= 回断点继续执行主程序。 六、心得体会
, 原 08H 的值弹给
实验步骤及结果记录:
结
五、实验结果讨论 1、 数在计算机中是以 码形式存放的, 因此, 判断数据的正负, 往往采用判断第 位, 是 则 为正数,是 则为负数。 2、 程序一方法一中 JZ 的机器码为 ,其中 为偏移量,当前 PC 值 加上这个偏移 量等于 ,这正是即将执行的程序的首地址,即标号为 语句。程序计算器 PC 的功能 是 ,因此,跳转语句是依靠 来改变程序计算器 PC 的值,从而改变程序的流向。 3、 指令 CJNE 不仅可以判断数据是否相等,还可以通过 CY 的值,判断数据的大小,当 CY=1,则左操 作数 右操作数,CY=0,则左操作数 右操作数。 4、 分支程序一定要注意分支的语句标号的正确性,每一分支之间必须用 指令分隔,并跳转 到同一标号。 5、 子程序往往用 传递数据,内部 RAM 用 ,外部 RAM 用 ,绝对不能用直接 地址。最后以 结尾。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二定时器实验一、实验目的与要求利用定时器控制产生占空比可变的PWM波,通过实验验证进一步加强对定时器功能的认识,掌握定时器的使用方法。
1、用P1.0口输出PWM波,利用按键控制占空比的增加和降低,用示波器查看P1.0口的输出波形。
2、引导学生进行利用现有程序演示定时器动态显示数码管实验,了解数码管动态扫描方式。
二、实验注意事项1、启动KEIL软件,选择菜单“工程\新建工程”以建立工程(扩展名为.uv2,如T2a.uv2)。
2、选择菜单“文件\新文件”以建立一个新的文本编辑窗口,在窗口中输入参考源程序1并保存(扩展名为.asm),如test2a.asm,然后将其加入到源程序组1中。
3、在工程菜单的选项“目标1属性”中设置相应的选项,包括“输出\产生hex文件”选项以便汇编生成HEX代码供编程器使用,在“调试\使用KeilMonitor-51 Driver”的设置中选择相应的串口号。
4、使用“工程”中的“编译全部文件”完成相应的文件编译,如果程序格式正确将生成相应HEX代码文件,如T2a.hex。
如果提示有编译错误请自行修改源程序然后再重新编译。
5、用单根连线将P1.0(JP44)连接到8路指示灯部分(JP32)的LED0,将P1.6、P1.7(JP44)分别连接到JP37的K01、K02。
6、完成仿真器与计算机之间的连线并通电。
7、在KEIL软件中启动“调试\开启仿真模式”,然后用“运行”命令实现全速运行的仿真。
8、观察实验现象并分别依次按下K01、K02,观察并记录实验现象然后在KEIL软件中启动“中断运行-调试(debug)\关闭仿真模式”退出仿真,选择“工程\关闭工程”可关闭当前工程。
9、参考步骤1-4完成参考源程序2的建立与输入,如新项目T2b.uv2和新的源程序test2b.asm,完成编译与仿真设置。
10、用8PIN连线将P0口连接到数码管数据输入端,P2口连接到数码管控制端。
11、输入程序并仿真运行,注意数码管的显示内容。
12、根据参考源程序1和参考源程序2进行思考、修改和拓展,自行设计程序目标并编程验证。
13、本次实验主要连线如图三、实验内容1.利用定时器控制产生占空比可变的 PWM 波,通过按K01可PWMH值增加,则占空比增加,LED 灯渐暗。
按K2,PWM值减小,则占空比减少,LED 灯渐亮。
PWMH DATA 40H ;高电平脉冲的个数PWM DATA 41H ;PWM周期COUNTER DATA 42H ;TEMP DATA 43HOUTPWM EQU P1.0 ;PWM波输出引脚OUTPWMb EQU P1.1 ;PWM波输出引脚b,用于外接示波器探头INCKEY EQU P1.6 ;K01, PWMH值增加键。
DECKEY EQU P1.7 ;K02, PWMH值减小键。
ORG 0000HAJMP MAINORG 000BHAJMP INTT0ORG 0100HMAIN: MOV SP,#60H ;给堆栈指针赋初值MOV PWMH,#0bH ;赋初值MOV COUNTER,#01HMOV PWM, #15HMOV TMOD, #02H ;定时器0在模式2下工作MOV TL0, #38H ; 每200μs产生一次溢出MOV TH0, #38H ;自动重装初值SETB ET0 ;使能定时器0中断SETB EA ;使能总中断SETB TR0 ;开始计时KSCAN: SETB INCKEY ;端口输入状态,扫描按键SETB DECKEYJNB INCKEY,K1CHECK ;扫描K01,如果按下跳转到KEY1处理程序JNB DECKEY,K2CHECK ;扫描K02,如果按下跳转到KEY2处理程序SJMP KSCANK1CHECK: JB INCKEY,K1HANDLE;若按下K01后释放,跳转到KEY1处理程序,可考虑加延时去抖动程序SJMP K1CHECKK1HANDLE:MOV A,PWMH ;CJNE A,PWM,K1H0 ;判断是否到达上边界SJMP KSCAN ;是,则不进行任何操作K1H0: MOV A,PWMHINC ACJNE A,PWM,K1H1 ;如果在加1后到达最大值CLR TR0 ;定时器停止SETB OUTPWM ;置输出为高电平SETB OUTPWMbSJMP K1H2K1H1: CJNE A,#02H,K1H2 ;如果加1后到达下边界SETB TR0 ;重开定时器K1H2: INC PWMH ;增加占空比SJMP KSCANK2CHECK: JB DECKEY,K2HANDLE;若按下K02后释放,跳转到KEY1处理程序,可考虑加延时去抖动程序SJMP K2CHECKK2HANDLE: MOV A,PWMH ;CJNE A,#01H,K2H0 ;判断是否到达下边界,是,则不进行任何操作SJMP KSCAN ;K2H0: MOV A,PWMH ;MOV TEMP,PWMDEC ACJNE A,#01H,K2H1 ;如果在减1后到达下边界CLR TR0 ;定时器停止CLR OUTPWM ;输出为低电平CLR OUTPWMbSJMP K2H2K2H1: DEC TEMP ;CJNE A,TEMP,K2H2 ;如果到达上边界SETB TR0 ;启动定时器K2H2: DEC PWMHSJMP KSCAN ;降低占空比INTT0: PUSH PSWPUSH ACCINC COUNTERMOV A,COUNTERCJNE A,PWMH,INTT01CLR OUTPWMCLR OUTPWMbINTT01:CJNE A,PWM,INTT02MOV COUNTER,#01HSETB OUTPWMSETB OUTPWMbINTT02: P OP A CCPOP PSWRETIEND实验现象记录:(1)、每按一次K01,LED灯亮度变暗一些,同时示波器上显示负脉宽减少;每按一次K02,LED灯亮度变亮一些,同时示波器上显示负脉宽增加。
在连续按下K02的过程中,LED灯逐渐变亮至最亮,同时示波器上的波形和各参数变化如以下图形所示:初始状态:正占空比50%,正负脉宽各占一半。
K02作用1次,负脉宽变大,led灯变亮。
K02作用第2次,负脉宽继续变大,led灯继续变亮。
这符合预期现象。
(2)、连续按下K01时,负脉宽逐渐变小,LED灯亮度逐渐变暗,同时示波器上的波形和各参数变化如图所示:初始状态:正占空比50%,正负脉宽相等。
K01作用一次,,负脉宽减少,正脉宽增加,led灯变暗。
K01作用多次,负脉宽继续减少,正脉宽继续增加,led灯继续变暗。
符合实验预期现象。
实验现象分析:由实验代码可知,定时周期有20个,每按下一次K01,增加一个正占空比即增加5%的正占空比;每按下一次K02,增加一个负占空比即增加5%的负占空比。
当正占空比到100%或负占空比到100%时,跳到正占空比到0%或负占空比到0%的状态,一直循环下去。
2.数码管显示演示程序:在8个LED数码管上依次显示1,2,3,4,5,6,7,8。
引用端口:数码管数据p0,数码管控制p2;参考程序如下;DIS_DIGIT EQU 40H;位选通值, 传送到P2口用于选通当前数码管的数值,; 如等于0xfe时, 选通P2.0口数码管DIS_INDEX DATA 41H;显示索引, 用于标识当前显示的数码管和缓冲区的偏移量DIS_BUF DATA 50H;显于缓冲区起始地址ORG 0000HAJMP MAINORG 000BHAJMP INTT0ORG 0100HMAIN: MOV P0,#0FFH ; 初始化I/O口MOV P2,#0FFHMOV TMOD, #02H ;定时器0在模式2下工作MOV TL0, #38H ; 每200μs产生一次溢出MOV TH0, #38H ;自动重装初值SETB ET0 ;使能定时器0中断SETB EA ;使能总中断MOV DPTR, #DIS_CODE ; 设定显示初值为1-8MOV A,#1 ;初值为1,以后顺序加1MOVC A,@A+DPTRMOV DIS_BUF,AMOV A,#2MOVC A,@A+DPTRMOV DIS_BUF+01H,AMOV A,#3MOVC A,@A+DPTRMOV DIS_BUF+02H,AMOV A,#4MOVC A,@A+DPTRMOV DIS_BUF+03H,AMOV A,#5MOVC A,@A+DPTRMOV DIS_BUF+04H,AMOV A,#6MOVC A,@A+DPTRMOV DIS_BUF+05H,AMOV A,#7MOVC A,@A+DPTRMOV DIS_BUF+06H,AMOV A,#8MOVC A,@A+DPTRMOV DIS_BUF+07H,ADISPLAY: MOV DIS_DIGIT,#0FEH ; 初始从第一个数码管开始扫描MOV DIS_INDEX,#0SETB TR0 ; 启动定时器0,开始动态扫描显示MAIN_LP: NOP; 主程序循环,可增加其它代码以改变50H-57H中的值以改变显示内容SJMP MAIN_LP;=====================================================INTT0:; 定时器0中断服程序, 用于数码管的动态扫描PUSH ACCPUSH PSWMOV P2,#0FFH ; 先关闭所有数码管MOV A,#DIS_BUF ; 获得显示缓冲区基地址ADD A,DIS_INDEX ; 获得偏移量MOV R0,A ; R0 = 基地址 + 偏移量MOV A,@R0 ; 获得显示代码MOV P0,A ; 显示代码传送到P0口MOV P2,DIS_DIGIT ;MOV A,DIS_DIGIT; 位选通值左移, 下次中断时选通下一位数码管RL AMOV DIS_DIGIT,AINC DIS_INDEX; DIS_INDEX加1, 下次中断时显示下一位ANL DIS_INDEX,#0x07; 当DIS_INDEX等于8(0000 1000B)时, 清0POP PSWPOP ACCRETIDIS_CODE: DB 28h,7eh,0a2h,62h,74h,61h,21h,7ahDB 20h,60h,30h,25h,0a9h,26h,0a1h,0b1h;0-9和ABCDEF的数码管显示代码END实验现象如图所示:四、思考题1.试根据参考程序1中PWM波控制周期的大小进行验算,调整定时时间初值并进行调试验算,使PWM波控制周期为N ms(其中N值为学号的最后两位数值,如恰好是00则取值为50)。
答:我的学号最后两位数字为14,PWM波控制周期应为14ms.由公式(模数-初值)*(12/晶振)= T 得,(模数-初值)*(12/22.1184)= (14/20)*1000(模式-初值)=1283在模式2下能产生这个数,修改部分代码即可。