计算机原理实验报告_大连理工大学
大连理工大学计算机原理实验三报告

大连理工大学实验报告实验室(房间号):420 实验台号码: 4 班级:电子1303 姓名:指导教师签字:成绩:实验三显示程序编程训练一、实验目的和要求1、熟悉汇编语言的使用。
2、掌握十进制的运算、设计显示程序运行结果的格式3、熟练掌握DOS功能调用二、实验内容编写程序,求30个同学成绩的平均分数,将结果显示在屏幕上。
显示格式要求如下:第一行显示:my name is 姓名+学号第二行显示:30个同学的成绩第二行显示:The average score is 求得的平均分数。
三、实验算法1、将ASCII码表示的数转换二进制表示,并求和、求平均数,在将平均数转换为ASCII码,在屏幕上显示。
2、显示字符串信息用DOS功能调用INT 21H,功能号为09H。
3、显示平均数结果时,用DOS功能调用INT 21H,功能号为02H。
四、实验流程图五、程序清单data segmentbuf dw 80,100,100,80,75,66,58,100,69,95dw32,80,88,92,76,52,78,50,12,60dw5,11,85,79,70,97,22,38,74,33count equ($-buf)/2data1 dw ?data2db ?data3db ?data4db ?data5db ?buf1 db ' my name is litong 201383081',0dh,0ah,'$'buf2 db 0dh,0ah,'$'buf3 db ' The average score is ','$'buf4 db ' 80,100,100,80,75,66,58,100,69,95 ',0AH,0DH,'$'buf5db' 32,80,88,92,76,52,78,50,12,60 ',0AH,0DH,'$'buf6db' 5,11,85,79,70,97,22,38,74,33 ',0AH,0DH,'$'data endsssg1 segmentdw 100 dup(?)ssg1 endscode segmentassume cs:code,ds:data,ss:ssg1main: mov ax,datamov ds,axlea dx,buf1 ;输出buf1中的字符串mov ah,09hint21hcall accum ;accumulatino from buf to data1call average ;average from data1 to data2call conver ;with data2 conver to bcd(to data3-5)lea dx,buf4 ;输出30个学生的成绩mov a h,09hint21hlea dx,buf5mov ah,09hint21hlea dx,buf6mov ah,09hint21hlea dx,buf3mov ah,09hint21hlop3: mov si,offset data3mov al,ds:[si]and al,0f0hmov cl,04hshr al,cladd al,30hmov dl,almov al,ds:[si]and al,0fhadd al,30hmov dl,almov ah,02hint21Hlop4: mov si,offset data4mov al,ds:[si]and al,0f0hmov cl,04hshr al,cladd al,30hmov dl,almov al,ds:[si]and al,0fhadd al,30hmov dl,almov ah,02hint21Hlop5: mov si,offset data5mov al,ds:[si]and al,0f0hmov cl,04hshr al,cladd al,30hmov dl,almov al,ds:[si]and al,0fhadd al,30hmov dl,almov ah,02hint21Hlea dx,buf2mov ah,09hint21hlop22: mov ax,4c00h ; to DOSint 21hconver: mov al,data2;把data2中的数据转换成BCD码mov ah,0mov bl,100div blmov data3,almov al,ahmov ah,0mov bl,10div blmov data4,almov data5,ahretaccum: mov cx,countmov ax,0lea bx,buflop:add ax,[bx];累加add bx,2loop lopmov data1,axretaverage: mov ax,data1;求平均值mov bl,countdiv blmov data2,alretcode endsend main六、实验结果与分析运行程序,得到如下结果,说明程序达到了设计要求。
大连理工大学计算机原理实验报告

