




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、. 四川大学网络教育学院 实践课程报告实践课程 计算机综合实践 校外学习中心 专 业 电气工程及其自动化 层 次 专升本 年 级 10秋 学生姓名 学 号 2013年 9 月 18 日实验一 熟悉、使用DEBUG调试工具一 实验目的:1 了解并逐步熟悉汇编语言的编辑方法及特点.2 复习8088汇编语言的段结构、常用的指令与伪指令、存储空间的分配等。3 掌握汇编语言的编辑、汇编及连接的过程。4 了解并逐步掌握运用DEBUG进行调试汇编语言程序。二 实验内容:1 运用8086汇编语言,编辑多字节非压缩型BCD数除法的简单程序,文件名取为*.ASM。2 运用MASMEXE文件进行汇编,修改发现的各种
2、语法错误,直至正确,形成*.OBJ文件。3 运用LINK.EXE文件进行连接,形成*.EXE文件。4 仔细阅读附录中的DEBUG部分,掌握各种命令的所有方法。5 运用DEBUG。EXE文件进行调试,使用单步执行命令T两次,观察寄存器中内容的变化,使用察看存储器数据段命令D,观察存储器数据段内数值。6 再使用连续执行命令G,执行程序,检查结果是否正确,若不正确可使用DEBUG的设置断点,单步执行等功能发现错误所在并加以改正。程序清单:多字节非压缩型BCD数除法 (88754/6=14792)DATASEGMENTADB8,8,7,5,4BDB6CDB 5DUP (0)NEQU5DATAENDSC
3、ODESEGMENTASSUMECS:CODE;DS:DATA;ES:DATA,STARTMOVAX,DATAMOVDS,AXMOVES,AXCLDLEASI,ALEBDI,CMOVCX,NMOVAH,0LP1:LODSBAADDIVBSTOSBLOOPLP1MOVCX,NLEADI,CLP2:MOVDL,DI MOVAH,2 开始INT21HDECDI 设置被除数、商的地址指针LOOPLP2 设置单位除法次数计数器MOVAH,4CHINT21H 取被除数一位作十进制调整CODE:ENDSENDSTART 作字节除法、存商 N 被除数各位已除完? Y显示运算结果 结束 三、实验体会 通过本次实
4、验,我了解了汇编语言的编辑方法及特点,掌握汇编语言的编辑、汇编及连接的过程,并逐步掌握运用DEBUG进行调试汇编语言程序。但对其的熟悉程度和应用还远远不够,因此需要经过加强练习,提高水平。实验二 设计汇编语言程序一 实验内容1、字符串统计程序设计 2、双字乘法程序设计二 实验内容1 字符串统计。 在数据段中建立一个缓冲区BUFFER,变量VER,编程使得程序具有如下功能:从键盘输入一个子字符串存入VER,从键盘输入包含一个或几个子字符串的字符串存入BUFFER。统计BUFFER中的字符串含有多少个子字符串以及每个子字符串的位置。2 双字乘法程序。设计一个程序实现32位带符号双精度数乘法运算。由
5、于只有8位和16位的乘法指令。因此32位乘法运算是不能直接用指令实现的。但可以用16位乘法指令,通过 4次想乘然后把部分积想加。对于带符号数,可以先根据绝对值求得积。然后判断积的符号,若积为负数,应将其用补码表示。三 实验流程与程序: 子程序入口 AXNUM1 开始 DX:AXAX*NUM2 乘积符号标志SIGN=0 MRLTAX,MRLT+2DX 被乘数0 ? Y AXNUM1+2 N 被乘数取补 DX:AXAX*NUM2 SIGN标志取反 MRLT+2AX+MRLT+2,MRLT+4DX+C 乘数0 ? Y AXNUM1 N 乘数取补 DX:AXAX*NUM2+2 SIGN标志取反 MRL
6、T+2AX+MRLT+2,MRLT+4DX+C调用32位无符号乘法子程序 保存进位 SIGN=0 ? Y AXNUM1+2 N 乘积取补 DX:AXAX*NUM2+2 结束 恢复进位 32位带符号数乘法流程图 MRLT+4AX+MRLT+4,MRLT+6DX+C RET 32位无符号乘法子程序流程图data segmentioportequ 0d400h-0280hio8253aequ ioport+280hio8253bequ ioport+283hio8255aequ ioport+288hio8255bequ ioport+28bhio0832aequ ioport+290hdata1
7、db 80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdh db 0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96h db 80h,66h,4eh,38h,25h,15h,09h,04h db 00h,04h,09h,15h,25h,38h,4eh,66h;正弦波数据time db 120,106,94,89,79,70,63,59;发不同音时8253的计数器初值msg db Press 1,2,3,4,5,6,7,8,ESC:,0dh,0ah,$num db ?;num为8253计数器初值的序号data endscode segment ass
8、ume cs:code,ds:datastart:mov ax,datamov ds,axmov dx,offset msgmov ah,9int 21h ;显示提示信息sss:mov ah,7int 21h ;从键盘接收字符,不回显cmp al,1bhje exit ;若为ESC键,则转EXITcmp al,31hjl ssscmp al,38hjg sss ;若不在1-8之间转ssssub al,31hmov num,al ;求出相应的时间常数的序号mov cx,60 ;取60次32个正弦波数据ddd:mov si,0lll:mov al,data1si ;取正弦波数据mov dx,io0
9、832aout dx,al ;放音call delay ;调延时子程序inc sicmp si,32 ;是否取完32个数据jl lll ;若没有,则继续loop ddd ;总循环次数60是否完,没有,则继续jmp sssexit:mov ah,4chint 21hdelay proc near ;延时子程序ccc:mov bx,offset timemov dx,io8253b ;置8253通道0为方式0工作mov al,10hout dx,almov dx,io8255b ;设8255A口输入mov al,9bhout dx,almov al,num ;取相应的时间常数xlatmov dx,
10、io8253aout dx,al ;向8253通道0输出kkk:mov dx,io8255ain al,dx ;从8255A口读一字节test al,01 ;判PA0口是否为1jz kkk ;若不为1,则转KKKret ;子程序返回delay endpcode endsend start四、实验体会 编辑程序有很多种,但按功能划分,主要有两大类。一类是行编辑程序,如EDIT编辑程序;另一类是全屏幕编辑程序如Quick Edit(QE)。行编辑程序功能较弱,不如全屏幕编辑程序方便、灵活。 实验三 8253定时器/计数器接口与数字电子琴一、实验目的 改变定时器2的计数值来改变声音频率,通过编程来获
11、得声调(频率)和节奏(延时长短),使计算机演奏出乐曲来。二、实验原理 PC机的主机箱上装有一只小喇叭,由定时器8253和并行接口芯片8255控制其发音,其电路如下: 8253 DRIVER 19318MHZ CLK OUT2 8255 PB0 GATE2 PB1 8253用定时器2来产生896Hz的音频信号使喇叭发声,我们可以改变定时器2的计数值来改变声音频率,通过发声的延时程序来获得时间长短不同的声音,于是就可以通过编程;来获得声调(频率)和节奏(延时长短),使计算机演奏出乐曲来。如果再把音符1,2,3,4, . . .5,6,7,1,2,3,与数字键1,2,3,4,5,6,7,8,9,对应
12、起来,就可以把计算机变成电子琴。以下给出有关资料: 1音符 1, 2, 3, 4 ,5 ,6, 7, 1, 2, 3, 4, 5, 6, 7, 频率 131 147 165 175 196 220 247 262 294 330 349 392 440 494 5232计数值计算公式 计数值=1.19318MHz(时钟频率)/ 给定频率 =1234DCH / 给定频率 8253道地地定时器通道2的端口地址:42H(存放计数值,先送低位字节,后送高位字节) 命令寄存器地址:43H4实验程序:1) 计算计数值程序段:MOV DI, 给定频率 MOV DX, 12HMOV AX, 34DCHDIV
13、DIAX中即为计数值。2) 打开扬声器发声,8255PB0,PBI送出高电平:IN AL 61HOR AL 3OUT 61H AL3)关闭扬声器,停止发声:IN AL 61HOR AL 0FCHOUT 61H AL三 实验体会 实验刚开始有点不知如何下手,经过请教别人和网上查找资料,慢慢有了思路。通过学习和研究利用8253定时器/计数器的特点和功能,应用编程知识慢慢调试,最终编出音乐来。获得实验成功的时候,觉得知识在生活中的应用真是太美妙了!以后将学着去编出其他曲目的程序来。 实验四 实时时钟实验一、实验目的 设计一个时钟显示程序,要求利用定时器0的定时中断记录时间。二、 实验原理PC机中82
14、53定时器0是作为系统时钟的定时中断使用的,它被设置为每秒产生18。2次定时中断。用户可以改写中断向量表,使这个0级中断转入自己的定时服务程序中去,也可以重新初始化该计数器,使之产生用户所需要的定时中断,这样就可以在计算机控制系统中用来定时采样压力,温度等等被控制参数,然后进行开环或闭环控制。BIOS在初始化8253定时器以后,给用户留下了一个INT 1CH的软件接口,其处理程序只是一条空操作返回指令,用户可以将其入口地址填入中断向量表1CH型中断向量,使得一进入1CH型中断,便立即执行用户自己的程序,执行完又返回中断服务程序继续执行第二种方式是重新设置定时器0,使其工作在方式3,装入计数值1
15、1932,使其每10ms发一次定时中断。由于定时器0的中断类型号是08H,所以应将用户的中断服务程序入口地址填入中断向量表的08H向量中。三、 实验内容:1 用第二种方式重新设置定时器0,使其工作在方式3(控制寄存器地址43H),装入计数值11932(端口地址40H),使超10ms产生一次中断;2 设计一个时钟显示程序,要求利用定时器0的定时中断记录时间,然后以hh:mm:ss的形式在屏幕上显示出来(hh是小时,mm是分,ss是秒),每秒钟显示一次,而且必须在同一位置显示,才能看见变化数位的数字跳动。3 将程序的入口地址写入中断向量08H,注意在写入前,必须设置一个变量将原中断向量保存起来,以
16、便在程序结束时恢复。4 程序中要设计输入正确计时点(当前时间值)的方法。5 按ESC键推出,返回DOS。(注意:要恢复原来的中断向量,此功能才能实现)。6 程序中允许时钟和键盘中断。四、简略流程图。开始利用PSP参数区存放命令行参数读按键(当前时间与命令行参数相 定时中断子程序入口等时,按回车,程序向下执行) 保存原08H型中断向量 改变时分秒计数值 写入新的中断向量 并以ASCII码形式形成 显示字符串 初始化8253通道0, 使其工作在 方式3, 每10ms发一次中断 IRET 检查秒计数值改变否,若改变在 同一位置显示时间,否则不显示 定时中断子程序流程图 有键按下否? N Y 恢复原中
17、断向量 返回DOS 主程序流程图五、实验程序 1、利用RTC的增量功能进行1s的定时,当定时时间到,取反LED控制#include config.h#define LED1CON 0x00000400 /*P0.10口为LED1控制器*/*定义Fpclk值,用于设置串口波特率*/#define FPCLK 3686250L2、初始化实时时钟void RTCIni(void) PREINT=FPCLK/32768-1; /设置预分频器 PREFRAC=FPCLK-(FPCLK/32768)*32768; YEAR=2005; /初始化年 MONTH=6; /初始化月 DOM=10; /初始化日
18、CIIR=0x01; /设置秒值的增量产生一次中断 CCR=0x01; /启动RTC3、使用RTC的秒增量中断功能控制LED闪动int main(void) PINSEL0=0x00000000; /引脚连接设置 PINSEL1=0x00000000; IODIR=LED1CON; RTCIni(); /初始化RTC while(1) IOSET=LED1CON; /熄灭LED1 while(0=(ILR&0x01); /等待RTC增量中断标志 ILR=0x01; /清除中断标志 IOCLR=LED1CON; /点亮LED1 while(0=(ILR&0x01); ILR=0x01; retu
19、rn(0);4、运行rtc进行计时,并将所计时间值不断地通过串口向上位机发送#include config.h#define LED1CON 0x00000400 /*P0.10口为LED1控制端*/* 定义Fpclk值,用于设置串口波特率*/#define FPCLK 2764800L/*定义串口模式设置数据结构*/typedef struct UartMode uint8 datab; /字长度,5/6/7/8 uint8 stopb; /停止位,1/2 uint8 parity; /奇偶校验位,0为无校验,1为奇数校验,2为偶数校验 UARTMODE;uint8 send_buf16;
20、/UART0数据接收缓冲区 5、初始化串口0,设置其工作模式及波特率入口参数: baud 波特率 set 模式设置(UARTMODE数据结构)出口参数: 返回值为1时表示初始化成功,为0时表示参数出错uint8 UART0_Ini(uint32 baud, UARTMODE set) uint32 bak; /*参数过滤*/ if (0=baud)|(baud115200)return(0); if (set.datab8)return(0); if (0=set.stopb)|(set.stopb2)return(0); if (set.parity4)return(0); /*设置串口波特
21、率*/ U0LCR=0x80; /DLAB位置1 bak=(FPCLK4)/baud; U0DLM=bak8; U0DLL=bak&0xff; /*设置串口模式*/ bak=set.datab-5; /设置字长度 if(2=set.stopb)bak|=0x04; /判断是否为2位停止位 if(0!=set.parity)set.parity=set.parity-1; bak|=0x08; bak|=set.parity4; /设置奇偶校验 U0LCR=bak; return(1);6、向串口发送字节数据,并等待发送完毕void SendByte(uint8 data) U0THR=data
22、; /发送数据 while(U0LSR&0x20)=0); /等待数据发送 7、将缓冲区的数据发送回主机入口参数: buf 数据缓冲区 no 发送数据的个数出口参数: 无void ISendBuf(uint8 const *buf,uint8 no) uint8 i; for(i=0;i16)&0x1F; /取得时的值 send_buf0=bak/10+0; send_buf1=bak%10+0; send_buf2=:; bak=(times8)&0x3F; /取得分的值 send_buf3=bak/10+0; send_buf4=bak%10+0; send_buf5=:; bak=tim
23、es&0x3F; /取得秒的值 send_buf6=bak/10+0; send_buf7=bak%10+0; send_buf8=n; ISendBuf(MESSAGE,14); /发送数据 ISendBuf(send_buf,9); 9、初始化实时时钟void RTCIni(void) PREINT=FPCLK/32768-1; /设置预分频器 PREFRAC=FPCLK-(FPCLK/32768)*32768; YEAR=2005; /初始化年 MONTH=6; /初始化月 DOM=10; /初始化日 HOUR=8; MIN=30; SEC=0; CIIR=0x01; /设置秒值的增量产
24、生一次中断 CCR=0x01; /启动RTC 10、读取实时时钟的值,并从串口发送出去int main(void) UARTMODE uart0_set; PINSEL0=0x00000005; /设置I/O连接到UART0 PINSEL1=0x00000000; IODIR=LED1CON; /设置LED1控制口为输出,其它I/O为输入 uart0_set.datab=8; /8位数据位 uart0_set.stopb=1; /1位停止位 uart0_set.parity=0; /无奇偶校验位 UART0_Ini(9600,uart0_set); /初始化串口模式 U0FCR=0x01; /
25、使能FIFO RTCIni(); /初始化RTC while(1) IOSET=LED1CON; /熄灭LED while(0=(ILR&0x01); /等待RTC增量中断标志位 ILR=0x01; /清除中断标志位 SendTimeRtc(); /读取时钟值,并向UART0发送 IOCLR=LED1CON; /点亮LED while(0=(ILR&0x01); ILR=0x01; SendTimeRtc(); return(0);六、实验体会本次实验,使我对微机软硬件结合有了进一步的了解。原来并不太清楚是什么意思,一直都很模糊,听课本也是很迷茫;而之前的那些单元实验,也没有都做好。之前做的实
26、验,由于大部分是验证性的,所以就很被动地去做,甚至并没有想为什么要那样连电路,内部的代码更没有认真看。这次,因为要自己去设计整个过程,所以就不得不去了解学习自己原来并没有真正弄懂的东西。这也使我对前面所做的实验有了原理性的了解,回头看一些实验,也知其然其所以然了。同时对课本上讲的一些内容,不再像以前那样觉得抽象,通过这次设计,有了具体的理解。实验五、8255并行接口键盘实验一、实验目的1、掌握8255A的功能及方式0、1的实现2、熟悉8255A与CPU的接口,以及传输数据的工作原理及编程方法。3、利用09H型中断设计一个自己的键盘中断服务程序,程序设计应考虑在退出时不破坏原有的设置。二、实验内
27、容与过程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表示控制寄存器中存放的是工作方式
28、选择字,D7=0表示控制寄存器中存放的是C口置位/复位控制字。3 、C口置/复位控制字8255的C口可进行位操作,即:可对8255C口的每一位进行置位或清零操作,该操作是通过设置C口置/复位字实现的(图8-10)。C口置/复位字共8位,各位含义如下:4、 命令字与初始化编程8255有两个命令字,即方式选择控制字和C口置0/置1控制字,初始化编程的步骤是: 向8255控制寄存器写入“方式选择控制字”,从而预置端口的工作方式。 当端口预置为方式1或方式2时,再向控制寄存器写入“C口置0/置1控制字”。这一操作的主要目的是使相应端口的中断允许触发器置0,从而禁止中断,或者使相应端口的中断允许触发器置
29、1,从而允许端口提出中断请求。 注意:“C口置0/置1控制字”虽然是对C口进行操作,但是该控制字是命令字,所以要写入控制寄存器,而不是写入C口控制寄存器。 向8255数据寄存器写入“数据”或从8255数据寄存器读出“数据”。三、实验操作过程键盘驱动的主要作用就是实时监测外部按键中断,一旦发现外部有键按下就向内核发送键盘消息实现键盘输入功能。键盘驱动创建了中断服务线程和4个键盘中断事件,每行按键对应一个键盘中断事件。有键被按下时,中断服务例程得到对应的中断标识符并报告给系统任务调度进程,同时产生键盘中断事件,键盘中断服务线程响应键盘中断事件,开始扫描矩阵键盘。根据产生的中断事件类型不同,可以首先
30、确定被按下键的行位置。由于键盘被按下后,该键对应的行和列被连通,因此根据判断各列对应的I/O口的电平,可以得到被按下键的列位置;得到按键的准确位置后,通过向操作系统发送键盘消息KEYBD_EVENT,实现一次键盘输入。循环扫描键盘,直到按键被弹起则发送KEYEVENTF_KEYUP事件。响应键盘中断输入的整个流程如图。1、 在OAL层加入中断源矩阵键盘采用4路I/O口中断,每路中断对应1个中断源。矩阵键盘驱动首先要在OAL层加入这些中断源。以其中一路中断为例:#define SYSINTR_KEYONE(SYSINTR_FIRMWARE+0)2 、中断服务例程(ISR)设计本键盘驱动将GPIO_6、GPIO_7、GPIO_16、GPIO_17四个I/O口作为中断I/O口。有键被按下时将产生一个I/O中断,内核首先进入异常中断处理程序,由它屏蔽所有中断,再调用中断服务例程ISR得到该中断的逻辑中断标识。鉴于ISR的任务比较单一,ISR通常都要求越短、越快越好。矩阵键盘驱动的ISR设计如下:if(v_pGPIORegGEDR_x & GPIO_6) /中断触发 v_pGPIORegGEDR_x = GPIO_6;/清除中断 return SYSINTR_KEYONE;/返回中断标识其他三路中断的ISR设计与此类似。3、中断
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位工勤技能-河北-河北医技工二级(技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-江苏-江苏家禽饲养员四级(中级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-江苏-江苏仓库管理员一级(高级技师)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-广西-广西计算机操作员三级(高级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东防疫员三级(高级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东汽车驾驶与维修员五级(初级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-广东-广东有线广播电视机务员三级(高级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东地图绘制员三级(高级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-安徽-安徽中式烹调师二级(技师)历年参考题库典型考点含答案解析
- 2025年银行金融类-金融考试-银行业专业人员中级(法规+银行管理)历年参考题库含答案解析
- 先天性甲状腺功能减退症诊治指南解读课件
- 2025至2030中国裸眼3D行业产业运行态势及投资规划深度研究报告
- 检修安全监护管理制度
- 产科工作管理制度
- 初中历史教师业务考试试题及答案
- 导尿管相关尿路感染预防与控制试题(附答案)
- 中医烧伤课件
- 2025-2030中国水下混凝土行业市场发展趋势与前景展望战略研究报告
- GB/T 30134-2025冷库管理规范
- 2025年心理咨询师基础理论知识测试卷:心理咨询心理学理论体系试题
- 急诊患者安全管理
评论
0/150
提交评论