微机原理实验报告

大连理工大学

本科实验报告

课程名称:  计算机原理课程设计 

学院(系):  电气工程学院      

专    业:电气工程及其自动化  

班    级:             

学    号:            

学生姓名:               

2010  年   12   月   30   日


大连理工大学实验报告

实验时间:        年     月      日   星期     时间 :   13  00    ~    15 05  

实验室(房间号):实验台号码:     班级:        姓名:        

指导教师签字:                               成绩:                                   

实验 一      运算类程序设计编程训练     

一、实验目的和要求

1、掌握运算类指令编程及调试方法。

2、掌握运算类指令对各标志位的影响及控制条件转移的使用。

二、实验内容

用减奇数法开平方。

三、实验算法

N个连续自然数中的奇数和等于,要做S的开平方运算,那么就可以从S数中逐次减去自然数中的奇数1,3,5,7……,直到结果为0,然后统计自然奇数的个数,它就是S数的平方根。

四、实验流程图

 

五、程序清单

DATA     SEGMENT

SUM      DB   49

NUM   DB    0

DATA    ENDS

STA       SEGMENT    

STACK   DB  256  DUP(?)

STA        ENDS

CODE    SEGMENT

ASSUME      CS:CODE,SS:STA,DS:DATA

MAIN    PROC   FAR

       PUSH     DS

       SUB       AX,AX

       PUSH     AX                ;标准程序退出

       MOV      AX,DATA

       MOV      DS,AX

       MOV      AL,SUM ;存放总数

       MOV      BL,1              ;存放总奇数的和

       MOV      CL,0              ;存放相减的结果

 LOOP1:

    INC       CL

    SUB    AL, BL

    JZ      OUT1            ;相等则跳出循环

       INC     BL               ;否则继续循环

       INC     BL 

       JMP     LOOP1         ;循环     

OUT1:

       MOV      NUM,CL ;结果存放

       MOV      AL,CL           ;结果输出入口

       CALL     PUTC            ;调用输出函数         

       RET

MAIN  ENDP

PUTC     PROC

       CBW                        ;字节转换为字    

       MOV      DL,10

       DIV        DL

       MOV      DH,AH          ;D保存个位上的数

       ADD      AL,30H          ;转换为ASCLL码

       MOV      AH,02H

       MOV      DL,AL

       INT        21H               ;显示十位数

       MOV      AL,DH

       ADD       AL,30H

       MOV      AH,02H

       MOV      DL,AL

       INT        21H                      ;显示个位数

       MOV      AH,02H

       MOV      DL,' '                     ;显示空格

       INT        21H

       RET

       PUTC     ENDP

CODE    ENDS

END MAIN

六、实验结果与分析

运行程序,达到了设计要求,下图为程序运行结果:

程序运行结果

七、实验体会和建议

通过本次实验,掌握了汇编程序的上机调试过程,并学会了一些运算类指令的实用方法,对循环类程序的设计有了了解。

八、主要仪器设备

    计算机DOS操作系统。


大连理工大学实验报告

实验时间:        年     月      日   星期     时间 :   13  00    ~    15 05  

实验室(房间号):420实验台号码:  19    班级:   电气0801     姓名:  刘伟民      

指导教师签字:                               成绩:                                   

实验 二      排序程序设计编程训练     

一、实验目的和要求

1、利用分支,循环,子程序调用等基本程序结构实现排序程序。

2、掌握综合程序的设计,编制及调试方法。

二、实验内容

在数据区中存放一组数,数据个数就是数据缓存区的长度,用气泡法,对该数据区中的数据按递增关系排序。

三、实验算法

1、从最后一二数开始,依次把相邻的恋歌数进行比较,即第N个数与第N-1个数比较,第N-1个数与第N-2个数比较……若第N-1个数大于第N个数,则两者交换,否则不交换,直到N个数的相邻两个数都比较完为止。此时,N个数中的最小数将被排在N个数的最前列。

2、对剩下的N-1个数重读第一步,找到N-1个数中的最小数。

3、重复第二步,直到N个数全部排好序为止。

四、程序清单

DATA     SEGMENT        

BUFFER DB 31h,35h,37h,39h,33h,32h,34h,30h,38h,36h