目录1 实验任务 (1)2 设计方案 (1)3 设计电路 (3)4设计程序 (5)5 遇到的问题 (2)(1)程序语法方面 (2)(2)运行逻辑方面 (2)(3)软件使用方面 (2)6 何解决问题 (2)(1)程序语法方面 (2)1)寄存器使用时,数据类型不匹配: (2)2)程序越来越大的时候,程序结构混乱: (2)3)基本操作的要求: (3)4)对于中断服务程序、堆栈段以及中断STI指令的理解: (3)(2)运行逻辑方面 (3)1)电梯加速减速在一楼到二楼的特殊情况的考虑问题: (3)2)电梯运行方式的确定问题: (4)3)电梯连续运行时,各种参数的转换问题: (5)4)对于电梯实时运行显示的显示逻辑问题: (5)(3)软件使用方面 (5)1)在使用软件的时候,对于软件设置断点,以及使用断点的问题: (5)2)在软件使用中,经常出现的USB端口缺失,以及软件程序不能发送到实验板中的问题: (6)7 实验体会 (6)1 实验任务本次实验通过汇编语言编程,基本实现电梯的功能:通过在实验板的8位开关进行选择需要到的楼层,步进电机进行旋转,250个脉冲为一层,即电机旋转5.2圈为一层,每次启动,电机由速度为0加速启动,加速到最大速度时,正好达到二楼。
到达目的楼层之前,在距离楼层半层时开始减速,准确到达楼层时停止转动。
其中,当运动为一层时,电梯仅仅加速到最大速度的一半,然后减速,到达目的楼层。
在每次到达目的楼层之后,继续修改目的楼层,可以连续工作。
在工作的过程中,通过数码管实时显示当前的楼层,同时通过LED灯也实时显示楼层情况。
2 设计方案(1)电梯电机驱动部分通过地址200H选中8254定时器芯片,使用定时器0和定时器1对实验板上的1MHz脉冲信号进行分频,通过两个定时器进行分频,之后out1给中断控制器8259,触发中断,在中断中进行参数spnum的自加,在通过这个变量的数值大小与主程序speed的比较来决定主程序是否对步进电机发出相序信号,使其开始转动。
大连理工大学软件学院计算机组成原理实验一位全加器VHDL语言实现

大连理工大学软件学院计算机组成原理实验一位全加器VHDL语言实现第一篇:大连理工大学软件学院计算机组成原理实验一位全加器VHDL语言实现----------------------Company:--Engineer:----Create Date:18:35:51 04/08/2013--Design Name:--Module Name:testssFile Created--Additional Comments:----------------------library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;----Uncomment the following library declaration if instantiating----any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;entity testss isPort(end testss;a,b,ci : inSTD_LOGIC;s,c : outSTD_LOGIC);architecture Behavioral of testss issignal x,y:std_logic;beginx <= a xor b;y <= x and ci;s <= x xor ci;c <= y or(a and b);end Behavioral;第二篇:计算机组成原理实验ALU设计module ALU(ALU_OP,AB_SW,F_LED_SW,LED);input[2:0] ALU_OP,AB_SW,F_LED_SW;output[7:0] LED;reg[7:0] LED;reg[31:0] A,B,F;reg OF,ZF;always@(*)beginendalways@(*)beginZF=0;OF=0;case(ALU_OP)3'b000: begin F=A&B;end 3'b001: begin F=A|B;end 3'b010: begin F=A^B;end 3'b011: begin F=~(A|B);end 3'b100: begin {OF,F}=A+B;OF=OF^F[31];end 3'b101: begin {OF,F}=A-B;OF=OF^F[31];end 3'b110: begin F=A3'b000: begin A=32'h0000_0000;B=32'h0000_0000;end 3'b001: begin A=32'h0000_0003;B=32'h0000_0607;end 3'b010: begin A=32'h8000_0000;B=32'h8000_0000;end 3'b011: begin A=32'h7FFF_FFFF;B=32'h7FFF_FFFF;end 3'b100: begin A=32'h8000_0000;B=32'hFFFF_FFFF;end 3'b101: begin A=32'hFFFF_FFFF;B=32'h8000_0000;end 3'b110: begin A=32'h1234_5678;B=32'h3333_2222;end 3'b111: begin A=32'h9ABC_DEF0;B=32'h1111_2222;end endcase endcase if(F==32'b0)ZF=1;endalways@(*)beginend case(F_LED_SW)3'b000: LED=F[7:0];3'b001: LED=F[15:8];3'b010: LED=F[23:16];3'b011: LED=F[31:24];default:begin LED[7]=ZF;LED[0]=OF;LED[6:1]=6'b0;end endcaseendmodule 管脚配置NET “AB_SW[0]” LOC = T10;NET “AB_SW[1]” LOC = T9;NET “AB_SW[2]” LOC = V9;NET “ALU_OP[0]” LOC = M8;NET “ALU_OP[1]” LOC = N8;NET “ALU_OP[2]” LOC = U8;NET “F_LED_SW[0]” LOC = V8;NET “F_LED_SW[1]” LOC = T5;NET “F_LED_SW[2]” LOC = B8;NET “LED[0]” LOC = U16;NET “LED[1]” LOC = V16;NET “LED[2]” LOC = U15;NET “LED[3]” LOC = V15;NET “LED[4]” LOC = M11;NET “LED[5]” LOC = N11;NET “LED[6]” LOC = R11;NET “LED[7]” LOC = T11;寄存器 module jicunqi(input Clk, input Reset, input [4:0] Reg_Addr, input Write_Reg, input [1:0] Sel, input AB, output reg [7:0] LED);reg [31:0] W_Data;wire [31:0] R_Data_A,R_Data_B,LED_Data;REGRU1(Clk,Reset,Reg_Addr,Reg_Addr,Reg_Addr,W_Data,Write_Reg,R_Data_A,R_Data_B);assign LED_Data=AB?R_Data_A : R_Data_B;always @(*)beginW_Data=32'h0000_0000;LED=8'b0000_0000;if(Write_Reg)begincase(Sel)2'b00: W_Data= 32'h1234_5678;2'b01: W_Data= 32'h89AB_CDEF;2'b10: W_Data= 32'h7FFF_FFFF;2'b11: W_Data= 32'hFFFF_FFFF;endcase end elsebegincase(Sel)2'b00: LED=LED_Data[7:0];2'b01: LED=LED_Data[15:8];2'b10: LED=LED_Data[23:16];2'b11: LED=LED_Data[31:24];endcase end end endmodule `timescale 1ns / 1ps // REG.v module REG(input Clk, input Reset, input [4:0] R_Addr_A, input[4:0] R_Addr_B, input [4:0] W_Addr, input [31:0] W_Data, input Write_Reg, output [31:0] R_Data_A, output [31:0] R_Data_B);reg [31:0] REG_Files[0:31];integer i;assign R_Data_A=REG_Files[R_Addr_A];assign R_Data_B=REG_Files[R_Addr_B];always @(posedge Clk or posedge Reset)beginif(Reset)beginfor(i=0;i<=31;i=i+1)REG_Files[i]<=32'h0000_0000;endelsebeginif(Write_Reg)beginREG_Files[W_Addr]<=W_Data;end end end endmodule管脚配置NET “Clk” LOC=“C9”;NET “Reset” LOC=“D9”;NET “Reg_Addr[4]” LOC=“T5”;NET “Reg_Addr[3]” LOC=“V8”;NET “Reg_Addr[2]” LOC=“U8”;NET “Reg_Addr[1]” LOC=“N8”;NET “Reg_Addr[0]” LOC=“M8”;NET “Write_Reg” LOC=“V9”;NET “Sel[1]” LOC=“T9”;NET “Sel[0]” LOC=“T10”;NET “AB” LOC=“A8”;NET “LED[7]” LOC=“T11”;NET “LED[6]” LOC=“R11”;NET “LED[5]” LOC=“N11”;NET “LED[4]” LOC=“M11”;NET “LED[3]” LOC=“V15”;NET “LED[2]” LOC=“U15”;NET “LED[1]” LOC=“V16”;NET “LED[0]” LOC=“U16”;第三篇:_计算机组成原理实验2计算机组成原理实验日志实验题目:进位、移位控制实验实验目的:(1)了解带进位控制的运算器的组成结构;(2)验证带进位控制的运算器的功能。
计算机原理实验3

