微机原理第二次实验报告

合集下载

《微机原理及接口技术》实验报告2

《微机原理及接口技术》实验报告2

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篇)

第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)学习微机中断处理在接口技术中的应用。

西电微机原理实验报告

西电微机原理实验报告

微机系统实验报告班级: 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)掌握不同进制数及编码相互转换的程序设计方法。

微机原理分正负的实习报告

微机原理分正负的实习报告

微机原理实习报告一、实习目的与意义本次微机原理实习旨在让我们更好地理解和掌握微机原理的基本知识,培养我们动手能力和实际操作技能,提高我们的综合素质和工程实践能力。

二、实习内容与过程在实习过程中,我们主要学习了微机原理的基本知识,包括微机系统组成、微处理器结构、指令系统、存储器、输入输出接口等方面。

同时,我们还进行了实际的操作,包括编程、电路连接、故障排查等。

具体来说,我们首先学习了微机系统组成,了解了微机系统的基本构成和各部分的作用。

然后,我们学习了微处理器结构,了解了微处理器的内部结构和各部分的功能。

接着,我们学习了指令系统,了解了指令的格式和分类,并学会了编写简单的程序。

此外,我们还学习了存储器和输入输出接口,了解了存储器的分类和特点,以及输入输出接口的功能和应用。

在实际操作方面,我们首先学习了编程,掌握了基本的编程语言和编程方法。

然后,我们进行了电路连接,学会了使用电子仪器和工具,了解了电路连接的方法和注意事项。

最后,我们进行了故障排查,学会了诊断和解决电子设备中常见的问题。

三、实习成果与收获通过本次实习,我深入理解了微机原理的基本知识,掌握了微机系统组成、微处理器结构、指令系统、存储器、输入输出接口等方面的知识。

同时,我也提高了自己的动手能力和实际操作技能,学会了编程、电路连接、故障排查等实际操作。

通过本次实习,我深刻认识到了微机原理在现代工程中的重要性,也体会到了工程实践的乐趣和意义。

我相信,本次实习对我的专业学习和未来的工程实践都将产生积极的影响。

四、实习总结本次微机原理实习让我受益匪浅,不仅让我掌握了微机原理的基本知识,也提高了我的动手能力和实际操作技能。

同时,我也深刻认识到了微机原理在现代工程中的重要性。

我相信,这次实习对我的学习和未来的工作都将产生积极的影响。

新版西电微机原理第二次上机实验报告-新版-精选.pdf

新版西电微机原理第二次上机实验报告-新版-精选.pdf

西电微机原理第二次上机实验报告学号:姓名:一、实验目的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

实验一汇编语言的编译、链接和调试一、实验目的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的文件。

微机原理与接口技术实验报告二

微机原理与接口技术实验报告二

微机原理与接口技术实验报告(二)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

北京工业大学微机原理实验报告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个数中的最大值并保存。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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下能产生这个数,修改部分代码即可。

相关文档
最新文档