COUNT EQU ($-BUFFER)

DATA ENDS

SS_SEG SEGMENT STACK

       DB 256 DUP(?)

SS_SEG ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:SS_SEG

MAIN PROC FAR

       MOV      AX,DATA

       MOV      DS,AX

       MOV      SI,COUNT

      

SORT1:

       MOV     DI,1

       MOV     CX,DI

       LEA BX,BUFFER

CIRCLE:

       MOV      AL,[BX]

       INC BX

       CMP       AL,[BX]

       JLE NEXT

       XCHG    AL,[BX]

       MOV      [BX-1],AL

       MOV      DI,CX

NEXT:    INC CX

       CMP       CX,SI

       JL    CIRCLE

       DEC       SI

       CMP       DI,1

       JNE SORT1

       MOV CX,COUNT

       LEA BX, BUFFER

DIS: MOV AH, 02H

       MOV DL,[BX]

       INT 21H

       INC BX

       LOOP DIS

       MOV AH,4CH

       INT 21H

MAIN     ENDP

CODE     ENDS

       END MAIN   

五、实验结果与分析

运行程序,达到了设计要求,下图为程序运行结果:

程序运行结果

六、实验体会和建议

通过本次实验,掌握了分支,循环,子程序调用等基本程序的基本应用,并学会气泡法这一排序算法。

八、主要仪器设备

    计算机DOS操作系统。


大连理工大学实验报告

实验时间:        年     月      日   星期     时间 :   13  00    ~    15 05  

实验室(房间号):420实验台号码:  19    班级:   电气0801     姓名:  刘伟民      

指导教师签字:                               成绩:                                   

实验 三      DOS功能调用编程训练     

一、实验目的和要求

1、熟悉汇编语言程序的使用。

2、掌握十进制的运算、设计显示程序运行结果的格式。

3、熟练掌握DOS功能调用。

二、实验内容

编写程序,求30个同学成绩的平均分数,将结果显示在屏幕上。

显示格式要求如下:

第一行显示:THE 20 SCORES ARE:以分号分隔的30个同学的分数。

第二行显示:AVERAGE  SCORE IS=求得的平均分数。

三、实验算法

1、将求出的二进制表示的平均分数,转换成十进制表示。

2、显示字符串信息用DOS功能调用INT 21H,功能号为09H。

3、显示平均数结果时,用DOS功能调用INT 21H,功能号为02H。

四、实验流程图

 

五、程序清单

data segment

       buffer  db 98,83,88,94,90,84,77,84,93,88,89,95,84,93,98,86,86,87,98,96

       sum        dw  0000h   

       string0 db       'THE 20 SCORES ARE:$'

       string1   db          'AVERAGE  SCORE IS=$' 

       count     equ       20

data ends

sta segment stack

       db 100 dup(?)

sta  ends

code segment

assume cs:code,ss:sta,ds:data

main proc far

       mov       ax,data

       mov       ds,ax

       mov       bx,offset buffer

       mov       cx,count

      call         puts0

circle:

       mov       al,[bx]   

       call         put_dec ;显示[bx]

       mov       al,[bx]   

       mov       ah,00h   ;先将AH清零

       adc     sum,ax   ;带进位加法,结果放在sum中

       inc        bx

       loop   circle

       call         puts1

       mov       ax,sum

       mov       bl,count

       div         bl

       call         put_dec

       mov       ax,4c00h

       int          21h

main    endp

put_dec proc

       cbw         

       mov       dl,10

       div         dl           ;al中存商,ah中存余数

       mov       dh,ah     ;余数转移到dh,

       add       al,30h    ;ASCⅡ 转换

       mov       ah,02h

       mov       dl,al

       int         21h

       mov       al,dh

       add        al,30h

       mov       ah,02h

       mov       dl,al

       int          21h

       mov       ah,02h

       mov       dl,';'

       int         21h

       ret

       put_dec endp

puts0     proc

       mov       ah,02h

       mov       dl,10      ;换行

       int         21h

       mov       ah,02h

       mov       dl,13      ;回车

       int         21h

       mov       ah,09h

       lea          dx,string0

       int          21h

       ret

       puts0     endp