大连理工大学实验报告实验室(房间号):420 实验台号码:班级:电英1102 姓名:郑泽亮-201181512 指导教师签字:成绩:实验三汇编语言综合设计——计算学生平均成绩实验一、实验目的1. 熟悉汇编语言程序的使用。
2. 掌握十进制的运算、设计显示程序运行结果的格式。
3. 熟练掌握DOS功能调用二、实验内容编写程序,求30个分数的平均值,并以十进制值表示将结果显示在屏幕上。
显示格式的要求如下:第一行显示:Please input 30 scores: 空格间隔30个成绩第二行显示:The average scores is:求得平均成绩并输出平均成绩三、实验算法说明1.输入十进制数,通过循环使用1号功能,循环30次输入数据2.求和:30次循环求得总成绩。
3.求平均成绩:用div除以30,取商去掉余数,得到平均成绩4.将平均成绩转换成十进制数,循环除10取余数并转换成相应的ascii码,并将其逆序存储起来,从而实现了十进制转化。
5.用9号功能输出相应字符串,并用2号功能通过循环以十进制形式输出平均成绩。
四、实验流程图五、程序清单data segmentarray db 30 dup(?) ;定义可以存储输入30位的空间ascdat db 3 dup(?) ;定义用于输出的3位STRING1 DB '*201181512*','ZhengZeLiang','*2013.11.25*',0dh,0ah, 'Please input 30 scores:',0dh,0ah,'$' ;定义要显示的字符串STRING2 DB 0dh,0ah,'The average scores is:','$'data endscode segmentmain proc farassume ds:data,cs:codeSTART: MOV AX,DATAMOV DS,AXLEA DX,STRING1 ;DX装载字符串首地址MOV AH,9 ;使用9号功能显示字符串INT 21Hlea si,array ;取array首地址,并初始化bl,cxmov bl,0mov cx,30next0: mov AH,1 ;1号功能循环输入INT 21Hcmp al,20H ;与空格的ascii码比较jz next1 ;若为空格则跳转next1SUB AL,30Hmov dl,10PUSH AX ;将AX入栈,保存刚得到的axMOV AL,BLMUL dL ;BL=BL*10MOV BL,ALPOP AXADD BL,AL ;相当于实现BL=BL*10+ALJMP next0 ;直接跳转next0next1: MOV [SI],BL ;将刚得到的数BL存到[SI]INC SIXOR BX,BXLOOP next0 ;循环30次输入30个数lea si,array ;取刚存好数的地址mov cx,30mov ax,0mov dh,0next3: mov dl,[si] ;取[SI]单元赋给dladd ax,dx ;ax=ax+dxinc siloop next3 ;循环30次求和mov bl,30div bl ;除以30求平均数mov ah,0mov si,10lea bx,ascdat+2 ;取ascdat末尾地址hta: xor dx,dx ;DX清零div si ;除10or dl,30h ;余数转换asciimov [bx],dl ;将dl存到[bx]单元dec bxand ax,ax ;ax与自己相与jz hta1 ;全为0结束,跳到htaljmp hta ;直接跳转htahta1: mov cx,3lea si,ascdatLEA DX,STRING2 ;显示string2MOV AH,9INT 21Hnext4: MOV dl,[si] ;将[si]传给dlinc simov ah,02h ;用2号功能依次输出int 21hloop next4 ;循环3次以十进制形式输出平均数mov ax,4c00hint 21hmain endpcode endsend start六.实验结果:。
大连理工大学计算机原理实验综合实验设计报告

