微机原理与汇编语言程序设计直流电机转速控制模板Word文档格式.docx

上传人:b****4 文档编号:17740751 上传时间:2022-12-09 格式:DOCX 页数:25 大小:319.99KB
下载 相关 举报
微机原理与汇编语言程序设计直流电机转速控制模板Word文档格式.docx_第1页
第1页 / 共25页
微机原理与汇编语言程序设计直流电机转速控制模板Word文档格式.docx_第2页
第2页 / 共25页
微机原理与汇编语言程序设计直流电机转速控制模板Word文档格式.docx_第3页
第3页 / 共25页
微机原理与汇编语言程序设计直流电机转速控制模板Word文档格式.docx_第4页
第4页 / 共25页
微机原理与汇编语言程序设计直流电机转速控制模板Word文档格式.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

微机原理与汇编语言程序设计直流电机转速控制模板Word文档格式.docx

《微机原理与汇编语言程序设计直流电机转速控制模板Word文档格式.docx》由会员分享,可在线阅读,更多相关《微机原理与汇编语言程序设计直流电机转速控制模板Word文档格式.docx(25页珍藏版)》请在冰豆网上搜索。

微机原理与汇编语言程序设计直流电机转速控制模板Word文档格式.docx

即拆分法。

如两位十进制AB转换为A*10+B的形式,再通过A+30H与B+30H来转换为ASCII码,若溢出,加7运算。

DECSHOWPROCNEAR;

完成两位十进制数显示子程序

MOVDX,0

MOVBX,10;

计算AX/10

DIVBX

ADDAL,30H;

商+30H,即为十位数ASCII码

MOVAH,0EH

INT10H

ADDDL,30H;

余+30H,即为个位数ASCII码

MOVAH,2

INT21H

RET

DECSHOWENDP

 

实验接线图:

转速调节程序设计框图:

(a)转速调节主程序

主程序流程图:

程序清单:

;

***************根据CHECK配置信息修改下列符号值*******************

INTR_IVADDEQU0038H;

INTR对应的中断矢量地址

INTR_OCW1EQU21H;

INTR对应PC机内部8259的OCW1地址

INTR_OCW2EQU20H;

INTR对应PC机内部8259的OCW2地址

INTR_IMEQU0BFH;

INTR对应的中断屏蔽字

PCI_INTCSREQU0CC38H;

PCI卡中断控制寄存器地址

IOY0EQU0C400H;

片选IOY0对应的端口始地址

IOY1EQU0C440H;

*****************************************************************

MY8255_AEQUIOY0+00H*4;

8255的A口地址

MY8255_BEQUIOY0+01H*4;

8255的B口地址

MY8255_CEQUIOY0+02H*4;

8255的C口地址

MY8255_MODEEQUIOY0+03H*4;

8255的控制寄存器地址

AD0809EQUIOY1+00H;

AD0809的端口地址

STACK1SEGMENTSTACK