puts1     proc

       mov       ah,02h

       mov       dl,10      ;换行

       int         21h

       mov       ah,02h

       mov       dl,13      ;回车

       int         21h

       mov       ah,09h

       lea          dx,string1

       int          21h

       ret

       puts1     endp     

code      ends

end main

六、实验结果与分析

运行程序,达到了设计要求,下图为程序运行结果:

七、实验体会和建议

通过本次实验,熟悉汇编语言程序的使用,常用的DOS功能调用方法。

八、主要仪器设备

    计算机DOS操作系统。


大连理工大学实验报告

实验时间:        年     月      日   星期     时间 :   13  00    ~    15 05  

实验室(房间号):420实验台号码:  19    班级:   电气0801     姓名:  刘伟民      

指导教师签字:                               成绩:                                   

实验四     8255并行接口实验      

一、实验目的和要求

1、学习利用并行接口芯片8255构成并行接口电路的基本方法。

2、熟悉掌握并行接口芯片8255的基本性能及在实际应用中的硬件连接、初 始化编程方法。

二、实验内容

编写程序,使8255的PB口位输出口,PA口将K0~K7作为一个字节读入,再从PB口输出这一反码字节。

三、实验电路图

8255并行接口实验电路图

四、程序清单

汇编程序代码如下:

CODE    SEGMENT

ASSUME  CS:CODE

START:

       MOV    DX,21BH   

       MOV  AL,90H

       OUT    DX,AL

 BG:  

   MOV    DX,218H

       IN       AL,DX

       MOV    DX,219H

       OUT    DX,AL

       JMP   BG

CODE    ENDS

END     START

五、实验结果与分析

改变PA口输入的数据,PB口输出的数据随之变化。

六、实验体会和建议

第一接口实验,掌握了并行接口芯片8255的基本性能及在实际应用中的硬件连接、初 始化编程方法。

七、主要仪器设备

SAC-86S试验箱,计算机。


大连理工大学实验报告

实验时间:        年     月      日   星期     时间 :   13  00    ~    15 05  

实验室(房间号):420实验台号码:  19    班级:   电气0801     姓名:  刘伟民      

指导教师签字:                               成绩:                                    

实验五     8259中断实验      

一、实验目的和要求

1.PC机的中断结构及8259中断控制器的初始化。

2.熟悉8259中断控制器的工作原理和硬件连线方法。

3.了解8259的应用和硬件编程方法。

4.了解8259中断屏蔽,以及优先级判别等特性。

二、实验内容

1.编写中断实验程序,主程序使8255的PB口为输出口,输入0FFH,L0~L7指示灯全亮,中断服务程序从PB口输出0FH,L0~L3亮,L4~L7灭,并延时一段时间后返回主程序。

2.编写中断实验程序,主程序使8255的PB口为输出口,输入0FFH,L0~L7指示灯全亮,IR0中断服务程序从PB口输出0FH,L0~L3亮,L4~L7灭,并延时一段时间后返回主程序。IR1中断服务程序从PB口输出0F0H,L0~L3灭,L4~L7亮,并延时一段时间后返回主程序。

三、实验电路图

图5-1 8259(单片)中断实验电路图

图5-2 8259中断优先级实验电路图

四、程序清单

8259(单片)中断实验汇编程序代码如下:

INT0  EQU 220H

INT1  EQU 221H

INT10 EQU 228H

INT11 EQU 229H

STACK SEGMENT

STA    DB     50 DUP(?)

TOP    EQU LENGTH STA

STACK  ENDS

CODE   SEGMENT

ASSUME  CS:CODE,SS:STACK

START:

      CLI   

      MOV    AX,TOP

      MOV    SP,AX

       PUSH   DS

       MOV    AX,0000H;SET IRQ0

       MOV    DS,AX                 

       MOV    AX,OFFSET IRQ0

       ADD    AX,0000H

       MOV    SI,20H

      MOV    [SI],AX

       MOV    AX,CS

       MOV    SI,22H

      MOV    [SI],AX

       POP    DS

      MOV    AL,13H  ;ICW1           

       MOV    DX,INT0

       OUT    DX,AL

       MOV    AL,8    ;ICW2            

      MOV    DX,INT1

       OUT    DX,AL

       MOV    CX,0FFFH

       LOOP   $

       MOV    AL,9    ;ICW4             

       MOV    DX,INT1

       OUT    DX,AL

       MOV    CX,0FFFH

       LOOP   $

       MOV    DX,INT1

       MOV    AL,0FEH ;OCW1

       OUT    DX,AL

      MOV    CX,0FFFH

