小型直流电机闭环调速系统PID控制器设计-CSU - 图文

更新时间:2024-04-13 20:16:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

微机原理课程设计报告

小型直流电机闭环调速系统PID控制设计(限2-3人)

设计题目:__________________

学 院:__________________ 专业班级: 姓 名: 学 号: 指导老师:

1

目录

一、实验设计要求--------------------------------------------------------------------2 二、控制系统总体设计方案------------------------------------3 三、系统框图--------------------------------------------------------------------------4 四、程序流程图---------------------- ----------------------4-5 五、重要单元的介绍----------------------------------------5-9 六、硬件连接图------------------------- ------------------9-10 七、系统连接图---------------------------------------------11 八、调试及结果----------------------------- -------------11-12 九、程序代码---------------------------------------- ------------------------------13-31 十、心得体会--------------------------------------------------------------------------32 十一、参考文献-----------------------------------------------------------------------33

一、设计要求:

1、设计基于80x86微机接口控制电路;

2

2、分别用C语言和汇编语言编程完成硬件接口功能设计;

3、程序功能要求:电机速度由按键分段给定或电位器连续给定,计算机屏幕和数码管同步跟踪显示当前给定速度和电机实际运行速度,实现PID参数在线显示和修改。

二、控制系统总体设计方案

本设计是利用PC微机一台、TD-PIT实验系统一套实现对直流电机转速调节的应用。

编写程序,用ADC0809完成模拟信号到数字信号的转换。输入模拟信号有A/D转换单元可调电位器提供的0~5V,将其转换后的数字信号读入累加器,做为控制电机的给定转速。用8255的B口作为直流电机的控制信号输出口,通过对电机转速反馈量的运算,调节控制信号,达到控制电机匀速转动的的作用。并将累加器中给定的转速和当前测量转速显示在屏幕上。再通过LED灯显示出转速的大小变化。

整个程序设计过程分为基本功能实现阶段,检测程序阶段,功能扩展和功能验证及程序补充四个实验阶段。

基本功能实验阶段,在“轻松编程”软件中完成,主要完成各个子程序的调试;在检测程序阶段,在“轻松编程”软件中通过编译和链接,并反复检查没有逻辑错误;调试结果正确以后在进行相应的连接,将各个子模块联系起来功能扩展及程序的补充,在实验室里完成,使用唐都硬件实验箱,用TDPIT来编程实现;功能验证阶段,在实验室里完成。由于程序中要用到中断,但是在windows下不能使用中断,所以必须在dos环境下才能进行程序的调试。

三、系统框图

3

四、程序流程图

开始定义全局变量Z,b,d开外部中断1,定时器0,设置计数初值,定时0.25ms开关为低电平?否是关总中断开总中断模拟给定AD转换得给定量Z根据比例,确定显示设定转速 b=Z*19,实际转速d计算各数码管显示的数值根据138片选逐次显示 主程序流程图

4

开始赋定时初值定时值C+1,H+1否H≤U?是输出高电平否U<H≤255?是输出低电平否H=255?是H=0否C=4000?是d=中断1的计数值*60中断1计数值清零由给定量z,反馈量d/19,计算控制量UC=0结束 中断服务子程序流程图

5

五、重要单元的介绍

5.1 8255工作原理:

本设计利用8255的A口作为输出口,控制8个单色LED灯,来实现电机转速的大小调节。

并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息,CPU和接口之间的数据传递总是并行的,即可以同时进行传递8位,16位,32位等。8255可编程外围接口芯片是具有A、B、C三个并行接口,+5V单电源供电,能在以下三种方式下工作:方式0—基本输入/出方式、方式1—选通输入/出方式、方式2—双向选通工作方式。其控制字、内部结构图和引脚图见图1-1-1、图1-1-2.

图1-1-1 8255控制字

6

图1-1-2 8255内部结构图和引脚图

5.2 转速调节原理:

PWM的占空比决定输出到直流电机的平均电压.

PWM不是调节电流的.PWM的意思是脉宽调节,也就是调节方波高电平和低电平的时间比,一个20%占空比波形,会有20%的高电平时间和80%的低电平时间,而一个60%占空比的波形则具有60%的高电平时间和40%的低电平时间,占空比越大,高电平时间越长,则输出的脉冲幅度越高,即电压越高.如果占空比为0%,那么高电平时间为0,则没有电压输出.如果占空比为100%,那么输出全部电压. 所以通过调节占空比,可以实现调节输出电压的目的,而且输出电压可以无级连续调节.