DW64DUP(?

TOPLABELWORD

STACK1ENDS

DATASEGMENT

TABLE1DB'

AssumedFanSpeed:

(/s)'

0AH,0DH,'

$'

;

字符串变量

TABLE2DB'

CurrentFanSpeed:

ENTDB0AH,0DH,'

换行,回车

CS_BAKDW?

保存INTR原中断处理程序入口段地址的变量

IP_BAKDW?

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

IM_BAKDB?

保存INTR原中断屏蔽字的变量

CS_BAK1DW?

保存定时器0中断处理程序入口段地址的变量

IP_BAK1DW?

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

IM_BAK1DB?

保存定时器0中断屏蔽字的变量

TSDB14H;

采样周期

SPECDW55;

转速给定值

IBANDDW0060H;

积分分离值

KPPDW1060H;

比例系数

KIIDW0010H;

积分系数

KDDDW0020H;

微分系数

YKDW?

CKDB?

VADDDW?

ZVDB?

ZVVDB?

TCDB?

FPWMDB?

CK_1DB?

EK_1DW?

AEK_1DW?

BEKDW?

AAAADB?

VAADB?

BBBDB?

VBBDB?

MARKDB?

R0DW?

R1DW?

R2DW?

R3DW?

R4DW?

R5DW?

R6DW?

R7DB?

R8DW?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETTABLE1;

显示字符串1

MOVAH,09H

MOVAX,SPEC;

显示给定值

CALLDECSHOW

MOVDX,OFFSETENT;

回车,换行

MOVDX,OFFSETTABLE2;

显示字符串2

CLI

MOVAX,0000H

MOVES,AX

MOVDI,0020H

MOVAX,ES:

[DI]

MOVIP_BAK1,AX;

保存定时器0中断处理程序入口偏移地址

MOVAX,OFFSETTIMERISR

MOVES:

[DI],AX;

设置实验定时中断处理程序入口偏移地址

ADDDI,2

MOVCS_BAK1,AX;

保存定时器0中断处理程序入口段地址

MOVAX,SEGTIMERISR

设置实验定时中断处理程序入口段地址

INAL,21H

MOVIM_BAK1,AL;

保存INTR原中断屏蔽字

ANDAL,0F7H

OUT21H,AL;

打开定时器0中断屏蔽位

MOVDX,PCI_INTCSR;

初始化PCI卡中断控制寄存器

MOVAX,1F00H;

向PCI_INTCSR中写入003F1F00H

OUTDX,AX

ADDDX,2

MOVAX,003FH

MOVDI,INTR_IVADD

MOVIP_BAK,AX;

保存INTR原中断处理程序入口偏移地址

MOVAX,OFFSETMYISR

设置当前中断处理程序入口偏移地址

MOVCS_BAK,AX;

保存INTR原中断处理程序入口段地址

MOVAX,SEGMYISR

设置当前中断处理程序入口段地址

MOVDX,INTR_OCW1

INAL,DX

MOVIM_BAK,AL;

ANDAL,INTR_IM

OUTDX,AL;

打开INTR的中断屏蔽位

MOVVADD,0000H;

变量的初始化

MOVZV,00H

MOVZVV,00H

MOVCK,00H

MOVYK,0000H

MOVCK_1,00H

MOVEK_1,0000H

MOVAEK_1,0000H

MOVBEK,0000H

MOVBBB,00H

MOVVBB,00H

MOVR0,0000H

MOVR1,0000H

MOVR2,0000H

MOVR3,0000H

MOVR4,0000H

MOVR5,0000H

MOVR6,0000H

MOVR7,00H

MOVR8,0000H

MOVMARK,00H

MOVFPWM,01H

MOVAAAA,7FH

MOVVAA,7FH

MOVTC,00H

MOVAL,80H;

初始化8255

MOVDX,MY8255_MODE

OUTDX,AL

MOVAL,00H

MOVDX,MY8255_B

MOVDX,MY8255_A

MOVDX,PC8254_MODE;

初始化PC机定时器0,定时1ms

MOVAL,36H

MOVDX,PC8254_COUNT0

MOVAL,8FH

MOVAL,04H

STI

M1:

MOVAL,TS;

判断采样周期到否?

SUBAL,TC

JNCM1;

没到则继续等待

MOVTC,00H;

采样周期到,将采样周期变量清0

MOVAL,ZVV

MOVAH,00H

MOVYK,AX;

得到反馈量YK

LOOP1:

MOVDX,AD0809;

启动A/D转换

CALLDALLY

读出转换结果

MOVDX,MY8255_A;

将结果显示于LED

MOVBL,AL

MOVBH,0

CALLPID;

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

MOVAL,CK;

把控制量转化成PWM输出

SUBAL,80H

JCIS0

MOVAAAA,AL

JMPCOU

IS0:

MOVAL,10H;

电机的启动值不能低于10H

COU:

MOVAL,7FH

SUBAL,AAAA

MOVBBB,AL

MOVAX,YK;

将反馈值YK送到屏幕显示

MOVDL,0DH;

回车

MOVAH,02H

MOVAH,1;

判断是否有按键按下

INT16H

JZM1;

无按键则跳回继续等待,有则退出

EXIT:

MOVAL,00H;

退出时停止电机运转

恢复PC机定时器0状态

恢复PCI卡中断控制寄存器

MOVAX,0000H;

恢复INTR原中断矢量

MOVAX,IP_BAK;

恢复INTR原中断处理程序入口偏移地址

[DI],AX

MOVAX,CS_BAK;

恢复INTR原中断处理程序入口段地址

MOVDX,INTR_OCW1;

恢复INTR原中断屏蔽寄存器的屏蔽字

MOVAL,IM_BAK

MOVAX,IP_BAK1;

恢复定时器0中断处理程序入口偏移地址

MOVAX,CS_BAK1;

恢复定时器0中断处理程序入口段地址

MOVAL,IM_BAK1

恢复屏蔽字

MOVAX,4C00H

MYISRPROCNEAR;

系统总线INTR中断处理程序

PUSHAX

PUSHCX

PUSHDX

MOVAL,MARK

CMPAL,01H

JZIN1

MOVMARK,01H

JMPIN2

IN1:

MOVMARK,00H;

计算转速

VV:

MOVDX,0000H

MOVAX,03E8H

MOVCX,VADD

CMPCX,0000H

JZMM1

DIVCX

MM:

MOVZV,AL

MOVVADD,0000H

MM1:

MOVAL,ZV

MOVZVV,AL

IN2:

清PCI卡控制寄存器标志位

SUBDX,19H

MOVDX,PCI_INTCSR

MOVDX,INTR_OCW2;

向PC机内部8259发送中断结束命令

MOVAL,20H

OUT20H,AL

POPDX

POPCX

POPAX

IRET

MYISRENDP

TIMERISRPROCNEAR;

PC机定时器0中断处理程序

INCTC;

采样周期变量加1

CALLKJ

CLC

CMPMARK,01H

JCTT1

INCVADD

CMPVADD,0700H;

转速值溢出,赋极值

MOVVADD,0700H

TT1:

MOVAL,20H;

中断结束,发EOI命令

TIMERISRENDP

KJPROCNEAR;

PWM子程序

CMPFPWM,01H;

PWM为1,产生PWM的高电平

JNZTEST2

CMPVAA,00H

JNZANOT0

MOVFPWM,02H

MOVAL,BBB

RCRAL,01H

MOVVBB,AL

JMPTEST2

ANOT0:

DECVAA

MOVAL,01H;

PB0=1电机转动

MOVDX,MY8255_B

TEST2:

CMPFPWM,02H;

PWM为2,产生PWM的低电平

JNZOUTT

CMPVBB,00H

JNZBNOT0

MOVAL,AAAA

MOVVAA,AL

JMPOUTT

BNOT0:

DECVBB

PB0=0电机停止

OUTT:

KJENDP

PID:

MOVAX,BX;

PID子程序

SUBAX,YK;

求偏差EK

MOVR0,AX

MOVR1,AX

SUBAX,EK_1

MOVR2,AX

SUBAX,AEK_1;

求BEK

MOVBEK,AX

MOVR8,AX

MOVAX,R1;

求偏差变化量AEK

MOVEK_1,AX

MOVAX,R2

MOVAEK_1,AX

TESTR1,8000H

JZEK1;

若偏差EK为正数,则不需要求补码

NEGR1;

若偏差EK为负数,则求偏差EK的补码

EK1:

判断偏差EK是否在积分分离值的范围内

SUBAX,IBAND

JCII;

在积分分离值范围内,则跳转到II,计算积分项

MOVR3,00H;

若不在积分分离值范围内,则将积分项清0

JMPDDD;

计算微分项

II:

计算积分项,结果放在R3变量中(R3=EK*TS/KII)

MOVAH,00H;

其中TS和KII均为正数,所以R3的正负由EK决定

MOVCX,R1

MULCX

MOVCX,KII

MOVR3,AX

TESTR0,8000H;

判断积分项的正负

JZDDD;

为正数,则跳转去计算微分项

NEGR3;

为负数,则将积分项的结果求补码

DDD:

TESTBEK,8000H;

判断BEK的正负

JZDDD1;

为正数,则BEK不变

NEGBEK;

为负数,则求BEK的补码

DDD1:

MOVAX,BEK;

计算微分项(R4=KDD*BEK/8TS)

MOVCX,KDD

MOVAL,TS

将微分项缩小8倍,防止溢出

MOVCX,0008H

MOVCX,AX

MOVR4,AX

TESTR8,8000H;

判断微分项的正负

JZDD1;

为正数,则结果不需要求补码

NEGR4;

为负数,则微分项结果R4求补码

DD1:

MOVAX,R3;

积分项和微分项相加,结果放在R5变量中

ADDAX,R4

MOVR5,AX

JOL9;

判断溢出

L2:

MOVAX,R5

ADDAX,R2

MOVR6,AX;

R6=R5+R2=积分项+微分项+AEK

JOL3

L5:

MOVAX,R6;

计算KPP*R6

MOVCX,KPP

IMULCX

MOVCX,1000H

IDIVCX

RCLAH,01H;

判断溢出,溢出赋极值

PUSHF

POPF

JCLLL1

CMPCH,00H

JZLLL2

JMPLLL2

LLL1:

CMPCH,0FFH

MOVAL,80H

LLL2:

MOVR7,AL;

CK=CK_1+CK

ADDAL,CK_1

JOL8

L18:

MOVCK_1,AL

ADDAL,80H

MOVCK,AL

L8:

TESTR7,80H;

CK溢出处理程序

JNZL17

MOVAL,7FH;

若为正溢出,则赋给正极值7FH

JMPL18

L17:

若为负溢出,则赋给赋极值80H

L9:

TESTR3,8000H

JNZL1

MOVR5,7FFFH;

若为正溢出,则赋给正极值7FFFH

JMPL2

L1:

MOVR5,8000H;

若为负溢出,则赋给负极值8000H

L3:

TESTR2,8000H

JNZL4

MOVR6,7FFFH

JMPL5

L4:

MOVR6,8000H

DALLYPROCNEAR;

软件延时子程序

MOVCX,4000H

D1:

MOVAX,0600H

D2:

DEC

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 互联网

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1