




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
江苏科技大学(张家港) 微机原理与接口技术课程设计 微机原理与接口技术课程设计姓名: 厉小洋 学号: 0945533117 班级: 09电气1班 专业: 电气工程及其自动化学院: 电气与信息工程学院江苏科技大学张家港校区2012年9月24 目录一 理论部分21课题要求与内容22 系统方案设计33 系统硬件的设计44 系统软件设计5二 实践部分61 系统硬件原理简介62 系统硬件调试中出现的问题及解决措施103 系统软件113.1 软件设计113.2软件调试中出现的问题及解决措施14三 附录15题目:基于80x86的步进电机控制系统第一章、 理论部分一 微机原理课程设计课题要求与内容内容要求:(1) 使用8255a控制步进电机的运转。(2) 使用数码管led显示速度的大小。(3) 使用8253定时器调节速度的大小。(4) 使用4个独立按键控制步进电机,即“正传”、“反转”、“停止”、“调速”。(5) 使用8259a产生中断控制按键;(6) 使用dac0832显示速度的波形。拓展功能:(1) 按键部分可以增加“加速”、“减速”等功能;(2) 考虑可以加蜂鸣器来区分“正转”和“反转”;(3) 其他可以有自己特色的功能均可。二 系统方案设计80x86825582598254步进电机led显示按键控制在课程要求的前提下,步进电机为四相八拍步进电机,这样可以用8255的一个端口控制电机的驱动,led显示为十六位 图1系统流程图在8255中可用两个端口控制,按键单元可与电机共用一个八位端口,由8254产生可编程脉冲,进入8259产生中断,反馈给80x86,控制8255。再执行到步进电机及其led显示上,一个脉冲步进电机一拍。由按键读入系统状态。具体的系统设计如图1为系统概况流程图三 系统硬件设计在硬件设计中,主要是通过步进电机模块、8255模块、led模块、8254模块。在8255芯片上用a,b口控制数码管的显示(a为位选b为段选),c口的高四位为四个按键单元,低四位作为输出,控制步进电机。片选cs接ioy2。在8259和8254上,采用一个脉冲一拍的方式。给8254一个1.8432mhz在clk2,out2输出给clk0,由out0给8259的int,输出一个脉冲,经由ir0给80x86的中断口intr。如图2为硬件连接图,如下 硬件连接:8254,8255,8259的cs分别接在ioy2,ioy0,ioy1 8255芯片连接:8255的a,b控制led,a口接位选,b口接段选,将c口分为两段,高四位读取按键,低四位控制步进电机,按键分为四个如下表1所示 表1 k1k2k3 k4判断开关0开1关判断正反转0正1反0 0 速度11 0 速度20 1 速度31 1 速度4 8254:gate2接电源+5v 给clk2一个信号out2接clk0将输出接8259的int ,在用8259的iro1连接到80x86的中断intrxd0xd7xiorxiowxa2xa2intrioy0xd0xd7ioy1ioriowioriowxa28086系统总线d0 pc0d7 pc3 a0 pc4a1 pc7 8255wr a口rdcs b口按键单元步进电机单元led显示xd0xd7d0 d7 wrrd intcs 8259 ir0a0d0 out0d7 clk0wr out2rdcs clk2 8254a0a1 gate21.8432mhz+5vioy2图2硬件连接图四 系统软件设计开始系统初始化判断开关判断正反判断速度计数器装入初值判断是否进入中断led显示判断是否八拍走完判断键盘是否有按键否否是是是否结束是否 图3软件系统工作流程图 过8255读取按键的信号,来控制步进电机的开关,正转,反转,速度的大小。通过8254计数器工作在方式0的状态下来控制每拍运行的时间,步进电机速度不同,赋给8254的初始值不同,同时8255的pa,pb口向led接口输出信号,led数码管显示步进电机每分钟的转速。8254计数器每次运行结束,向8259发出一个高电平,8259ir0接口检测到高电平信号,即进入中断服务程序,在中断服务程序里,执行对下一拍给步进电机信号的赋值。在每次循环中,执行键盘按键检测程序,如有按键,退出程序,否则,反复循环。如图3为软件系统的工作流程图第二章 实践部分一 系统硬件原理简介 1.1步进电机的简介及其工作原理步进电机的驱动原理是通过它每相线圈的电流的顺序切换来使电机作步进式旋转,驱动电路由脉冲来控制,所以调节脉冲的频率便可改变步进电机的转速,微控制器最适合控制步进电机。另外,由于电机的转动惯量的存在,其转动速度还受驱动功率的影响,当脉冲的频率大于某一值时,电机便不再转动。本次课程设计中电机共有四个相位(a,b,c,d),按转动步骤可分单4拍(a-b-c-d-a),双4拍(ab-bc-cd-da-ab)和单双8拍(a-ab-b-bc-c-cd-d-da-a).此模块的主要功能是通过接收8255的c口输入信号来控制步进电机的转动,a,b,c,d分别代表不同的四个相位,分别接入到pc0,pc1,pc2和pc3实现转动控制相12345678a11000001b01110000c00011100d00000111表 2如上述表2所示,通过编程对8255的输出进行控制,使输出按照相序表给驱动电路供电,则步进电机的输入也和相序表一致,这样步进电机就可以正向转动,反之,则反向转动。1.2实验所用芯片的介绍及其控制方式 1.2.1 8254的简介 8254是intel公司生产的课可编程定时器,8254芯片主要由四部分组成: 1 数据总线缓冲器 数据总线缓冲器是一个三态、双向8位寄存器主要作用是与cpu进行数据交换,8位数据线d7d0与cpu的系统数据总线连接,构成cpu和8254之间信息传送的通道,cpu通过数据总线缓冲器向8254写入控制命令、计数初始值或读取计数值。 2 读写逻辑 读写逻辑是芯片的控制部分,编程人员通过控制信号的选择来选择芯片的工作方式。读/写控制逻辑用来接收cpu系统总线的读、写控制信号和端口选择信号,用于控制8254内部寄存器的读/写操作。 3 控制字寄存器 控制寄存器是一个只能写不能读的8位寄存器,系统通过指令将控制字写入控制寄存器,设定8254的不同工作方式。 4 计数器 8254内部有三个结构完全相同而又相互独立的16位减“1”计数器,每个计数器有六种工作方式,各自可按照编程设定的方式工作。1).有3个独立的16位计数器2).每个计数器可按十进制或二进制计数3).8254每个计数器允许最高计数为10mhz4).8254 有读回指令,还可以读出状态寄存器的内容5).每个计数器可编程工作于6中不同的方式6)计数脉冲可以是有规律的时钟信号,也可以是随机信号,计数初值公式为n=fclki/fouti(fclki是输入时钟脉冲的频率,fouti是输出波形的频率)工作方式的分类:1) 方式0:计数到0结束输出正跳跃信号方式2)方式1:硬件可重触发单稳方式3)方式2:频率发生器4)方式3:方波发生器5)方式4:软件触发选通方式6)方式5:硬件触发选通方式8254的控制字有两个:一个用来设置计数工作方式称为方式控制字。另一个用来设置读回命令,称为读回控制字。如下表3是控制方式表格表3 8254的方式控制字格式d7d6d5d4d3d2d1d0计数器选择读/写工作方式选择计数码制选择00-计数器000-锁存计数值000-方式00-二进制数01-计数器101-读/写低8位001-方式11-十进制数10-计数器210-读/写高8位010-方式211-读出控制字标志11-先读/写低8位再读/写高8位011-方式3100-方式4101-方式58255的简介及其控制8255是intel公司生产的可编程并行i/o接口芯片,有3个8位并行i/o口。具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。 其各口功能可由软件选择,使用灵活,通用性强。8255可作为单片机与多种外设连接时的中间接口电路。 8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。同时必须具有与外设连接的接口a、b、c口。由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:与cpu连接部分、与外设连接部分、控制部分。8255可编程外围接口芯片是通用并行口芯片,具有a、b、c三个并行接口,有三种工方式。方式0基本的输入输出。方式1选通输入输出。方式2双选通工作方式表格2为控制字格式,如下图4 、图5分别为8255工作方式控制字格式和8255 c口按位置位/复位控制字格式。图4、 8255工作方式控制字格式图5 8255 c口按位置位/复位控制字格式8259的简介及其控制方式8259a是专门为了对8085a和8086/8088进行中断控制而设计的芯片,它是可以用程序控制的中断控制器。单个的8259a能管理8级向量优先级中断。在不增加其他电路的情况下,最多可以级联成64级的向量优级中断系统。8259a有多种工作方式,能用于各种系统。各种工作方式的设定是在初始化时通过软件进行的。 在总线控制器的控制下,8259a芯片可以处于编程状态和操作状态,编程状态是cpu使用in或out指令对8259a芯片进行初始化编程的状态。功能:就是在有多个中断源的系统中,接受外部的中断请求,并进行判断,选中当前优先级最高的中断请求,再将此请求送到cpu的intr端;当cpu响应中断并进入中断子程序的处理过程后,中断控制器仍负责对外部中断请求的管理。二 系统硬件调试中出现的问题及解决措施问题一 步进电机运转不流畅原因:分析后发现,程序执行中的中断无法连续执行,因为8254采用方式3发出的中断信号,脉冲时间太短,解决方法:在调整8254的计数器采用方式1后,一旦检测信号,重新将计数器装入初值问题二 数码管显示乱码原因:查看显示数据发现,当8255输出一个段码后,下一次出现的是上一次输出的值解决方法:在以后每次输出之后,都输出一个00a,以清除8255寄存器中的值,以达到清除乱码的效果问题三 程序执行中有计数器赋初值,所以每次计数器都不能执行完发出中断原因:赋初值在循环当中解决方法:将计数器赋初值放到循环外面,引用flag来判断是否进入中断,如果进入,则重新将计数器赋初值问题四:读取按键混乱原因:用pc7-pc4来读取按键。读出的按键数值在高四位,于我们用低四位处理相冲突解决方法:将读出的数值右移四位三 系统软件3.1 软件设计3.1.1 8255控制模块如图6所示,8255主要负责不停的读取按键状态检测速度的大小pc6为00(关)初始化8259、82558255pc4口检测开关按键8255pc5口检测正反转按键1(开)8255pc6口检测速度8255pc7口检测速度8255pc7口检测速度pc6为1pc7为0pc7为1pc7为0。口11(反转)口20(正转)pc7为1 如图6 8255流程图3.1.2 8254延时模块设置8254的控制字,通过8254设置延时,产生延时频率,最后再接入到8255控制步进电机的运转与停止,速度大小主要通过对8254装入初值的不同来控制,流程如下图7,与上图6衔接(图7分别于图6最后连接)否否是是8254装入初值8255pa.pb口输出led显示速度判断是否运转八拍是否进入中断pc低四位控制步进电机进入图6的口1进入图6的口2 图7 8254模块流程3.1.3 led显示模块led模块的主要功能是前四位显示步进电机的转速(r/min)度的值。此模块用8255a、b口的控制led数码管的位码,采用动态扫描方式让数码管显示出速度值。利用8255的端口a、b口各八位,共十六位控制数码管的显示,其中a口为位选控制,b口为段选控制,直接显示步进电机的转速。数码管的显示控制对应于下图8 图8 数码管对应图来自8254的信号3.1.4 8259中断模块8259中断模块的8259主要负责接收来自8254的信号产生中断,给80x86,控制一个脉冲产生一个中断步进电机,如图9步进电机转动一拍80x86 图9 3.2软件调试中出现的问题及解决措施问题一 程序运行中反复执行mov bx,offset ttablel.原因:放在最高的级别的大循环当中,所以会反复执行。解决方法:引用cx计数,当cx由08h变成00h时,才返回执行mov bx,offset ttablel问题二 跳转指令无法达到期望位置,提示错误。原因:jz,jnz指令只能跳转255,而我们程序跳转跳远,超出范围。解决方法:使用jmp语句,在中间插入,多次跳转,以达到跳转位置附录(源程序)ioy1 equ 3040h ;片选ioy0对应的端口始地址my8255_a equ ioy1+00h*4 ;8255的a口地址my8255_b equ ioy1+01h*4 ;8255的b口地址my8255_c equ ioy1+02h*4 ;8255的c口地址my8255_mode equ ioy1+03h*4 ;8255的控制寄存器地址ioy2 equ 3080h ;片选ioy1对应的端口始地址my8254_count0 equ ioy2+00h*4 ;8254计数器0端口地址my8254_count1 equ ioy2+01h*4 ;8254计数器1端口地址my8254_count2 equ ioy2+02h*4 ;8254计数器2端口地址my8254_mode equ ioy2+03h*4 ;8254控制寄存器端口地址intr_ivadd equ 01c8h ;intr对应的中断矢量地址intr_ocw1 equ 0a1h ;intr对应pc机内部8259的ocw1地址intr_ocw2 equ 0a0h ;intr对应pc机内部8259的ocw2地址intr_im equ 0fbh ;intr对应的中断屏蔽字ioy0 equ 3000h ;片选ioy0对应的端口始地址my8259_icw1 equ ioy0+00h ;实验系统中8259的icw1端口地址my8259_icw2 equ ioy0+04h ;实验系统中8259的icw2端口地址my8259_icw3 equ ioy0+04h ;实验系统中8259的icw3端口地址my8259_icw4 equ ioy0+04h ;实验系统中8259的icw4端口地址my8259_ocw1 equ ioy0+04h ;实验系统中8259的ocw1端口地址my8259_ocw2 equ ioy0+00h ;实验系统中8259的ocw2端口地址my8259_ocw3 equ ioy0+00h ;实验系统中8259的ocw3端口地址stack1 segment stack dw 256 dup(?)stack1 endsdata segment mes db press any key to exit!,0ah,0dh,0ah,0dh,$cs_bak dw ? ;保存intr原中断处理程序入口段地址的变量ip_bak dw ? ;保存intr原中断处理程序入口偏移地址的变量im_bak db ? ;保存intr原中断屏蔽字的变量ttable1 db 01h,03h,02h,06h,04h,0ch,08h,09h ;正转编码 ttable2 db 09h,08h,0ch,04h,06h,02h,03h,01h ;反转编码flag db 00h ;标志位data ends code segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov dx,offset mes ;显示退出提示 mov ah,09h int 21h cli mov ax,0000h ;替换intr的中断矢量 mov es,ax mov di,intr_ivadd mov ax,es:di mov ip_bak,ax ;保存intr原中断处理程序入口偏移地址 mov ax,offset myisr mov es:di,ax ;设置当前中断处理程序入口偏移地址 add di,2 mov ax,es:di mov cs_bak,ax ;保存intr原中断处理程序入口段地址 mov ax,seg myisr mov es:di,ax ;设置当前中断处理程序入口段地址 mov dx,intr_ocw1 ;设置中断屏蔽寄存器,打开intr的屏蔽位 in al,dx mov im_bak,al ;保存intr原中断屏蔽字 and al,intr_im out dx,al mov dx,my8259_icw1 ;初始化实验系统中8259的icw1 mov al,13h ;边沿触发、单片8259、需要icw4 out dx,al mov dx,my8259_icw2 ;初始化实验系统中8259的icw mov al,08h out dx,al mov dx,my8259_icw4 ;初始化实验系统中8259的icw4 mov al,01h ;非自动结束eoi out dx,al mov dx,my8259_ocw3 ;向8259的ocw3发送读取irr命令 mov al,0ah out dx,al mov dx,my8259_ocw1 ;初始化实验系统中8259的ocw1 mov al,0feh ;打开ir0的屏蔽位 out dx,al sti mov dx,my8255_mode ;初始化8255工作方式 mov al,88h ;工作方式0,a口输出,b口输出,c高四位输入,低四位输出 out dx,al a: mov ah,1 ;判断是否有按键按下 int 16h jnz wait1 ;无按键则跳回继续执行,有则退出 mov cx,08h ;计数初值 mov dx,my8255_c in al,dx ;读c口高4位的数据 shr al,1 ;转向c口的低4位 shr al,1 shr al,1 shr al,1 push bx mov bl,al ;bl保存al中的数据 mov bh,bl ;bh中保存al的数据 and bl,01h ;取开关状态 cmp bl,00h jz a ;如果是0,则跳转到a and bh,02h ;取正反转状态 cmp bh,00h jz forward ;如果是0,跳正转 jnz backward ;如果是1,跳反转 pop bx forward: mov bx,offset ttable1 ;将的ttable1首地址赋给bx jmp b ;跳转到b取速度 backward: mov bx,offset ttable2 ;将的ttable2首地址赋给bx jmp b ;跳转到b取速度 b: mov cx,08h ;计数初值 mov flag,00h ;中断结束后给flag赋值00h mov dx,my8255_c in al,dx ;读c口数据 shr al,04h ;将数据左移四位 and al,0ch ;取高两位 mov ah,al ;保存al中的数据 and al,08h ;取最高位 cmp al,00h ;与00比较 jz camp1 jnz camp2camp1: and ah,04h ;取第二位 cmp ah,00h jz speed1c ;00速度1, 跳speed1c jnz speed2c ;01速度2,跳speed2ccamp2: and ah,04h ;取第二位 cmp ah,00h jz speed3c ;10速度3,跳speed1c jnz speed4c1 ;11速度4,跳speed1cspeed1c: mov dx,my8254_mode ;初始化8254工作方式 mov al,0b6h ;计数器2,方式3 out dx,al mov dx,my8254_count2 ;装入计数初值 mov al,24h ;36分频 out dx,al mov al,00h out dx,al mov dx,my8254_mode ;初始化8254工作方式 mov al,30h ;计数器0,方式1 out dx,al mov dx,my8254_count0 ;装入计数初值 mov al,0ffh ;255 out dx,al mov al,00h out dx,al jmp speed1speed2c: mov dx,my8254_mode ;初始化8254工作方式 mov al,0b6h ;计数器2,方式3 out dx,al mov dx,my8254_count2 ;装入计数初值 mov al,48h ;72分频 out dx,al mov al,00h out dx,al mov dx,my8254_mode ;初始化8254工作方式 mov al,36h ;计数器0,方式1 out dx,al mov dx,my8254_count0 ;装入计数初值 mov al,0ffh ;255 out dx,al mov al,00h out dx,al jmp speed2a1: jmp a speed4c1:jmp speed4 speed3c: mov dx,my8254_mode ;初始化8254工作方式 mov al,0b6h ;计数器2,方式3 out dx,al mov dx,my8254_count2 ;装入计数初值 mov al,90h ;144分频 out dx,al mov al,00h out dx,al mov dx,my8254_mode ;初始化8254工作方式 mov al,36h ;计数器0,方式1 out dx,al mov dx,my8254_count0 ;装入计数初值 mov al,0ffh ;255 out dx,al mov al,00h out dx,al jmp speed3 speed4c: mov dx,my8254_mode ;初始化8254工作方式 mov al,0b6h ;计数器2,方式3 out dx,al mov dx,my8254_count2 ;装入计数初值 mov al,0ffh ;288分频 out dx,al mov al,01h out dx,almov dx,my8254_mode ;初始化8254工作方式 mov al,36h ;计数器0,方式1 out dx,al mov dx,my8254_count0 ;装入计数初值 mov al,0ffh ;255 out dx,al mov al,00h out dx,al jmp speed4 a2: jmp a1speed1: mov al,bx mov dx,my8255_c ;给步进电机输入信号 out dx,al dec cx ;每输入一次信号cx减1 cmp cx,00h ;将cx的值与00h比较,如果跳转8次,跳转到a,重新开始扫描按键 jz a cmp flag,ooh ;判断是不是已经进入中断,如果进入,跳转到b,如果没有,继续执行led的显示 jnz b mov dx,my8255_a mov al,0efh ;段选3号位 out dx,al mov dx,my8255_b mov al,06h ;显示数字1 out dx,al mov al,00h ;消除锁存值 out dx,al mov dx,my8255_a mov al,0f7h ;段选2号位 out dx,al mov dx,my8255_b mov al,5bh ;显示数字2 out dx,al mov al,00h ;消除锁存值 out dx,al mov dx,my8255_a mov al,0fbh ;段选1号位 out dx,al mov dx,my8255_b mov al,3fh ;显示数字0 out dx,al mov al,00h ;消除锁存值 out dx,al jmp a1a3: jmp a2 speed2: mov al,bx mov dx,my8255_c ;给步进电机输入信号 out dx,al dec cx ;每输入一次信号cx减1 cmp cx,00h ;将cx的值与00h比较,如果跳转8次,跳转到a,重新开始扫描按键 jz a cmp flag,ooh ;判断是不是已经进入中断,如果进入,跳转到b,如果没有,继续执行led的显示 jnz b mov dx,my8255_a mov al,0f7h ;段选2号位 out dx,al mov dx,my8255_b mov al,7dh ;显示数字6 out dx,al mov al,00h ;消除锁存值 out dx,al mov dx,my8255_a mov al,0fbh ;段选1号位 out dx,al mov dx,my8255_b mov al,3fh ;显示数字0 out dx,al mov al,00h ;消除锁存值 out dx,al jmp a2 speed3: mov al,bx mov dx,my8255_c ;给步进电机输入信号 out dx,al dec cx ;每输入一次信号cx减1 cmp cx,00h ;将cx的值与00h比较,如果跳转8次,跳转到a,重新开始扫描按键 jz a cmp flag,ooh ;判断是不是已经进入中断,如果进入,跳转到b,如果没有,继续执行led的显示 jnz b mov dx,my8255_a mov al,0f7h ;段选2号
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 台湾省2025年公路造价师《理论与法规》合同的分类模拟试题
- 农业物联网技术应用与服务平台建设合同
- 影视行业域名购买合同范文
- 农业生态林建设与保护合同
- 聚落形态与生态平衡-洞察及研究
- 厂房设备租赁合同书
- 特应性皮炎免疫机制-洞察及研究
- 异地合资经营合同
- 基于深度学习的交通信号预测与控制方法-洞察及研究
- 海洋渔业生态补偿-洞察及研究
- 泵站操作工安全操作规程
- 第一章-马克思主义的诞生-(《马克思主义发展史》课件)
- 山东科学技术出版社五年级上册《综合实践活动》教案
- 茶叶加工学试卷
- 专升本00107现代管理学历年试题题库(含答案)
- 部编四年级语文教材分析课件
- 农民用水户协会实施方案
- 班组长执行力管理培训
- 中药热熨敷技术(精品课件)
- 建筑工程施工转包违法分包等违法行为监督检查工作方案
- 《建筑材料与检测》教学课件(全)
评论
0/150
提交评论