在使用PWM控制的直流无刷电动机中,PWM控制有两种方式:

(1)使用PWM信号,控制三极管的导通时间,导通的时间越长,那么做功的时间越长,电机的转速就越高

(2)使用PWM控制信号控制三极管导通时间,改变控制电压高低来实现 直流电机单元由DC12V、1.1W的直流电机,小磁钢,霍尔元件及输出电路构成。PWM示意图如图1-1-3所示。通过调节T1的脉冲宽度,改变T1的占空比,从而改变输出,达到改变直流电机转速的目的

7

图1-1-3 PWM示意图

利用8255的PB0产生脉冲信号作为控制量,经驱动电路驱动电机运转。霍尔测速元件输出的脉冲信号记录电机转速构成反馈量。在参数给定的情况下,经PID运算,电机可在控制量的作用下,按PC机累加器给定的转速运转。通过PC的0号通道,设置为输出1ms方波,作为采样时钟,PB0产生PWM脉冲计时及转速累加,系统总线上INTR中断用于测量电机转速。

5.3 A\\D转换原理

图1-1-4 ADC0809外部管脚图

本设计用ADC0809完成模拟信号到数字信号的转换。输入模拟信号有A/D转换单元可调电位器提供的0~5V,将其转换后的数字信号读入累加器,做为控制电机的给定转速。

8

_

5.4 LED灯的工作原理:

LED灯显示器有8个单色发光二极管构成,在共阳极接法中,各二极管的阳极被连在一起,使用的时候要将它与+5V项链,而把各段的阴极连到器件的

相应引脚上。当某的LED灯的引脚为低电平的时候,该灯工作。

图1-1-5 LED灯管脚图

通过8255的A口信号作为输入信号,控制各灯的工作状态。 来显示出此时电机转速的大小变化

六、硬件连接图

6.1 单元接线图:

图1-1-5 A\\D转换接线图

ADC转换单元中,D0-D7分别与系统总线的XD0-XD7对应相连,

WRRD、CLK分别与系统总线XIOW、XIOR、CLK相连,片选引脚与系统IOY0相连,A、B、C接地,IN0接+5V直流电压

9

源,

1-1-6所示。

图1-1-6 直流电机闭环接线图

直流电机闭环接线中,8255芯片的A口作为输出信号与LED灯项连,即PA0-PA7与系统总线的XD0-XD7相连,同时与ADC0809的D0-D7相连;B口的PB0作为直流电机控制信号输出口,经驱动电路A口,与直流电机相连驱动电机运转;片选信号线接系统的IOY1,读写信号线分别对应系统的XIO、RXIOW相连,其中,系统的中断INTR引脚用于测量电机转速与直流电机的HR引脚相连。

10

七、系统连线图

八、调试及结果

8.1 调试步骤:

(1)确认从PC机引出的两根扁平电缆已经连接在平台上。 (2)首先运行CHECK程序,查看I/O空间始地址。 (3)利用查出的地址编写程序,然后编译连接。 (4)参照接线图连接电路。

11

(5)运行程序,调节电位器的大小,观察电机的运行情况以及显示在屏幕上的结果和LED灯的变化。

9.2 结果分析:

A/D实现模拟信号转换为数字信号,通过电位器调节输入电压(0~5V),改变输出的数字信号,进而改变8255的给定信号(给定转速),即通过改变PB0通道输出方波的占空比,实现PWM调速,改变脉冲的宽度。

若占空比越大,高电平时间越长,则输出的脉冲幅度越高,即电压越高.根据直流电动机的机械特性,电机转速与电压呈正比变化。