STI                   

       MOV    DX,21BH

       MOV    AL,90H

       OUT    DX,AL

DSP:   MOV    AL,0FFH

       MOV    DX,219H

       OUT    DX,AL

       JMP    DSP

IRQ0:  STI

       MOV    CX,0FFFFH

       LOOP   $

       MOV    AL,0FH

       MOV    DX,219H

       OUT    DX,AL

       MOV    DX,INT0

       MOV    AL,20H

       OUT    DX,AL

       MOV    CX,0FFFFH

       LOOP   $

       MOV    CX,0FFFFH

       LOOP   $

       IRET

CODE ENDS

END START

8259中断优先级实验汇编程序代码如下:

INT0  EQU 220H

INT1  EQU 221H

INT10  EQU 228H

INT11  EQU 229H

STACK  SEGMENT

STA    DB            50 DUP(?)

TOP    EQU LENGTH     STA

STACK ENDS

CODE   SEGMENT

       ASSUME  CS:CODE,SS:STACK

START:

      CLI   

       MOV AX,TOP

      MOV SP,AX

       PUSH DS

       MOV AX,0000H      ;SET IRQ0

       MOV DS,AX                 

       MOV AX,OFFSET IRQ0

       ADD AX,0000H

       MOV SI,20H

       MOV [SI],AX

       MOV AX,CS

       MOV SI,22H

       MOV [SI],AX

      MOV AX,0000H      ;SET IRQ1

       MOV DS,AX                 

       MOV AX,OFFSET IRQ1

       ADD AX,0000H

       MOV SI,24H

       MOV [SI],AX

       MOV AX,CS

       MOV SI,26H

       MOV [SI],AX

       POP DS

       MOV AL,13H  ;ICW1            

       MOV DX,INT0

       OUT DX,AL

       MOV AL,8    ;ICW2            

       MOV DX,INT1

       OUT DX,AL

       MOV CX,0FFFH

       LOOP $

       MOV AL,9    ;ICW4             

       MOV DX,INT1

       OUT DX,AL

       MOV CX,0FFFH

       LOOP $

       MOV DX,INT1

       MOV AL,0FCH   ;OCW1          

       OUT DX,AL

       MOV CX,0FFFH

       STI                   

       MOV DX,21BH

       MOV AL,90H

       OUT DX,AL

DSP:   MOV AL,0FFH

       MOV DX,219H

       OUT DX,AL

       JMP DSP                   

IRQ0:  STI

       MOV CX,0FFFFH

       LOOP $

       MOV AL,0FH

       MOV DX,219H

       OUT DX,AL

       MOV DX,INT0

       MOV AL,20H

       OUT DX,AL

       MOV CX,0FFFFH

       LOOP $

       MOV CX,0FFFFH

       LOOP $

       IRET       

IRQ1:  STI

       MOV CX,0FFFFH

       LOOP $

       MOV AL,0F0H

       MOV DX,219H

       OUT DX,AL

       MOV DX,INT0

       MOV AL,20H

       OUT DX,AL

       MOV CX,0FFFFH

       LOOP $

       MOV CX,0FFFFH

       LOOP $

       IRET

CODE ENDS

END START

五、实验结果与分析

单片8259实验中,L0~L7指示灯全亮,按下单脉冲按钮,L0~L3亮,L4~L7灭,延时一段时间后仍全亮。

8259中断优先级实验中,L0~L7指示灯全亮;按下左单脉冲按钮(接IR0),L0~L3亮,L4~L7灭,延时一段时间后仍全亮;按下右单脉冲按钮(接IR0),L0~L3灭,L4~L7亮,延时一段时间后仍全亮;同时按下两个单脉冲按钮, L4~L7先灭亮,L0~L3后灭亮,延时一段时间后仍全亮。

六、实验体会和建议

通过本次实验,掌握了8259的初始化方法,了解了8259的应用和硬件编程方法,

