ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:20KB ,
资源ID:6226633      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6226633.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(微机原理直流电机转速控制asm.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

微机原理直流电机转速控制asm.docx

1、微机原理 直流电机转速控制asm;*; 8279 键盘显示器接口芯片;1.查询控制方式 2.输入时钟2MHZ 3.8279内部20分频(100KHZ) ;4.扫描计数器采用编码工作方式(通过外部138译码);5.显示按键值,第九次按键,清除显示; 8279 查询工作方式 .MODEL TINYCMD_8279 EQU 0BF01H ;8279命令字、状态字地址DATA_8279 EQU 0BF00H ;8279读写数据口的地址 .STACK 100 .DATAKEYCOUNT DB ?LED_TAB DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 080H

2、,90H,88H,83H,0C6H,0A1H,86H,8EH .CODESTART: MOV AX,DATA MOV DS,AX NOP CALL INIT8279 ;初始化子程序 MOV KEYCOUNT,0START1: CALL SCAN_KEY ;键扫描 JNC START1 ;没有按键 XCHG AL,KEYCOUNT INC AL CMP AL,9 JNZ START2 MOV KEYCOUNT,0 CALL INIT8279_1 ;8个数码块全有字符显示后,再按键,清除显示 JMP START1START2: XCHG AL,KEYCOUNT CALL KEY_NUM ;键值转换

3、为键号 LEA BX,LED_TAB ;字型码表 XLAT CALL WRITE_DATA JMP START1 START_EXIT: JMP $;8279初始化INIT8279 PROC NEAR MOV DX,CMD_8279 ;CMD_8279为写命令地址、读状地址 MOV AL,34H ;可编程时钟设置,设置分频系数(20分频) OUT DX,AL MOV AL,0 ;8*8字符显示,左边输入,外部译码键扫描方式 OUT DX,AL; MOV AL,0A0H; OUT DX,AL CALL INIT8279_1 RETINIT8279 ENDPINIT8279_1 PROC NEAR

4、 CALL CLEAR ;清显示 MOV AL,90H ;从第一个数码管开始移位显示 OUT DX,AL RETINIT8279_1 ENDPCLEAR PROC NEAR MOV DX,CMD_8279 MOV AL,0DEH ; 清除命令 OUT DX,ALWAIT1: IN AL,DX TEST AL,80H JNZ WAIT1 ; 显示RAM清除完毕吗? RETCLEAR ENDPSCAN_KEY PROC NEAR MOV DX,CMD_8279 IN AL,DX ;读状态READ_FIFO: AND AL,7 JZ NO_KEY ;是否有键按下READ: MOV AL,40H OU

5、T DX,AL ;读FIFO RAM MOV DX,DATA_8279 IN AL,DX STC ;有键SCAN_KEY1: RETNO_KEY: CLC ;无键按下,清CY JMP SCAN_KEY1SCAN_KEY ENDPKEY_NUM PROC NEAR AND AL,3FH RET KEY_NUM ENDPWRITE_DATA PROC NEAR MOV DX,DATA_8279 OUT DX,AL RETWRITE_DATA ENDP END START;转速控制REVControl PROC NEAR MOV AL,Count ;当前转速 CMP AL,RevSet ;设置转速

6、JZ REVControl1 JNB RevDEC;提高转速RevINC: MOV Count500ms,1 MOVAL,RevSet ;设置转速 SUB AL,Count ;当前转速RevINC1: ADD AL,Data_0832 ;转速值加上上一次0832输入值就是;0832输入值 JNB RevINC2 ;判断是否超过0832最大输入值 MOV AL,0FFHRevINC2: MOV Data_0832,AL CALL DAC0832 ;D/A,调整0832的输出电压 JMP REVControl1;降低转速RevDEC: MOV AH,Count500ms OR AH,AH JZ R

7、evDEC3 MOV Count500ms,0 MOV AL,Count ;当前转速 SUB AL,RevSet ;设置转速RevDEC1: XCHG AL,Data_0832 ;上一次0832输入值减去转速差值就;是0832输入值 SUB AL,Data_0832 JNB RevDEC2 MOV AL,10RevDEC2: MOV Data_0832,AL CALL DAC0832 ;D/A 调整0832输出电压 JMP REVControl1RevDEC3: INC Count500msREVControl1: RETREVControl ENDP;计算速率Timer0Int: MOV b

8、Time,1 ;0.25s定时到标志 MOV AL,NowCount ;本次0.25s内计数转数 MOV Count,AL MOV NowCount,0 SUB AL,Count1 ;count1:上次0.25s的计数值 JZ TIMER0_2 ;如果本次0.25s累计转数与上次相比不;超过正负1 INC AL ;求本次与前三次的平均转数值 JZ TIMER0_2 CMP AL,2 JNZ TIMER0_3TIMER0_2: MOV AL,Count PUSH AX XOR AH,AH ADD AL,Count1 JNB TIMER0_4 INC AHTIMER0_4: ADD AL,Coun

9、t2 JNB TIMER0_5 INC AHTIMER0_5: ADD AL,Count3 JNB TIMER0_6 INC AHTIMER0_6: SHR AX,2 MOV Count,AL MOV AL,Count2 MOV Count3,AL MOV AL,Count1 MOV Count2,AL POP AX MOV Count1,AL JMP TIMER0_1TIMER0_3: MOV AL,Count ;本次转数与前几次相差较大,以本次;为准 MOV Count3,AL ;250ms测速 MOV Count2,AL MOV Count1,ALTIMER0_1: RETIfExit

10、PROC NEAR PUSH AX PUSH DX MOV AL,06H MOV DX,0FFH INT 21H POP DX POP AX JZ IfExit1 JMP ExitIfExit1: RETInitPCI PROCNEAR MOV AH,00H MOV AL,03H INT 10H ;清屏 MOV AH,0B1H MOV AL,01H INT 1AH CMP AH,0 JZ InitPCI2 LEA DX,msg0InitPCI1: MOV AH,09H INT 21H JMP ExitInitPCI2: MOV AH,0B1H MOV AL,02H MOV CX,Device_

11、ID MOV DX,Vendor_ID MOV SI,0 INT 1AH JNC InitPCI3 ;是否存在PCI9052板卡 LEA DX,msg1 JMP InitPCI1InitPCI3: MOV DI,PCIBAR1 MOV AH,0B1H MOV AL,09H INT 1AH JNC InitPCI4 LEA DX,msg2 JMP InitPCI1InitPCI4: AND CX,0FFFCH MOV PCI_IO_BaseAddress0,CX MOV DI,PCIBAR3 MOV AH,0B1H MOV AL,09H INT 1AH ;读取该卡扩展的8位IO基地址,ah=0b

12、1h,al=09h,int 1ah,di=寄存器号,用来按字/双字读取配置空间,返回ah=返回代码,;cf=0成功,cx=读取的字/双字,存放基地址 JNC InitPCI5 LEA DX,msg3 JMP InitPCI1 ;否则,输出ds:dx开始的字符串,显示读8位I/O空间基地址时出错InitPCI5: AND CX,0FFFCH MOV IO_Bit8_BaseAddress,CX MOV DI,PCIIPR MOV AH,0B1H MOV AL,09H INT 1AH ;读取IRQ号 JNC InitPCI6 LEA DX,msg4 JMP InitPCI1 ;否则,输出ds:dx

13、开始的字符串,显示读IRQ号出错InitPCI6: MOV PCI_IRQ_NUMBER,CL RETInitPCI ENDPModifyAddress PROC NEAR MOV AX,IO_Bit8_BaseAddress ADD IO8259_0,AX ADD IO8259_1,AX ADD RD_IO8259,AX RETModifyAddress ENDPModifyVector PROC NEAR PUSH ES MOV AL,PCI_IRQ_NUMBER CMP AL,08H ;若中断类型号在0-7之间, JAE ModifyVector1 ADD AL,08H ;IRQ0.7

14、- 中断向量8.F JMP ModifyVector2ModifyVector1: ADD AL,70H-08H ;IRQ8.F - 中断向量70H.77HModifyVector2: MOV INT_Vector,AL MOV AH,35H INT 21H ;AH=35H,AL=中断号,INT 21H功能:取中断向量,返回ES:BX=中断处理程序段:位移 MOV INT_IP,BX ;保护原中断处理例程偏移地址IP MOV AX,ES MOV INT_CS,AX ;保护原中断处理例程段地址CS MOV AL,INT_Vector LEA DX,INT_0 ;INT_0为中断服务程序的标号即偏

15、移地址DX=INT_0 PUSH DS PUSH CS POP DS ;中断服务程序的段地址为CS中内容,所以DS=CS MOV AH,25H INT 21H ;设置新中断向量AH=25H,AL=中断号,INT 21H,DS:DX=中断处理过程段:位移 POP DS ;恢复DS中内容 MOV BL,PCI_IRQ_NUMBER MOV DX,21H CMP AL,08H JB ModifyVector3 MOV DX,0A1HModifyVector3: IN AL,DX MOV INT_MASK,AL AND BL,07H MOV CL,BL MOV BL,1 SHL BL,CL NOT B

16、L AND AL,BL OUT DX,AL ;允许中断 POP ES STI RETModifyVector ENDPClearInt PROC NEAR ;清楚PCI9052、系统中断控制器的中断标志 MOV DX,PCI_IO_BaseAddress0 ADD DX,INTCSR; IN AL,DX; AND AL,mask_int_9052; JZ ClearInt3 ;不是8259引取的中断 INC DX IN AL,DX OR AL,0CH OUT DX,AL ;清除PCI9052的中断标志位 MOV AL,PCI_IRQ_NUMBER CMP AL,08H JAE ClearInt

17、1 AND AL,7 OR AL,60H MOV DX,20H OUT DX,AL JMP ClearInt2ClearInt1: AND AL,7 OR AL,60H MOV DX,0A0H OUT DX,AL MOV DX,20H MOV AL,62H OUT DX,ALClearInt2: CLC RET;ClearInt3: STC; RETClearInt ENDPExit: CLI MOV BL,PCI_IRQ_NUMBER MOV DX,21H CMP AL,08H JB Exit1 MOV DX,0A1HExit1: MOV AL,INT_MASK OUT DX,AL ;屏蔽中

18、断 PUSH DS MOV AL,INT_Vector MOV DX,INT_IP ;保护原中断处理例程地址 MOV AX,INT_CS MOV AH,25H INT 21H ;设置新中断向量 POP DS STI MOV AH,4CH INT 21H END START ;直流电机测速 .MODEL TINY EXTRN Display8:NEAR,SCAN_KEY:NEAR,GetKeyA:NEARIO8259_0 EQU 0F000H IO8259_1 EQU 0F001H Con_8253 EQU 0E003H T0_8253 EQU 0E000H T1_8253 EQU 0E001H

19、 DA0832 EQU 0D000H VoltageOffset EQU 5 ;0832调整幅度 .STACK 200 .DATA buffer DB 8 DUP(0) ;显示缓冲区,8个字节buffer1 DB 8 DUP(0) ;显示缓冲区,8个字节VOLTAGE DB 0 ;转换电压数字量Count DW 0 ;一秒转动次数NowCount DW 0 ;当前计数值kpTime DW 0 ;保存上一次采样时定时器的值bNeedDisplay DB 0 ;需要刷新显示 .CODE START: MOV AX,DATA MOV DS,AX MOV ES,AX NOP MOV bNeedDisp

20、lay,1 ;显示初始值 MOV VOLTAGE,99H ;初始化转换电压输入值,99H-3.0V MOV Count,0 ;一秒转动次数 MOV NowCount,0 ;当前计数值 MOV kpTime,0 ;保存上一次采样时定时器的值 CALL DAC0832 ;初始D/A CALL Init8253 CALL Init8259 CALL WriIntver STI MAIN: CALL GetKeyA ;按键扫描 JNB Main1 JNZ Key1 Key0: MOV AL,VoltageOffset;0号键按下,转速提高 ADD AL,VOLTAGE CMP AL,VOLTAGE J

21、NB Key0_1 MOV AL,0FFH ;最大Key0_1: MOV VOLTAGE,AL CALL DAC0832 ;D/A JMP Main2 Key1: MOV AL,VOLTAGE ;1号键按下,转速降低 SUB AL,VoltageOffset JNB Key1_1 XOR AL,AL ;最小Key1_1: MOV VOLTAGE,AL CALL DAC0832 ;D/A JMP Main2 Main1: CMP bNeedDisplay,0 JZ MAIN MOV bNeedDisplay,0 ;1s定时到刷新转速Main2: CALL RateTest ;计算转速/显示 JM

22、P MAIN ;循环进行实验内容介绍与测速功能测试;转速测量/显示RateTest: MOV AX,Count MOV BL,10 DIV BL CMP AL,0 JNZ RateTest1 MOV AL,10H ;高位为0,不需要显示RateTest1: MOV buffer,AH MOV buffer+1,AL MOV AL,VOLTAGE ;给0832送的数据 AND AL,0FH MOV buffer+4,AL MOV AL,VOLTAGE AND AL,0F0H ROR AL,4 MOV buffer+5,AL MOV buffer+2,10H ;不显示 MOV buffer+3,1

23、0H MOV buffer+6,10H MOV buffer+7,10H LEA SI,buffer LEA DI,buffer1 MOV CX,8 REP MOVSB LEA SI,buffer CALL Display8 ;显示转换结果 RET Timer0Int: PUSH AX PUSH DX MOV bNeedDisplay,1 MOV AX,NowCount SHR AX,1 SHR AX,1 MOV Count,AX ;转一圈产生4个脉冲,Count=NowCount/4 MOV NowCount,0 MOV DX,IO8259_0 MOV AL,20H OUT DX,AL PO

24、P DX POP AX IRET CountInt: PUSH AX PUSH DX MOV DX,Con_8253 MOV AL,40H OUT DX,AL ;锁存 MOV DX,T1_8253 IN AL,DX MOV AH,AL IN AL,DX XCHG AL,AH ;T1的当前值 XCHG AX,kpTime SUB AX,kpTime CMP AX,100 JB CountInt1 ;前后二次采样时间差小于100,判断是干扰 INC NowCount CountInt1: MOV DX,IO8259_0 MOV AL,20H OUT DX,AL POP DX POP AX IRET

25、 Init8253 PROC NEAR MOV DX,Con_8253 MOV AL,34H OUT DX,AL ;计数器T0设置在模式2状态,HEX计数 MOV DX,T0_8253 MOV AL,12H OUT DX,AL MOV AL,7AH OUT DX,AL ;CLK0=31250Hz,1s定时 MOV DX,Con_8253 MOV AL,74H OUT DX,AL ;计数器T1设置在模式2状态,HEX计数 MOV DX,T1_8253 MOV AL,0FFH OUT DX,AL MOV AL,0FFH OUT DX,AL ;作定时器使用 RET Init8253 ENDP Ini

26、t8259 PROC NEAR MOV DX,IO8259_0 MOV AL,13H OUT DX,AL MOV DX,IO8259_1 MOV AL,08H OUT DX,AL MOV AL,09H OUT DX,AL MOV AL,0FCH OUT DX,AL RET Init8259 ENDP WriIntver PROC NEAR PUSH ES MOV AX,0 MOV ES,AX MOV DI,20H LEA AX,Timer0Int STOSW MOV AX,CS STOSW LEA AX,CountInt MOV DI,3CH STOSW MOV AX,CS STOSW POP ES RET WriIntver ENDP ;数模转换,A-转换数字量DAC0832 PROC NEAR MOV DX,DA0832 MOV AL,VOLTAGE OUT DX,AL RET DAC0832 ENDP END START

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

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