基本功能实验阶段,在“轻松编程”软件中完成,主要完成各个子程序的调试;在检测程序阶段,在“轻松编程”软件中通过编译和链接,并反复检查没有逻辑错误;调试结果正确以后在进行相应的连接,将各个子模块联系起来,由于自己不具备硬件资源,所以调试的时候只能检查程序本身的错误,经过调试能显示各个子程序的功能,同时嵌套有延时子程序,方便程序的调用,而端口地址的选择与确定,只能在实验室里完成,功能扩展及程序的补充,在实验室里完成,使用唐都硬件实验箱,用TDPIT来编程实现,实验的过程中,注意端口地址,要与硬件实验箱上的匹配;功能验证阶段,实验发现已经编好的程序仍存在问题,其中菜单显示和A/D转换是好的,然而电机不转,LED灯也不能正确的显示电机的转速(即相应的速度对应的相应的等不能正常显示)针对原来的程序及老师给的要求进行修改,并添加了一个判断是否有按键输入的子程序通过调整不同的速度后来实现任意状态下的按键停止。

12

九、程序代码

***************根据CHECK配置信息修改下列符号值******************* INTR_IVADD EQU 01CCH ;INTR对应的中断矢量地址

INTR_OCW1 EQU 0A1H ;INTR对应PC机内部8259的OCW1地址

INTR_OCW2 EQU 0A0H ;INTR对应PC机内部8259的OCW2地址

INTR_IM EQU 0F7H ;INTR对应的中断屏蔽字 PCI_INTCSR EQU 0EC38H ;PCI卡中断控制寄存器地址 IOY0 EQU 0C400H ;片选IOY0对应的端口始地址 IOY1 EQU 0C440H IOY2 EQU 0C480H IOY3 EQU 0C4C0H

;***************************************************************** MY8255_A EQU IOY0+00H*4 ;8255的A口地址 MY8255_B EQU IOY0+01H*4 ;8255的B口地址 MY8255_C EQU IOY0+02H*4 ;8255的C口地址 MY8255_MODE EQU IOY0+03H*4 ;8255的控制寄存器地址

PC8254_COUNT0 EQU 40H ;PC机内8254定时器0端口地址 PC8254_MODE EQU 43H ;PC机内8254控制寄存器端口地址

AD0809 EQU IOY1+00H

STACK1 SEGMENT STACK

DW 64 DUP(?) TOP LABEL WORD STACK1 ENDS

DATA SEGMENT

TABLE1 DB 'Assumed Fan Speed:(/s)','$' ;字符串变量 TABLE2 DB 'Current Fan Speed:(/s)','$' ;字符串变量

13

ENT DB ' ','$' ;换行,回车 CS_BAK DW ? ;保存INTR原中断处理程序入口段地址的变量

IP_BAK DW ? ;保存INTR原中断处理程序入口偏移地址的变量

IM_BAK DB ? ;保存INTR原中断屏蔽字的变量 CS_BAK1 DW ? ;保存定时器0中断处理程序入口段地址的变量

IP_BAK1 DW ? ;保存定时器0中断处理程序入口偏移地址的变量

IM_BAK1 DB ? ;保存定时器0中断屏蔽字的变量 DTABLE

值表,0~F对应的7段数码管的

TS DB 14H ;采样周期 SPEC DW ? ;转速给定值 IBAND DW 0060H ;积分分离值 KPP DW 1060H ;比例系数 KII DW 0010H ;积分系数 KDD DW 0020H ;微分系数

YK DW ? CK DB ? VADD DW ? ZV DB ? ZVV DB ? TC DB ? FPWM DB ? CK_1 DB ? EK_1 DW ? AEK_1 DW ? BEK DW ? AAAA DB ? VAA DB ? BBB DB ?

14

DB

3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H ;键

VBB DB ? MARK DB ? R0 DW ? R1 DW ? R2 DW ? R3 DW ? R4 DW ? R5 DW ? R6 DW ? R7 DB ? R8 DW ? DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA MOV DS,AX

MOV SI,3000H ; MOV AL,00H ; MOV [SI],AL MOV [SI+1],AL MOV [SI+2],AL MOV [SI+3],AL MOV DI,3001H

; MOV DX,OFFSET TABLE1 ; ; MOV AH,09H ; INT 21H

; MOV AX,SPEC ; ; CALL DECSHOW

; MOV DX,OFFSET ENT ; ; MOV AH,09H ; INT 21H

; MOV DX,OFFSET TABLE2 ;

建立缓冲区,存放要显示的键值先初始化键值为0 显示字符串1 显示给定值 回车,换行 显示字符串2

15

; MOV AH,09H ; INT 21H

CLI