8259中断屏蔽,以及优先级判别等特性。

七、主要仪器设备

SAC-86S试验箱,计算机。


大连理工大学实验报告

实验时间:        年     月      日   星期     时间 :   13  00    ~    15 05  

实验室(房间号):420实验台号码:  19    班级:   电气0801     姓名:  刘伟民      

指导教师签字:                               成绩:                                    

实验六    定时计数器实验      

一、实验目的和要求

1.了解定时器8253的初始化及用法。

2.会用逻辑笔或示波器观察8253的工作状态。

二、实验内容

编写程序,使8253的定时/计数器2工作在方式3下。会看到逻辑笔红绿灯来回反复变化。

三、实验电路图

8253实验电路图

四、程序清单

汇编程序代码如下:

TIM_CTL        EQU         203H

TIMER0          EQU         200H

TIMER1          EQU          201H

TIMER2          EQU         202H

MODE23        EQU          0B6H

MODE13        EQU         76H

CODE           SEGMENT

ASSUME        CS:CODE

START:

TT:

      CLI

      MOV        DX,TIM_CTL

      MOV        AL,MODE23

OUT           DX,AL

MOV        DX,TIMER2

MOV        AL,0FFH

OUT         DX,AL

MOV        AL,0FFH

OUT         DX,AL

WT:     

JMP       WT

CODE     ENDS

END     START

五、实验结果与分析

K0向8253输入高电平时,可以看到逻辑笔红绿交替变化。K0为低电平时观察不到此现象。

六、实验体会和建议

通过本次实验,掌握了8253的使用方法。

若要产生周期较长的方波,如10s,可以采用多个定时器级联的方法,即通过一个定时器对原始时钟信号进行分频,其输出作为另一定时器的时钟信号。

七、主要仪器设备

SAC-86S试验箱,计算机。


大连理工大学实验报告

实验时间:        年     月      日   星期     时间 :   13  00    ~    15 05  

实验室(房间号):420实验台号码:  19    班级:   电气0801     姓名:  刘伟民      

指导教师签字:                               成绩:                                   

实验七    A/D转换接口实验      

一、实验目的和要求

1.了解模/数转换的工作原理。

2.掌握0809的使用方法。

二、实验内容

编写程序,用0809的IN0通道采集数据并在数码管上显示。

调节电位器W1,以改变模拟电压值,显示器上会不断显示新的A/D转换结果。

三、实验电路图

0809实验电路图

四、程序清单

汇编程序代码如下:

B8279    EQU        212H

D8279      EQU        210H

LED0      EQU        00  

LED1            EQU           38H

DATA     SEGMENT

LED           DB       3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,

DB           6FH,77H,7CH,39H 5EH,79H,71H

DATA     ENDS

CODE       SEGMENT

ASSUME   CS:CODE,DS:DATA

START:  

       MOV         DX,B8279

       MOV        AL,0D0H

       OUT     DX,AL

    MOV     CX,0FFFFH

       LOOP        $

       MOV       DX,B8279

       MOV       AL,LED0

       OUT       DX,AL

       MOV      AL,LED1

       OUT       DX,AL

    MOV      DX,B8279

       MOV       AL,95H

       OUT       DX,AL

       MOV      DX,D8279

       MOV      AL,40H

       OUT       DX,AL          

       MOV       DX,D8279 

       MOV      AL,5EH

       OUT       DX,AL       

       MOV       DX,D8279

       MOV       AL,77H

       OUT       DX,AL            

TT:    

     MOV       DX,230H

      OUT       DX,AL

   MOV       CX,0FFFFH

      LOOP     $ 

     MOV        DX,B8279

      MOV         AL,83H

       OUT       DX,AL 

       MOV       DX,230H

       IN         AL,DX 

       AND       AL,0FH

       LEA       BX,LED

       XLAT

       MOV        DX,D8279        

       OUT         DX,AL

       MOV        DX,B8279

       MOV       AL,84H

       OUT        DX,AL

       MOV        DX,230H

       IN          AL,DX

       MOV        CL,4H

       ROR         AL,CL

       AND       AL,0FH

       LEA        BX,LED

       XLAT

       MOV        DX,D8279        

       OUT         DX,AL 

       JMP         TT

CODE     ENDS