出口参数
功能 描述
buf
步进电机驱动
无
步进电机延时
无
数码管延时
无
数码管显示
dir,speed,count, 调节电机方向速度,数码
portcl
管的状态,更新 count
dir,speed,count, 调节电机方向速度,数码
portcl
管的状态,更开始
-5-
IO_0809 equ 220h
ioled
equ 230h
data segment
portcl db 0ch,14h,21h,22h,0ffh
led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,67h,77h,7ch,39h,5eh,79h,71h
count db ?
;cs
pop ds
push ds
mov ax,0
mov ds,ax
lea ax,cs:int_proc2
mov si,70h
;IR0 中断类型码 70h
add si,si
add si,si
mov ds:[si],ax
push cs
pop ax
mov ds:[si+2],ax
pop ds
;------------1Hz 分频----------
20
21
PA4 PA5 PA6 PA7 /WR RESET GND D0 D1 D2 D3 D4 D5 D6 D7 VCC PB7 PB6 PB5 PB4
D0 D1 D2 D3 D4 D5 D6 D7 CLK0 OUT0 GATE0 GND
1
24
2
23
3 8253 22
机组实验报告

大连理工大学本科实验报告课程名称:计算机组成原理实验学院(系):专业:软件工程班级:学号:学生姓名:年月日大连理工大学实验报告学院(系):专业:班级:姓名:学号:实验台:实验时间:实验室:成绩:指导教师签字:实验一:微程序控制计算机实验1.实验目的:了解微程序控制计算机的工作原理及实现方法、初步学会程序的流程图画法及程序的模块化设计、调试方法。
2.实验平台:硬件平台:复旦大学FD-MCES教学平台;软件平台:自己做汇编和Unidebbuger调试软件3.实验要求:(任务)1)建立指令集文件(*.DEF 指令系统)使用的是老师提供的指令集“zzkdef.def”2)建立微程序文件(*.M19)3)编写二位乘法程序,通过调试观察汇编指令在微程序控制计算机中的实施过程,学会程序设计中的流程图,模块化设计及调试方法。
4)实验原理图:(P46)要求将CPU的各信号加方向标,延伸IR(指令寄存器)下面如何接微程序控制部分以及各部件的控制端口与微指令发出口的联结。
5)实验原理:要求通过一条具体汇编指令说明本实验计算机的工作原理及实现方法(从PC=0、MPC=0 形成开始说起,为什么程序可以连续执行?)计算机在出现MPC=0后,执行取指令,接着计算机开始执行第一条指令,先译码然后执行其动作,紧接着取第二条指令,然后重复上面的动作,指令地址均存放在内存中。
如SUB A,R0指令,其动作是在将累加器中数据A减去寄存器R0中的数据后,将结果存放在累加器A中.每一条指令的最后一组命令都是取下一条指令,因此CPU每执行完一条指令都会取下一条指令,然后执行。
从而使CPU如此循环往复地执行所要求的指令。
6)实验操作步骤流程图。
该流程图应包括以下几个部分:(可以设为不是第一次使用,但要注意操作过程的实际情况而非理想情况)7)二位乘法程序流程图:要求分成3个部分(1)数据输入、运算式打印部分(2)乘积运算部分(3)数据位的分离与打印结果部分代码:(注:我实现的是第二部分,乘积运算)L30:MOV R0,#1HMOV R1,#0HMOV R2,#0HMOV R3,#0HL31:MOV A,R4SUB A,R0MOV R4,AJC L32MOV A,R1ADD A,R6MOV R1,AMOV A,R2ADD A,R7MOV R2,AJMP L31L32:SUB A,R0MOV R5,AJC L33MOV A,R2ADD A,R6MOV R2,AMOV A,R3ADD A,R7MOV R3,AJMP L32L33:MOV R4,#0HMOV R5,#0HMOV R6,#0HMOV R7,#0AH L34:MOV A,R1 SUB A,R7 MOV R1,AJC L35 MOV A,R2MOV R2,A JMP L34L35:MOV A,R1ADD A,R7MOV R1,A L36:MOV A,R2 SUB A,R7 MOV R2,AJC L37 MOV A,R3 ADD A,R0 MOV R3,A JMP L36L37:MOV A,R2ADD A,R7MOV R2,A L38:MOV A,R3MOV R3,AJC L39 MOV A,R4 ADD A,R0 MOV R4,A JMP L38L39:MOV A,R3 ADD A,R7MOV R3,A3.体会、意见、建议实验体会,除写个人实验课程理解之外,还应对实验课时数实验仪器设备、实验讲义、实验内容安排、时间分配及教师授课方式提出意见和建议。
大连理工大学软件学院计算机组成原理实验报告