MOV AX,0000H MOV ES,AX

MOV DI,0020H MOV AX,ES:[DI]

MOV IP_BAK1,AX ;保存定时器0中断处理程序入口偏移地址 MOV AX,OFFSET TIMERISR

MOV ES:[DI],AX ;设置实验定时中断处理程序入口偏移地址 ADD DI,2

MOV AX,ES:[DI]

MOV CS_BAK1,AX ;保存定时器0中断处理程序入口段地址 MOV AX,SEG TIMERISR

MOV ES:[DI],AX ;设置实验定时中断处理程序入口段地址

IN AL,21H

MOV IM_BAK1,AL ;保存INTR原中断屏蔽字 AND AL,0F7H

OUT 21H,AL ;打开定时器0中断屏蔽位

MOV DX,PCI_INTCSR ;初始化PCI卡中断控制寄存器 MOV AX,1F00H ;向PCI_INTCSR中写入003F1F00H OUT DX,AX ADD DX,2 MOV AX,003FH OUT DX,AX

MOV DI,INTR_IVADD MOV AX,ES:[DI]

MOV IP_BAK,AX ;保存INTR原中断处理程序入口偏移地址 MOV AX,OFFSET MYISR

MOV ES:[DI],AX ;设置当前中断处理程序入口偏移地址

16

ADD DI,2 MOV AX,ES:[DI]

MOV CS_BAK,AX ;保存INTR原中断处理程序入口段地址 MOV AX,SEG MYISR

MOV ES:[DI],AX ;设置当前中断处理程序入口段地址

MOV DX,INTR_OCW1 IN AL,DX

MOV IM_BAK,AL ; AND AL,INTR_IM

OUT DX,AL ; MOV AL,00H

MOV DX,AD0809 ; OUT DX,AL

MOV VADD,0000H ; MOV ZV,00H MOV ZVV,00H MOV CK,00H MOV YK,0000H MOV CK_1,00H MOV EK_1,0000H MOV AEK_1,0000H MOV BEK,0000H MOV BBB,00H MOV VBB,00H MOV R0,0000H MOV R1,0000H MOV R2,0000H MOV R3,0000H MOV R4,0000H MOV R5,0000H MOV R6,0000H MOV R7,00H MOV R8,0000H

保存INTR原中断屏蔽字 打开INTR的中断屏蔽位 启动A/D转换 变量的初始化 17

MOV MARK,00H MOV FPWM,01H MOV AAAA,7FH MOV VAA,7FH MOV TC,00H

MOV AL,80H ;初始化8255 MOV DX,MY8255_MODE OUT DX,AL MOV AL,00H MOV DX,MY8255_B OUT DX,AL

MOV DX,PC8254_MODE ; MOV AL,36H OUT DX,AL

MOV DX,PC8254_COUNT0 MOV AL,8FH OUT DX,AL MOV AL,04H OUT DX,AL

STI

M1: MOV AL,TS ; SUB AL,TC;

JNC M1 ;; MOV DX,OFFSET TABLE1 ; ; MOV AH,09H ; INT 21H

MOV AL,00H

MOV DX,AD0809 ;

初始化PC机定时器0,定时1ms 判断采样周期到否? 没到则继续等待 显示字符串1 启动A/D转换

18

OUT DX,AL CALL DALLY

MOV DX,AD0809 ;读出转换结果 IN AL,DX MOV CL,00H CMP AL,CL JS B2 MOV CL,3ch CMP CL,AL JS B2 JMP B3

B1: MOV AL,00H JMP B3 B2: MOV AL,3cH B3: MOV DI,OFFSET SPEC MOV [DI],AL MOV AX,[DI] CALL DECSHOW CALL SHOW1

MOV DX,OFFSET ENT ; MOV AH,09H INT 21H

; MOV DX,OFFSET TABLE2 ; ; MOV AH,09H ; INT 21H

MOV TC,00H ; MOV AL,ZVV MOV AH,00H

MOV YK,AX ; CALL PID ;

回车,换行 显示字符串2 采样周期到,将采样周期变量清0 得到反馈量YK

调用PID子程序,得到控制量CK

19

MOV AL,CK ;把控制量转化成PWM输出 SUB AL,80H JC IS0 MOV AAAA,AL JMP COU