END      START          

五、实验结果与分析

数码管高五位显示“Ad-××”,旋转电位器旋钮,改变模拟量大小,转换值××在00~FF之间变化。

六、实验体会和建议

通过本实验,掌握了0809的使用方法。由于A/D转换需要一定时间,所以编写程序时应注意在启动A/D转后后,必须延时一段时间才能采集A/D转换的值。

七、主要仪器设备

SAC-86S试验箱,计算机。


大连理工大学实验报告

实验时间:        年     月      日   星期     时间 :   13  00    ~    15 05  

实验室(房间号):420实验台号码:  19    班级:   电气0801     姓名:  刘伟民      

指导教师签字:                               成绩:                                   

实验八    步进电机实验      

一、实验目的和要求

1.了解步进电机的工作原理,以及脉冲分配概念。

2.掌握计算机控制步进电机的方法。

二、实验内容

编写程序,通过8255控制步进电机的方法。

按步进电机脉冲分配规律,设定相应输入步进电机转速。扳动K0-K3,可控制步进电机的转速,K0-K3转速依次提高。

三、实验电路图

步进电机实验电路图

四、程序清单

汇编程序代码如下:

CODE            SEGMENT

ASSUME         CS:CODE

START:

      MOV           DX,21BH   

      MOV            AL,90H

      OUT             DX,AL 

BG:

   MOV            DX,218H

      IN                AL,DX

      CMP            AL,01H

      JNZ                     C2

      MOV            BX,0FFFFH

      JMP            WORK

C2:

      CMP           AL,02H

      JNZ                     C4

      MOV            BX,07FFFH

      JMP             WORK

C4:

      CMP         AL,04H

      JNZ                     C8 

      MOV       BX,0FFFH

      JMP         WORK

C8:

      CMP        AL,08H

      JNZ                     CC

      MOV       BX,07FFH

      JMP         WORK

CC:

     MOV           AL,00H

      MOV       DX,219H

      OUT        DX,AL

      JMP             BG

WORK:

     MOV           AL,01H

      MOV       DX,219H

      OUT         DX,AL

      MOV           CX,BX

      LOOP          $

     MOV           AL,03H

      MOV       DX,219H

      OUT        DX,AL

      MOV           CX,BX

      LOOP          $

      MOV           AL,02H

      MOV       DX,219H

      OUT        DX,AL

      MOV           CX,BX

      LOOP          $

     MOV           AL,06H

      MOV       DX,219H

      OUT        DX,AL

      MOV           CX,BX

      LOOP          $

      MOV           AL,04H

      MOV       DX,219H

      OUT        DX,AL

      MOV           CX,BX

      LOOP          $

     MOV           AL,0CH

      MOV       DX,219H

      OUT        DX,AL

      MOV           CX,BX

      LOOP          $

      MOV           AL,08H

      MOV       DX,219H

      OUT        DX,AL

      MOV           CX,BX

      LOOP          $

     MOV           AL,09H

      MOV       DX,219H

      OUT        DX,AL

      MOV           CX,BX

      LOOP          $

      JMP         BG

CODE    ENDS

END    START

五、实验结果与分析

扳动K0-K3,可控制步进电机的转速,K0-K3转速依次提高。

六、实验体会和建议

通过本次实验,了解了步进电机的工作原理,以及脉冲分配概念;掌握了计算机控制步进电机的方法。

七、主要仪器设备

SAC-86S试验箱,计算机。


大连理工大学本科设计报告

题目:基于PWM的直流电机调速系统设计

课程名称:  计算机原理课程设计 

学院(系):  电气工程学院       

专    业:  电气工程及其自动化  

班    级:     电气0801         

学    号:     200881054         

学生姓名:      刘伟民          

              成    绩:                       

2011  年   1   月   6   日

题目:基于PWM的直流电机调速系统设计

1 设计要求

  利用8253产生PWM波形,控制直流电机的转速。具体要求:

1、以8253为核心,编制PWM波形算法,通过8255输出PWM波形控制电机;

2、直流电机的转速可以控制:利用实验台上的电位器人工调节----转速连续变化;利用实验台上的单脉冲源控制电机加速或减速。

2 设计分析及系统方案设计

