




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
附录4 汇编语言程序清单 ;*根据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 0CC38H ;PCI卡中断控制寄存器地址 IOY0 EQU 0C400H ;片选IOY0对应的端口始地址 IOY1 EQU 0C440H ;片选IOY1对应的端口始地址 IOY2 EQU 0C480H ;片选IOY2对应的端口始地址;* 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的控制寄存器地址 MYIO_A EQU IOY1+00H*4 ;基本输入输出单元A组端口地址 MYIO_B EQU IOY2+00H*4 ;基本输入输出单元B组端口地址 PC8254_COUNT0 EQU 40H ;PC机内8254定时器0端口地址 PC8254_MODE EQU 43H ;PC机内8254控制寄存器端口地址;堆栈段 STACK1 SEGMENT STACK DW 64 DUP(?) TOP LABEL WORD STACK1 ENDS;数据段 DATA SEGMENT TABLE1 DB Assumed Fan Speed:(/s),0AH,0DH,$ ;字符串变量 TABLE2 DB Current Fan Speed:(/s),0AH,0DH,$ ;字符串变量 ENT DB 0AH,0DH,$ ;换行,回车 CS_BAK DW ? ;保存INTR原中断处理程序入口段地址的变量 IP_BAK DW ? ;保存INTR原中断处理程序入口偏移地址的变量 IM_BAK DB ? ;保存INTR原中断屏蔽字的变量 CS_BAK1 DW ? ;保存定时器0中断处理程序入口段地址的变量 IP_BAK1 DW ? ;保存定时器0中断处理程序入口偏移地址的变量 IM_BAK1 DB ? ;保存定时器0中断屏蔽字的变量 TS DB 14H ;采样周期 SPEC DW 56 ;转速给定值 CSPD 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 ? VBB DB ? MARK DB ? R0 DW ? R1 DW ? R2 DW ? R3 DW ? R4 DW ? R5 DW ? R6 DW ? R7 DB ? R8 DW ? ;*MYDATA* DTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H ;键值表,0F对应的7段数码管的段位值 DTABLEK DB 06DH,77H,73H,30H,5EH ;存放数码管要显示的类型号, s:实时速度 A:设置的速度 P:参数KPP I:参数KII d:参数KDD SHOWTYPE DB 0 ;存放显示类型号,0在数码管处显示实时速度,1在数码管处显示设置速度,2在数码管处显示KPP参数,3在数码管处显示KII参数,4在数码管处显示KDD参数 LEDBIT DB 3 ;数码的列位,0,1,2,3 KEY DB ? ;1或2,按下了1号键,则置1,按下了2号键则置2 TEMP1 DW 00FFH ;临时变量 BUF DB 8 DUP(?) ;缓冲区 DATA ENDS;代码段 CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX;主程序 MAIN: MOV DX,OFFSET TABLE1 ;显示字符串1 MOV AH,09H INT 21H MOV AX,SPEC ;显示给定值 CALL DECSHOW MOV DX,OFFSET ENT ;回车,换行 MOV AH,09H INT 21H MOV DX,OFFSET TABLE2 ;显示字符串2 MOV AH,09H INT 21H ;初始化 CALL INIT ;开始处理 M1: MOV AL,TS ;判断采样周期到否? SUB AL,TC JNC M1 ;没到则继续等待 MOV TC,00H ;采样周期到,将采样周期变量清0 MOV AL,ZVV MOV AH,00H MOV YK,AX ;得到反馈量YK CALL PID ;调用PID子程序,得到控制量CK MOV AL,CK ;把控制量转化成PWM输出 SUB AL,80H JC IS0 MOV AAAA,AL JMP COU IS0: MOV AL,10H ;电机的启动值不能低于10H MOV AAAA,AL COU: MOV AL,7FH SUB AL,AAAA MOV BBB,AL MOV AX,YK ;将反馈值YK送到屏幕显示 MOV DI,OFFSET CSPD MOV DI,AX CALL DECSHOW MOV DL,0DH ;回车 MOV AH,02H INT 21H CALL KEYSCAN ;CALL CLEAR ; CALL DIS MOV AH,1 ;判断是否有按键按下 INT 16H JZ M1 ;无按键则跳回继续等待,有则退出 EXIT: CALL DESTROY ;销毁程序,恢复现场,停止电机运转 MOV AX,4C00H INT 21H ;键盘扫描子程序 KEYSCAN PROC NEAR PUSH AX PUSH DX MOV AX,DATA MOV DS,AX BEGIN: CALL DIS ;显示刷新 CALL CLEAR ;清屏 CALL CCSCAN ;扫描按键 JNZ GETKEY1 ;有键按下则跳置GETKEY1 ; GETKEY1: CALL DIS ;显示刷新 CALL DALLY1 CALL DALLY1 CALL CLEAR ;清屏 CALL CCSCAN ;再次扫描按键 JNZ GETKEY2 ;有键按下则跳置GETKEY2 JMP ENDKEYSCAN ;否则跳回开始继续循环 GETKEY2: MOV CH,0FEH MOV CL,00H ;设置当前检测的是第几列 COLUM: MOV AL,CH ;选取一列,将X1X4中一个置0 MOV DX,MYIO_A OUT DX,AL IN AL,DX LP1: TEST AL,01H ;是否为第1行 JNZ LP2 ;不是则继续判断 MOV AL,00H ;设置第1行第1列的对应的键值 JMP KCODE LP2: TEST AL,02H ;是否为第2行 JNZ LP3 ;不是则继续判断 MOV AL,04H ;设置第2行第1列的对应的键值 JMP KCODE LP3: TEST AL,04H ;是否为第3行 JNZ LP4 ;不是则继续判断 MOV AL,08H ;设置第3行第1列的对应的键值 JMP KCODE LP4: TEST AL,08H ;是否为第4行 JNZ NEXT ;不是则继续判断 MOV AL,0CH ;设置第4行第1列的对应的键值 KCODE: ADD AL,CL ;将第1列的值加上当前列数,确定按键值;CALL CALL INPUTDEAL ;保存按键值 ; PUSH AX KON: CALL DIS ;显示刷新 CALL CLEAR ;清屏 CALL CCSCAN ;扫描按键,判断按键是否弹起 JNZ KON ;未弹起则继续循环等待弹起 POP AX NEXT: INC CL ;当前检测的列数递增 MOV AL,CH TEST AL,08H ;检测是否扫描到第4列 JZ KERR ;是则跳回到开始处 ROL AL,1 ;没检测到第4列则准备检测下一列 MOV CH,AL JMP COLUM KERR: ;JMP BEGIN ENDKEYSCAN: POP DX POP AX RET KEYSCAN ENDP;按键处理子程序 INPUTDEAL PROC NEAR CMP AL,0 JZ INPUTZERO CMP AL,1 JZ INPUTONE CMP AL,2 JZ INPUTTWO JMP ENDINPUT INPUTZERO: ;按小键盘0,执行功能转换 MOV DI,OFFSET KEY MOV AL,0 MOV DI,AL MOV SI,OFFSET SHOWTYPE MOV AL,SI CMP AL,4 JZ ISFOUR ADD AL,1 MOV SI,AL JMP ENDINPUT ISFOUR: MOV AL,0 MOV SI,AL JMP ENDINPUT INPUTONE: ;按小键盘1,根据功能键,增加参数的值 MOV DI,OFFSET KEY MOV AL,1 MOV DI,AL CALL KDEAL ;调用参数处理函数 JMP ENDINPUT INPUTTWO: ;按小键盘2,根据功能刍,减少参数的值 MOV DI,OFFSET KEY MOV AL,2 MOV DI,AL CALL KDEAL ;调用参数处理函数 JMP ENDINPUT JMP ENDINPUT ENDINPUT: RET INPUTDEAL ENDP;ASPD,KPP,KII,KDD参数修改子程序 KDEAL PROC NEAR MOV SI,OFFSET SHOWTYPE MOV AL,SI CMP AL,1 ;功能1,更改速度 JZ DEALASPD CMP AL,2 ;功能2,更改KPP JZ DEALKPP CMP AL,3 ;功能3,更改KII JZ DEALKII CMP AL,4 ;功能4,更改KDD JZ DEALKDD JMP ENDKDEAL ;修改ASPD(设置速度) DEALASPD: ;根据按键修改SPEC MOV SI,OFFSET KEY MOV AL,SI CMP AL,1 ;如果按了小键盘1,速度就增加1 JZ INCSPEC CMP AL,2 JZ DECSPEC ;如果按了小键盘2,速度就减少1 JMP ENDKDEAL INCSPEC: MOV SI,OFFSET SPEC MOV DX,SI INC DX ;速度加1 MOV SI,DX JMP ENDKDEAL DECSPEC: MOV SI,OFFSET SPEC MOV DX,SI DEC DX ;速度减1 MOV SI,DX JMP ENDKDEAL ;修改KPP DEALKPP: MOV SI,OFFSET KEY MOV AL,SI CMP AL,1 ;如果按的是一号键,则跳转到INCKPP处,KPP加5 JZ INCKPP CMP AL,2 ;如果按的是二号键,则跳转到DECKPP处,KPP减5 JZ DECKPP JMP ENDKDEAL INCKPP: MOV SI,OFFSET KPP MOV DX,SI MOV AX,5H ADD DX,AX ;KPP加5 MOV SI,DX JMP ENDKDEAL DECKPP: MOV SI,OFFSET KPP MOV DX,SI MOV AX,5H SUB DX,AX ;KPP减5 MOV SI,DX JMP ENDKDEAL ;修改KII DEALKII: MOV SI,OFFSET KEY MOV AL,SI CMP AL,1 ;如果按了1号键,则跳转到INCKII标号处,KII加1 JZ INCKII CMP AL,2 ;如果按了2号键,则中转到DECKII标号处,KII减1 JZ DECKII JMP ENDKDEAL INCKII: MOV SI,OFFSET KII MOV DX,SI INC DX ;KII加1 MOV SI,DX JMP ENDKDEAL DECKII: MOV SI,OFFSET KII MOV DX,SI DEC DX ;KII减1 MOV SI,DX JMP ENDKDEAL ;修改KDD DEALKDD: ;根据按键修改KDD MOV SI,OFFSET KEY MOV AL,SI CMP AL,1 JZ INCKDD ;如果按了1号键,则跳转到INCKDD标号处,KDD加1 CMP AL,2 JZ DECKDD ;如果按了2号键,则跳转到DECKDD标号处,KDD减1 JMP ENDKDEAL INCKDD: MOV SI,OFFSET KDD MOV DX,SI INC DX ;KDD加1 MOV SI,DX JMP ENDKDEAL DECKDD: MOV SI,OFFSET KDD MOV DX,SI DEC DX ;KDD减1 MOV SI,DX ENDKDEAL: CALL CLEARKEYS RET KDEAL ENDP;清除显示管屏幕子程序 CLEARKEYS PROC NEAR MOV SI,OFFSET KEY MOV AL,0 MOV SI,AL RET CLEARKEYS ENDP;计算机屏幕显示子程序 DECSHOW PROC NEAR ;完成两位十进制数显示子程序 MOV DX,0 MOV BX,10 ;计算AX/10 DIV BX ADD AL,30H ;商+30H,即为十位数ASCII码 MOV AH,0EH INT 10H ADD DL,30H ;余+30H,即为个位数ASCII码 MOV AH,2 INT 21H RET DECSHOW ENDP;系统总线INTR中断处理程序 MYISR PROC NEAR 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 ;清PCI卡控制寄存器标志位 SUB DX,19H IN AL,DX MOV DX,PCI_INTCSR ADD DX,2 MOV AX,003FH OUT DX,AX MOV DX,INTR_OCW2 ;向PC机内部8259发送中断结束命令 MOV AL,20H OUT DX,AL MOV AL,20H OUT 20H,AL POP DX POP CX POP AX IRET MYISR ENDP;PC机定时器0中断处理程序 TIMERISR PROC NEAR PUSH AX PUSH CX PUSH DX MOV AX,DATA MOV DS,AX INC TC ;采样周期变量加1 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 ;中断结束,发EOI命令 OUT 20H,AL POP DX POP CX POP AX IRET TIMERISR ENDP;PWM子程序 KJ PROC NEAR 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为2,产生PWM的低电平 JNZ OUTT CMP VBB,00H JNZ BNOT0 MOV FPWM,01H MOV AL,AAAA CLC RCR AL,01H MOV VAA,AL JMP OUTT BNOT0: DEC VBB MOV AL,00H ;PB0=0 电机停止 MOV DX,MY8255_B OUT DX,AL OUTT: POP AX RET KJ ENDP;PID子程序 PID PROC NEAR MOV AX,SPEC SUB AX,YK ;求偏差EK MOV R0,AX MOV R1,AX SUB AX,EK_1 MOV R2,AX SUB AX,AEK_1 ;求BEK MOV BEK,AX MOV R8,AX MOV AX,R1 ;求偏差变化量AEK MOV EK_1,AX MOV AX,R2 MOV AEK_1,AX TEST R1,8000H JZ EK1 ;若偏差EK为正数,则不需要求补码 NEG R1 ;若偏差EK为负数,则求偏差EK的补码 EK1: MOV AX,R1 ;判断偏差EK是否在积分分离值的范围内 SUB AX,IBAND JC II ;在积分分离值范围内,则跳转到II,计算积分项 MOV R3,00H ;若不在积分分离值范围内,则将积分项清0 JMP DDD ;计算微分项 II: MOV AL,TS ;计算积分项,结果放在R3变量中(R3=EK*TS/KII) MOV AH,00H ;其中TS和KII均为正数,所以R3的正负由EK决定 MOV CX,R1 MUL CX MOV CX,KII DIV CX MOV R3,AX TEST R0,8000H ;判
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年药店中药饮片管理制度试题及答案
- 心理健康教育与2025年家庭教育的重要性考题及答案
- 初三数学二次函数与三角形试卷及答案
- 初三数学二次函数模拟训练试卷及答案
- 初三数学二次函数冲刺拔高试卷及答案
- 化工管道安全培训试题及答案解析
- 餐厅安全培训考试题及答案解析
- 保险代理从业认证考试及答案解析
- 专插本护理学综合题库及答案解析
- 2025年国家开放大学(电大)《现代政治经济学》期末考试备考试题及答案解析
- 2025年教育系统学校中层后备干部选拔考试题(含答案)
- 养老院安全培训考试题及答案解析
- DB32-T 5192-2025 工业园区碳排放核算指南
- 锅炉工安全培训知识课件
- 天津地区高考语文五年高考真题汇编-文言文阅读
- 酒店账单-水单-住宿
- 手游经典案例《王者荣耀》的营销分析
- GB/T 24002.1-2023环境管理体系针对环境主题领域应用GB/T 24001管理环境因素和应对环境状况的指南第1部分:通则
- 2023年自考全国10月财务管理学试题+答案
- 日语动词分类课件 【高效课堂+备课精研】 高考日语一轮复习
- GA/T 850-2021城市道路路内停车位设置规范
评论
0/150
提交评论