IS0: MOV AL,10H ; MOV AAAA,AL COU: MOV AL,7FH SUB AL,AAAA MOV BBB,AL

MOV AX,YK ; CALL DECSHOW

MOV DL,0DH ; MOV AH,02H INT 21H

MOV AH,1 ; INT 16H

JZ M1 ;

EXIT: CLI

MOV AL,00H ; MOV DX,MY8255_B OUT DX,AL

MOV DX,PC8254_MODE ; MOV AL,36H OUT DX,AL

MOV DX,PC8254_COUNT0 MOV AL,00H OUT DX,AL

电机的启动值不能低于10H 将反馈值YK送到屏幕显示 回车 判断是否有按键按下 无按键则跳回继续等待,有则退出退出时停止电机运转 恢复PC机定时器0状态 20

MOV AL,00H OUT DX,AL

MOV DX,PCI_INTCSR ;恢复PCI卡中断控制寄存器 MOV AX,0000H OUT DX,AX

MOV AX,0000H ; MOV ES,AX

MOV DI,INTR_IVADD

MOV AX,IP_BAK ; MOV ES:[DI],AX ADD DI,2

MOV AX,CS_BAK ; MOV ES:[DI],AX

MOV DX,INTR_OCW1 ; MOV AL,IM_BAK OUT DX,AL

MOV DI,0020H

MOV AX,IP_BAK1 ; MOV ES:[DI],AX ADD DI,2

MOV AX,CS_BAK1 ; MOV ES:[DI],AX

MOV AL,IM_BAK1

OUT 21H,AL ; STI

MOV AX,4C00H INT 21H

MYISR PROC NEAR ;

恢复INTR原中断矢量 恢复INTR原中断处理程序入口偏移地址恢复INTR原中断处理程序入口段地址恢复INTR原中断屏蔽寄存器的屏蔽字恢复定时器0中断处理程序入口偏移地址恢复定时器0中断处理程序入口段地址恢复屏蔽字 系统总线INTR中断处理程序

21

PUSH AX PUSH CX PUSH DX MOV AX,DATA MOV DS,AX

MOV AL,MARK CMP AL,01H JZ IN1

MOV MARK,01H JMP IN2

IN1: MOV MARK,00H ;VV: MOV DX,0000H MOV AX,03E8H MOV CX,VADD CMP CX,0000H JZ MM1 DIV CX MM: MOV ZV,AL

MOV VADD,0000H MM1: MOV AL,ZV MOV ZVV,AL

IN2: MOV DX,PCI_INTCSR ; SUB DX,19H IN AL,DX MOV DX,PCI_INTCSR ADD DX,2 MOV AX,003FH OUT DX,AX

MOV DX,INTR_OCW2 ; MOV AL,20H

计算转速 清PCI卡控制寄存器标志位 向PC机内部8259发送中断结束命令22

OUT DX,AL MOV AL,20H OUT 20H,AL POP DX POP CX POP AX IRET MYISR ENDP

TIMERISR PROC NEAR ;PC PUSH AX PUSH CX PUSH DX MOV AX,DATA MOV DS,AX

INC TC ; CALL KJ CLC

CMP MARK,01H JC TT1

INC VADD

CMP VADD,0700H ; JC TT1

MOV VADD,0700H MOV MARK,00H

TT1: MOV AL,20H ; OUT 20H,AL POP DX POP CX POP AX

机定时器0中断处理程序采样周期变量加1 转速值溢出,赋极值 中断结束,发EOI命令 23

IRET TIMERISR ENDP

KJ PROC NEAR ;PWM子程序 PUSH AX

CMP FPWM,01H ;PWM为1,产生PWM的高电平 JNZ TEST2 CMP VAA,00H JNZ ANOT0

MOV FPWM,02H MOV AL,BBB CLC

RCR AL,01H MOV VBB,AL JMP TEST2

ANOT0: DEC VAA

MOV AL, 01H ;PB0=1 MOV DX, MY8255_B OUT DX,AL

TEST2: CMP FPWM,02H ;PWM JNZ OUTT CMP VBB,00H JNZ BNOT0

MOV FPWM,01H MOV AL,AAAA CLC

RCR AL,01H MOV VAA,AL JMP OUTT

电机转动 为2,产生PWM的低电平 24