根据实验要求,需要用8255A产生PWM波,占空比通过定时器8253或外部中断来直接控制,而8253的参数由ADC0809提供,即ADC0809的模拟量由电位器提供,输出数字量以实现对8253的控制;外部中断由单脉冲源提供,通过8259管理外部中断。

3 硬件电路图

综合以上分析,可以得到系统的硬件电路图:

直流电机调速系统硬件电路图

4 程序流程图

主程序流程图

 

5 程序清单

实验程序如下:

io8253_0  equ    200h   ;timer0

io8253_1  equ    201h   ;timer1

io8253_2   equ    202h   ;timer2

io8253_k   equ    203h   ;8253 control

p55a       equ    218h  ;8255 a port output

p55b       equ    219h   ;8255 b port output

p55c       equ    21ah  ;8255 c port input

p55ctl     equ    21bh   ;8255 coutrl port

int0       equ    220h   ;interruput

int1       equ    221h

int10      equ    228h

int11      equ    229h

STACK      SEGMENT

STA        DB     50 DUP(?)

TOP        EQU LENGTH STA

STACK      ENDS

CODE       SEGMENT

ASSUME CS:CODE,SS:STACK

start:

       CLI

        MOV AX,TOP

        MOV SP,AX

        PUSH DS

        MOV AX,0000H     ;SET IRQ0

        MOV DS,AX

        MOV AX,OFFSET IRQ0

        ADD AX,0000H

        MOV SI,20H

        MOV [SI],AX

        MOV AX,CS

        MOV SI,22H

        MOV [SI],AX

        MOV AX,0000H     ;SET IRQ1

        MOV DS,AX

        MOV AX,OFFSET IRQ1

        ADD AX,0000H

        MOV SI,24H

        MOV [SI],AX

        MOV AX,CS

        MOV SI,26H

        MOV [SI],AX

        POP DS

       MOV AL,13H  ;ICW1

       MOV DX,INT0

       OUT DX,AL

      MOV AL,8    ;ICW2

       MOV DX,INT1

       OUT DX,AL

      mov cx,0fffh

        loop $

       MOV AL,0bh    ;ICW4

       MOV DX,INT1

       OUT DX,AL

       mov cx,0fffh

        loop $

       MOV DX,INT1

       MOV AL,0FCH   ;OCW1

       OUT DX,AL

       mov cx,0fffh

        loop $

       MOV DX,INT0

       MOV AL,20H    ;

       OUT DX,AL

       mov cx,0fffh

        loop $

        STI

    nop

    mov    dx,p55ctl           ;指向8255的控制口

    mov    al,10010011b        ;设定C口为方式0,PC0、1输入,PC7输出

    out    dx,al               ;写入控制字

    mov    dx,io8253_k         ;向8253写控制字

    mov    al,36h              ;0011 0110 使0通道为工作方式3

    out    dx,al

    mov    ax,100               ;写入循环计数初值100

    mov    dx,io8253_0

    out    dx,al               ;先写入低字节

    mov    al,ah

    out    dx,al               ;后写入高字节

    mov    dx,io8253_k

    mov    al,76h              ;0111 0110 设8253通道1工作方式3

    out    dx,al

    mov    ax,260        ;写入循环计数初值260(周期参数)

    mov    dx,io8253_1  ;以避免输入的脉宽值大于周期参数

    out    dx,al         ;先写低字节

    mov    al,ah

    out    dx,al        ;后写高字节

    mov    dx,p55ctl

    mov    al,93h        ;1001 0011 A口输入,PC7输出

    out    dx,al

    mov    bl,100        ;PWM的处置为最小

lop:mov    dx,230H

    out    dx,al         ;启动AD

    mov    dx,p55c        ;检测OUT1是否为低

    in     al,dx        ;指向8255的c口

    and    al,01h

    jnz    lop           ;OUT1不为1时等待

    mov    dx,p55ctl

    mov    al,0fh       ;将PC7置位

    out    dx,al

    mov    dx,io8253_k

    mov    al,0b0h      ;1011 0000 设8253通道2工作方式0

    out    dx,al

    mov    ax,0

mov    al,bl        ; 写入计数初值

    mov    dx,io8253_2

    out    dx,al        ;先写低字节

    mov    al,ah

    out    dx,al         ;后写高字节