大连理工大学本科实验报告课程名称:学院(系):专业:班级:学号:学生姓名:年月日实验项目列表大连理工大学实验预习报告学院(系):专业:班级:姓名:学号:组: ___实验时间:实验室:实验台:指导教师签字:成绩:一、部件实验报告1.实验名称:部件实验——总线数据传输实验2.实验目的:了解总线在计算机中的作用及数据传输原理3.实验要求:把内存作为中间介质,完成寄存器间的数据传输4.实验原理图:(P32)5.实验操作步骤(流程图)开始将开关s0-s7置11110000上拨S13、S11s0-s7置10101010上拨S13、S10,下拨S10将开关全部复位上拨S12、S16、S15S11、S10,下拨S10将开关全部复位实验体会、意见、建议体会:通过这次实验,我对总线的作用和数据的传输原理有了初步的了解。
在实验过程中,开关的上拨顺序(有些开关必须先于某些上拨才能正常进行)和复位顺序很重要,一般遵照先拨后复位的顺序进行。
另外S10比较特殊是下降沿有效,所以需拨两次。
意见及建议:关于部件的实验过于简单和单调,建议增加关于部件的实验内容。
大连理工大学实验预习报告学院(系):专业:班级:姓名:学号:组: ___实验时间:实验室:实验台:指导教师签字:成绩:二、8位微程序控制计算机预习报告1 一位乘法程序的 *. LST 文件(要在重要地方加注释行,尽量使原程序易读)1 0000 ORG 02 0000 STRT:3 0000 3C00 MOV R4,#04 0002 3B00 MOV R3,#05 0004 3D0A MOV R5,#106 0006 600000 JKB STRT7 0009 408001 LDA 8001H8 000C 0F MOV R7,A9 000D L1:10 000D 60000D JKB L111 0010 408001 LDA 8001H12 0013 0E MOV R6,A13 0014 3001 MOV A,#414 0016 488002 STA 8002H15 0019 L2:16 0019 680019 JPB L217 001C 300A MOV A,#0AH18 001E 488002 STA 8002H19 0021 L3:21 0024 3010 MOV A,#10H22 0026 27 ADD A,R723 0027 488002 STA 8002H24 002A L4:25 002A 68002A JPB L426 002D 3009 MOV A,#927 002F 488002 STA 8002H28 0032 L5:29 0032 680032 JPB L530 0035 300A MOV A,#0AH31 0037 488002 STA 8002H32 003A L6:33 003A 68003A JPB L634 003D 3010 MOV A,#10H35 003F 26 ADD A,R636 0040 488002 STA 8002H37 0043 L7:38 0043 680043 JPB L739 0046 300A MOV A,#0AH40 0048 488002 STA 8002H41 004B L8:43 004E 300A MOV A,#0AH44 0050 488002 STA 8002H45 0053 L9:46 0053 680053 JPB L947 0056 06 MOV A,R6 ;把R6当作计数器48 0057 3A01 MOV R2,#149 0059 3B00 MOV R3,#00H50 005B L10: ;循环加被乘数,并把结果存在R3中51 005B 2A SUB A,R252 005C 500067 JC L1153 005F 0E MOV R6,A54 0060 03 MOV A,R355 0061 27 ADD A,R756 0062 0B MOV R3,A57 0063 06 MOV A,R658 0064 58005B JMP L1059 0067 L11:60 0067 03 MOV A,R3 ;分离R361 0068 2D SUB A,R562 0069 500073 JC L1264 006D 04 MOV A,R465 006E 22 ADD A,R2 ;计算十位66 006F 0C MOV R4,A ;把十位存入R4中67 0070 580067 JMP L1168 0073 L12:69 0073 04 MOV A,R470 0074 2A SUB A,R2 ;判断十位R4是否为071 0075 50008B JC L1372 0078 03 MOV A,R373 0079 C1:74 0079 680079 JPB C175 007C 488002 STA 8002H76 007F C2:77 007F 68007F JPB C278 0082 3010 MOV A,#10H79 0084 24 ADD A,R480 0085 488002 STA 8002H81 0088 580094 JMP OVER82 008B L13:83 008B 68008B JPB L1384 008E 3010 MOV A,#10H86 0091 488002 STA 8002H87 0094 OVER:88 0094 580000 JMP STRT 2大连理工大学实验报告学院(系):专业:班级:姓名:学号:组: ___实验时间:实验室:实验台:指导教师签字:成绩:三、8位微程序控制计算机实验报告1.实验名称:8位微程序控制计算机实验2.实验目的:了解微程序控制计算机的工作原理及实现方法、初步学会程序的流程图画法及程序的模块化设计、调试方法。
大连理工大学计算机原理实验第一次实验