BNOT0: DEC VBB

MOV AL,00H ;PB0=0 电机停止 MOV DX,MY8255_B OUT DX,AL

OUTT: POP AX RET KJ ENDP

PID: MOV AX,SPEC ;PID SUB AX,YK ; MOV R0,AX MOV R1,AX SUB AX,EK_1 MOV R2,AX

SUB AX,AEK_1 ; MOV BEK,AX MOV R8,AX

MOV AX,R1 ; MOV EK_1,AX MOV AX,R2 MOV AEK_1,AX TEST R1,8000H

JZ EK1 ; NEG R1 ;EK1: MOV AX,R1 ; SUB AX,IBAND

JC II ; MOV R3,00H ; JMP DDD ;II: MOV AL,TS ;(R3=EK*TS/KII)

MOV AH,00H ;

子程序 求偏差EK 求BEK 求偏差变化量AEK 若偏差EK为正数,则不需要求补码 若偏差EK为负数,则求偏差EK的补码 判断偏差EK是否在积分分离值的范围内 在积分分离值范围内,则跳转到II计算积分项若不在积分分离值范围内,则将积分项清0 计算微分项

计算积分项,结果放在R3变量中其中TS和KII均为正数,所以R3的正负由EK决定25

MOV CX,R1 MUL CX MOV CX,KII DIV CX MOV R3,AX

TEST R0,8000H ;判断积分项的正负

JZ DDD ;为正数,则跳转去计算微分项 NEG R3 ;DDD: TEST BEK,8000H ; JZ DDD1 ; NEG BEK ;DDD1: MOV AX,BEK ; MOV CX,KDD MUL CX PUSH AX PUSH DX MOV AL,TS

MOV AH,00H ; MOV CX,0008H MUL CX MOV CX,AX POP DX POP AX DIV CX MOV R4,AX

TEST R8,8000H ; JZ DD1 ; NEG R4 ;DD1: MOV AX,R3 ; ADD AX,R4 MOV R5,AX

JO L9 ;L2: MOV AX,R5 ADD AX,R2

MOV R6,AX ;R6=R5+R2=

为负数,则将积分项的结果求补码 判断BEK的正负 为正数,则BEK不变 为负数,则求BEK的补码 计算微分项(R4=KDD*BEK/8TS) 将微分项缩小8倍,防止溢出 判断微分项的正负

为正数,则结果不需要求补码 为负数,则微分项结果R4求补码 积分项和微分项相加,结果放在R5变量中判断溢出 积分项+微分项+AEK

26

JO L3

L5: MOV AX,R6 ;计算KPP*R6 MOV CX,KPP IMUL CX MOV CX,1000H IDIV CX MOV CX,AX

RCL AH,01H ; PUSHF RCR AL,01H POPF JC LLL1 CMP CH,00H JZ LLL2 MOV AL,7FH JMP LLL2 LLL1: CMP CH,0FFH JZ LLL2 MOV AL,80H

LLL2: MOV R7,AL ;CK=CK_1+CK ADD AL,CK_1 JO L8 L18: MOV CK_1,AL ADD AL,80H MOV CK,AL RET

L8: TEST R7,80H ;CK JNZ L17

MOV AL,7FH ; JMP L18

L17: MOV AL,80H ; JMP L18 L9: TEST R3,8000H JNZ L1

MOV R5,7FFFH ;

判断溢出,溢出赋极值 溢出处理程序 若为正溢出,则赋给正极值7FH 若为负溢出,则赋给赋极值80H 若为正溢出,则赋给正极值7FFFH

27

JMP L2

L1: MOV R5,8000H ;若为负溢出,则赋给负极值8000H JMP L2 L3: TEST R2,8000H JNZ L4 MOV R6,7FFFH JMP L5 L4: MOV R6,8000H JMP L5

DECSHOW PROC NEAR ; MOV DX,0

MOV BX,10 ; DIV BX

ADD AL,30H ;

MOV AH,0EH INT 10H

ADD DL,30H ; MOV AH,2 INT 21H

RET DECSHOW ENDP

SHOW1 PROC NEAR

;BEGIN: CALL DIS ; 显示刷新 ;CALL CLEAR ; 清屏 ;JMP GETKEY1 ;INT 16H ;JZ BEGIN