lop1:mov   dx,p55c       ;指向8255的c口

    in     al,dx

    and    al,02h

    jz     lop1

    mov    dx,p55ctl

    mov    al,0eh       ;将PC7清零

    out    dx,al

lop2:mov   dx,p55c        ;等待OUT低电平结束

    in     al,dx         ;指向8255的c口

    and    al,01h

    jz     lop2           ;OUT1=0时等待

    MOV    DX,230H

    in     al,dx         ;输入A/D转换值作为脉宽值(0-255)

    and    al,0ffh

    jnz    lop3

    inc  al              ;避免脉宽值=0

lop3: mov  bl,al

    jmp lop              ;OUT1=1时返回

IRQ0:                       ;提速中断服务程序

STI

    mov    cx,100            ;以下操作循环100次

again: mov bl,250            ;将作为定时器初值,实现大的占空比

i0lop: mov dx,p55c           ;检测OUT1是否为低

    in al,dx                ;指向8255的c口

    and al,01h

    jnz  i0lop              ;OUT1不为1时等待

    mov dx,p55ctl

    mov al,0fh               ;将PC7置位

    out dx,al

    mov dx,io8253_k

    mov al,0b0h             ;1011 0000 设8253通道2工作方式0

    out dx,al

    mov  ax,0

mov al,bl             

mov dx,io8253_2

    out dx,al                

    mov al,ah

    out dx,al              

i0lop1:mov dx,p55c          

    in  al,dx

    and al,02h

    jz  i0lop1

    mov dx,p55ctl

    mov al,0eh            

    out dx,al

i0lop2:mov dx,p55c         

    in  al,dx              

    and al,01h

    jz  i0lop2             

loop again

    IRET

IRQ1:                       ;减速中断服务程序

STI

    mov    cx,100            ;以下操作循环100次

again: mov bl,250            ;将作为定时器初值,实现小的占空比

i1lop: mov dx,p55c           ;检测OUT1是否为低

    in al,dx                ;指向8255的c口

    and al,01h

    jnz  i1lop              ;OUT1不为1时等待

    mov dx,p55ctl

    mov al,0fh               ;将PC7置位

    out dx,al

    mov dx,io8253_k

    mov al,0b0h             ;1011 0000 设8253通道2工作方式0

    out dx,al

    mov  ax,0

mov al,bl             

mov dx,io8253_2

    out dx,al                

    mov al,ah

    out dx,al              

i1lop1:mov dx,p55c          

    in  al,dx

    and al,02h

    jz  i1lop1

    mov dx,p55ctl

    mov al,0eh            

    out dx,al

i1lop2:mov dx,p55c         

    in  al,dx              

    and al,01h

    jz  i1lop2             

loop again

    IRET

code ends

end start

6 系统调试运行结果说明、分析所出现得问题,设计体会与建议

系统运行的硬件环境为SAC-86S试验箱,计算机。设计语言为汇编语言。

系统能通过电位器旋钮实现对直流电机的无级调速,可利用单脉冲控制电机突然加速或突然减速。

在调试中8255不能正常工作,无法控制电机的转速,在老师帮助下,经单步调试后,解除了故障。后来无法进入中断服务程序,原因在于中断向量表设置有问题;中断服务程序无法正常返回,原因在于初始化时将中断结束方式设成了非自动结束方式,而在中断服务程序末尾未加EOI的语句。这些问题都在自己的调试和思考后得到了解决。

7 结论及设计体会

这是一个综合设计性实验,难度相对较大。在自己完成该实验的过程中,对常用接口芯片的使用方法有了深刻的理解,做完实验后,对和接口相关的理论知识的理解变得非常容易。

另外,在实验过程中掌握了汇编程序的一些基本调试方法。和高级语言不同,接口部分的汇编程序能否正确运行,不仅与程序本身有关,还与硬件有很大关系,所以调试时必须“软硬兼施”,而怎么快速正确地定位问题所在,是我在本次实验中学到的。

最后,感谢实验过程老师的指导!

参考文献

[1]张仁杰,秦晓梅编著。微机原理与接口技术综合实验教程。大连:大连理工大学出版社,2004

相关推荐