大连理工大学实验报告实验室(房间号):420 实验台号码:班级:电通1402 姓名:糜智华指导教师签字:成绩:实验一汇编语言上机操作&动态调试程序DEBUG的使用&运算类程序设计一、实验目的和要求1. 熟练掌握使用全屏幕编辑程序EDIT编辑汇编语言源程序。
2. 熟练掌握宏汇编程序MASM或TASM的使用。
3. 熟练掌握连接程序LINK或TLINK的使用。
4. 了解DEBUG或TD的特点和使用方法。
5. 学习使用DEBUG程序的各种命令。
6. 了解计算机取指令、执行指令的工作过程。
7. 利用DEBUG学习8086/8088CPU指令系统。
8. 掌握用DEBUG调试用户程序的方法。
9. 掌握运算类指令对各状态标识位的影响及其测试方法。
10.掌握使用运算类指令编程及调试方法。
二、实验算法数据段:定义变量buf为平方数0100h,定义变量result为开方数。
堆栈段:不妨取100个单元代码段: start:取数据段段地址并且将bx置1,cx置0。
circle:buf=buf-bx(即奇数bx从1开始)减完后如果buf大于等于零,则bx=bx+2,cx=cx+1,并且重复循环;如果buf小于零则调到over。
over:将cx赋给result,并退出。
三、实验流程图四、程序清单data segment ;数据段buf dw 0100h ;假设变量为0100hresult dw 0000hdata endsssg segment stack ;堆栈段dw 100 dup(0)ssg endscode segment ;代码段assume cs:code,ss:ssg,ds:datastart: mov ax,data ;取数据段段地址mov ds,axmov bx,1 ;bx置1,cx置0mov cx,0circle: sub buf,bx ;buf与bx相减cmp buf,0 ;减完后的buf与零作比较jl over ;(有符号数)小于则跳转add bx,2 ;若大于等于则bx+2,cx+1inc cxjmp circle ;重复循环over: mov result,cx ;将cx赋给resultint 20h ;退出code endsend start五、实验结果与分析(是否达到设计要求、出现的主要问题及解决方法)编译链接结果如图1.1图1.1TD调试运行窗口如图1.2图1.2结果:cx寄存器为0010h,并且存储器里可以看到dw结构的result是第3、4个单元里的内容,即result为0010h。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大连理工大学本科设计报告(计算机原理接口实验综合设计)题目:基于“准PWM技术”的直流电机调速系统设计课程名称:计算机原理实验学院(系):信息与通信学院成绩:LED 监视题目:基于“准PWM 技术”的直流电机调速系统设计1 设计要求利用实验台上的开关(K7-K0),实现3V 直流电机的转速控制。
利用8253产生“准PWM ”(占空比50%~0%)波形,不同的占空比影响着直流电机的转速。
通过秒中断服务程序读取K7-0的数据、修改PWM 的占空比,实现直流电机的转速控制。
具体要求:1) 以8253为核心,通过8253的OUT1输出方式2的方波经反相器后控制电机;a) 设置8253的CNT0为 方式三,将输入的1MHZ 信号进行5000分频,在OUT0上得到200HZ 对称方波,送CLK1使用;b) 设置8253的CNT1为 方式二,利用8253的CNT1的OUT1输出的不对称方波(参见图2.1),经一个反相器输出后,与直流电机连接、控制电机的转速; 2) 利用D8255A 的PA7-PA0做输入,与K7-K0连接。
利用开关数据控制电机的转速。
根据PA 的数据设置CNT1的初值在10~2之间变化(共9档速度)、实现电机转速的控制; 3) 利用8253的CNT2做秒脉冲发生器(CLK2与OUT0连接以获取200HZ 脉冲),(N=400)在OUT2上输出0.5HZ 的周期性方波,并由此方波与主8259的MIR5连接,引发中断服务ISR 。
在ISR 中对D8255A 的PA 口进行输入,并根据此数据修改CNT1的初值(PWM 的占空比)。
4) 加分题:考虑如何使用一个电位器(替代开关)实现对电机转速的控制,并通过数码管显示相应档速值。
2 设计分析及系统方案设计1)设计方案分析:根据设计要求,可以8253为中心模块,利用AD转换器,8255实现拨码开关和电位器进行调速,程序编写实现将以中断为主。
并利用8255,数码管实现显示各速度档位功能(在开关控制和电位器控制下均可显示档位)。
具体模块分析如下。
(1)8253部分:根据设计要求,8253的三个通道分别做如下初始化,其中以CNT0为中心,将输入的时钟源1MHZ进行分频,以供给其他通道使用故其工作在方波方式(方式3)。
CNT1作为驱动直流电机的脉冲源,工作在方式2(矩形波输出),而CNT2为中断的时钟源,在CNT0的输出时钟基础上再次分频实现每0.5S进入一次中断。
(2)8259部分:中断管理,初始化MIR5,并设置35H号中断向量。
(3)8255部分:初始化并实现PA口的开关数据输入程序,PB口的数码管数据输出。
(4)AD转换部分:转换电位器接入的模拟电压值,得到相应数字量。
(5)数码管显示部分:通过8255和预先写入存储空间的字型代码驱动数码管显示。
2)系统方案设计:(1)主程序:主要完成上述相应可编程芯片的初始化,包括8255,8253,8259的初始化,同时进行中断向量的设置,并开启AD转换器,然后等待相应中断的到来。
(2)中断服务程序:利用8255的PA口输入的数据控制电机转速的操作,PB口作输出驱动数码管显示。
拨码开关分为8个档位,8个开关中以高有效为原则,即当K1和K7同时为高时,则为8档(最快档),同时当前档速可通过数码管显示。
当CNT1的初值N=2时,占空比最大(为50%),随着N值的增加,高电平的占空比逐渐下降,电机转速也逐渐变慢。
当拨码开关全部为0时,切换到电位器调节:完成AD转换值的采集,将采集得到的数据进行处理,转换成相应的档速值,并通过8255送给数码管进行显示,得到的N值送给驱动脉冲源通道CNT1,最后退出等待下一次中断的到来。
3 系统电路图4 外围接口模块硬件电路功能描述图2.3 8255引脚图图2.4 8253引脚图图2.5 ADC0809引脚图8255作为主机与外设的连接芯片,利用D8255A的PA7-PA0做输入,与K7-K0连接。
利用PB 口与数码管的阳极相连,驱动数码管。
ADC0809与电位器相连,将电位器输入的模拟量转化为8位数字量,开关数据或电位器控制电机的转速。
8253是NMOS工艺制成的可编程计数器,利用8253cnt1输出“准PWM”波形,cnt0用于基础分频,输出200HZ方波,cnt2输出2HZ方波触发中断。
相关器件引脚原理连接如系统电路原理图,其功能均在前面内容已作介绍。
5 主程序中主要变量说明6 系统软件中各个子程序的功能描述7 主程序程序流程图8 程序清单data segment paraio8253_0 equ 200hio8253_1 equ 201hio8253_2 equ 202hio8253_k equ 203hio_8255 EQU 210hAD_IO EQU 220Hbuffer DB 06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH speed DB 10data endsssg segment stackDw 256 DUP(0)ssg endscode segmentassume cs:code,ds:data,ss:ssgmain proc farcliMOV AX,DA TAMOV DS,AX;8255初始化,a口输入,b口输出,方式0mov dx,IO_8255+3mov al,10010000bout dx,al;8253初始化,cnt0mov dx,io8253_kmov al,36hout dx,almov ax,5000mov dx,io8253_0out dx,alout dx,al;8253初始化,cnt1,产生准PWM波mov dx,io8253_kmov al,74hout dx,almov al,speed ;speed 初值设为10mov dx,io8253_1out dx,almov al,0out dx,al;8253初始化,cnt2,在cnt0的基础上再次分频设置中断mov dx,io8253_kmov al,0b6hout dx,almov ax,100mov dx,io8253_2out dx,almov al,ahout dx,al;设置386EX主8259中断屏蔽字in al,21hand al,11011111bout 21h,al;设置中断向量表push dsmov ax,0mov ds,axlea ax,cs:int_procmov si,35hadd si,siadd si,simov ds:[si],axpush cspop axmov ds:[si+2],axstil2: nop ;等待中断jmp l2mov ax,4c00hint 21hmain endpINT_PROC proc farPUSH AXPUSH CXPUSH DXmov si,0mov dx,IO_8255in al,dxMOV AH,10;设置初始速度test al,80hjnz next1test al,40hjnz next2test al,20hjnz next3test al,10hjnz next4test al,08hjnz next5test al,04hjnz next6test al,02hjnz next7test al,01hjnz next8;若开关都为0,则切换到电位器控制MOV DX,AD_IO ;启动AD转换OUT DX,ALadd dx,2L1: in al,dxtest al,01hjz L1MOV DX,AD_IOINC DXIN AL,DX ;读取LEA BX,bufferMOV CX,8LOOP1: TEST AL,01HJZ NEXT11DEC AHINC BXNEXT11: SHR AL,1LOOP LOOP1;循环判断开ADC值有几个有效,决定输出档速,8个有效,档速最高为2,;0个有效,最低档速为10MOV DX,io_8255+1 ; 数码管显示MOV AL,[BX]OUT DX,ALjmp next9next1: dec ah ;开关8档,最快档inc si ;控制开关模式下数码管的数据next2: dec ahinc sinext3: dec ahinc sinext4: dec ahinc sinext5: dec ahinc sinext6: dec ahinc sinext7: dec ahnext8: dec ahinc silea bx,bufferadd bx,siMOV DX,io_8255+1 ; 数码管显示MOV AL,[bx]OUT DX,ALnext9: mov al,ah ; 送响应档速值给CNT1mov dx,io8253_1out dx,almov al,0out dx,alMOV AL,20H ;发送EOI命令OUT 20H,ALPOP DXPOP CXPOP AXSTIIRETINT_PROC ENDPCODE ENDSEND MAIN9 系统调试运行结果说明、分析所出现得问题1)硬件环境:PC机,386EX实验系统,其中包括硬件模块:8255,8253,8259,ADC0809,基于30386处理器的最小系统,时钟源,电源等。
2)软件环境:TPC_386EX集成开发环境3)设计语言:汇编语言4)出现的问题:1.在编程的过程中,开始开关档不能正常工作,上电后电机会自动跳到最快档。
2.在驱动数码管时,开始没有实现开关档显示档位数据,开关档时数码管显示的是原来电位器的档位,与当前电机转速不符。
5)解决方法:1.开始使用调试工具设置断点检查程序运行情况,发现断点只要设置在开中断之后,程序就会运该JNZ,却用了JZ。
2.经过思考,在不同的档位速度调整的同时,又设置了一寄存器SI,用来同步保存当前档位的值,使开关控制时也可以同步显示当前档位,改进了程序。
6)结果说明:通过开关k7-k0,改变直流,电动机的速度,当开关档同时都为低电平时,电位器控制有效,手动调节实验箱中的电位器,可以看到直流电机实现不同速度转动。
两种控制方式都可以同步看到数码管显示当前档位。
10 结论及设计体会在编程过程中,按照设计要求,结合计算机原理课所学知识,完成了程序设计,加强了对理论课程的理解。
学会了利用调试工具、观察软件的寄存器内容、硬件电路中的逻辑笔,来判断每个芯片设计的是否成功。
通过实际的实验设计,让我渐渐喜欢上了汇编语言,感受到了设计简单电路系统的乐趣。
总之本次计算机原理实验,让我收获颇丰。
最后感谢老师的耐心指导。
参考文献秦晓梅,陈育斌. 计算机原理综合实教程(试用版).电子电工实验中心计算机技术实验室。
- 10 -。