完成两位十进制数显示子程序 计算AX/10 商+30H,即为十位数ASCII码 余+30H,即为个位数ASCII码 28

;QUIT: MOV AX,4C00H ;返回到DOS ; INT 21H

;GETKEY1:CALL DIS ;显示刷新 ;CALL DALLY1 ; CALL DALLY1 ; CALL CLEAR ;清屏

; JMP GETKEY2 ;GETKEY2:MOV CH,0FEH

; MOV CL,00H ;设置当前检测的是第几列

;COLUM: MOV AL,CH ; MOV DX,MY8255_C ; OUT DX,AL ;CLEAR PRC NEAR

;MOV DX,MY8255_A ;段位置0 即可清除数码管显示 ;MOV AL,00H ;OUT DX,AL ;RET ;CLEAR ENDP ;RET ;MOV AX,SPEC

;DIS PROC NEAR ;显示键值子程序 MOV AX,SPEC

MOV DX,0

MOV BX,10 ;计算AX/10 DIV BX

MOV SI,3001H

MOV [SI],AL ;在缓冲区存入十位数字

29

MOV [SI-1],DL ;在缓冲区存入个位数字

AGAIN: PUSH DX ;CALL DALLY1

MOV DX,MY8255_C

OUT DX,AL ;设置X1~X4,选通一个数码管 MOV AL,[SI] ;取出缓冲区中所放个位数值 MOV BX,OFFSET DTABLE AND AX,00FFH ADD BX,AX

MOV AL,[BX] ;求得数字对应数码管的段位值 MOV DX,MY8255_A

OUT DX,AL ;写入数码管A~Dp CALL DALLY1

MOV AL,00H;取出缓冲区中所放个位数值 OUT DX,AL PUSH AX MOV SI,3000H MOV DL,0FDH MOV AL,DL MOV CX,2

INC SI

;取十位数? POP DX ;判断是否显示完? MOV AL,DL ;显示完,返回 ROR AL,1 MOV DL,AL

LOOP AGAIN ;未显示完,跳回继续 OUT1: POP AX ;DIS ;RET

30

RET

SHOW1 ENDP

DALLY1 PROC NEAR ;软件延时子程序 PUSH CX MOV CX,070FFH D1: MOV AX,0300H D2: DEC AX JNZ D2 LOOP D1 POP CX RET

DALLY1 ENDP

DALLY PROC NEAR ; PUSH CX

PUSH AX

MOV CX,0100H D3: MOV AX,0010H D4: DEC AX JNZ D4 LOOP D3 POP AX POP CX RET

DALLY ENDP

CODE END

END START

软件延时子程序 31

十、心得体会

“微机原理与接口技术” 作为电子信息类本科生教学的主要基础课之一,课程紧密结合电子信息类的专业特点,围绕微型计算机原理和应用主题,Intelx86CPU为主线,系统介绍微型计算机的基本知识,基本组成,体系结构和工作模式,从而使学生能较清楚地了解微机的结构与工作流程,建立起系统的概念。

这次微机原理课程设计历时三个星期,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。以前在上课的时候,老师经常强调在写一个程序的时候,一定要事先把程序原理方框图化出来,但是我开始总觉得这样做没必要,很浪费时间。但是,这次课程设计完全改变了我以前的那种错误的认识,以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的那些需要很多代码才能完成的任务,画程序方框图是很有必要的。因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错。

其次,以前对于编程工具的使用还处于一知半解的状态上,但是经过一段上机的实践,对于怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个寄存器的内容以确保程序的正确性上都有了很大程度的提高。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在李老师的辛勤指导下,终于游逆而解。

32

十一、参考文献

(1).李珍香,刘红梅,赵润林。汇编语言课程设计案例精编。北京:中国水利水电出版社,2004.3

(2).卜艳萍,周伟。汇编语言程序设计教程。北京:清华大学出版社,2007 (3).沈美明,温冬婵。IBM PC汇编语言程序设计。北京:清华大学出版社,2001 (4). 王爽.汇编语言。北京:清华大学出版社。2008

(5).周荷琴,吴秀清。微型计算机原理与接口技术。中国科学技术大学出版社。2008

33

本文来源:https://www.bwwdw.com/article/51kp.html

Top