投币电话课程设计报告_第1页
投币电话课程设计报告_第2页
投币电话课程设计报告_第3页
投币电话课程设计报告_第4页
投币电话课程设计报告_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、微机原理与接口技术课程设计20102011学年第一学期课程设计科目投币电话学生姓名 学号 班级 指导教师 2011年1月1、题意分析及解决方案1.1 题义需求分析1.1.1 设计内容基本内容: 1.当p3.7有信号,即投币后2.绿灯亮,过了几秒钟后,红灯亮,数码管显示最后20秒倒计时3.当数码管的数为0前p3.7有信号,即有投币,重新绿灯亮,过了几秒钟后,红灯亮,数码管显示最后20秒倒计时。4.最后一次投币的倒数20秒开始一次蜂鸣报警。5.若没有投币数码管到00时红灯绿灯一起灭,数码管也一起灭。扩展内容:最后一次倒计时蜂鸣器报警,若有挂机信号,则显示剩余时间以及已投币数并灭掉红绿灯。1.2 解

2、决问题方法及思路1.2.1硬件部分元件的选择:8255a芯片与8251a芯片比较(表1-1)led和lcd比较(表1-2)芯片的功能:(1) 接受投币(中断)芯片8259a当有一次投币时,由8259a向cpu发出一次中断;完成一次投币过程。并由变量count记录总的投币数目,也就是总共接收的中断数。在实验设计当中,将一次脉冲作为一次投币动作。(2) 输入输出接口芯片8255a在本次实验设计中,由8255a芯片作为控制结果输出的元件,8086接口存在着不足的问题,比如对led数码管进行位选需要2位,对led数码管每一位进行段选需要8位,所以必须要用8255进行i/o的扩展,通过8255a,cpu

3、可以直接同外设相连接,将数字量从cpu输出到led显示器上。同时由于每次位选只能选择一个,所以要想保证20秒倒计时时数字不是一位一位显示,所以在程序的设计当中加入的循环程序,不停的刷新显示,从而保证不会影响到观察时间。表1-1 8255a芯片与8251a芯片比较8255a芯片8255a芯片是可编程并行接口芯片,不需要附加外部电路便可和大多数并行传输的外设相连,数据可多为同时传输,使用广泛方便。8251a芯片8251a是可编程的串行接口芯片,数据一位一位地顺序传送,电路简单,传输距离远。表1-2led和lcd比较led与lcd相比,led在亮度,功耗可视角度和刷新速率等方面更具有优势,其最显著的

4、特点是使用寿命长,光电转换效能高。lcdlcd占用空间小,功耗低,低辐射,能降低视觉疲劳,但会出现闪烁现象。1.2.2软件部分该程序主要的初始化设置分为两个部分:(1)对8259a进行设置8259a 的初始化设置其为单片级联、只接受ir0引脚引起的中断。(2)对8255的初始化对方式选择控制字的赋值问题,也就是解决8255a的a口、b口分别工作在方式几,a口、b口、c口高位、c口低位分别是作为输出口还是输入口的问题。在本实验中,a、b口工作为输出方式,c口的pc7控制绿灯信号、pc5控制红灯信号、pc0用于接受挂机信号。2、硬件设计2.1 选择芯片8259a2.1.1 8259a在本设计中的作

5、用用于作为接受投币信号,即每投币一次就由8259a向cpu提出一次中断,并由中断处理程序使记录中断次数变量count加一。 2.1.2 8259a功能分析8259a是可编程中断控制器芯片,与80x86兼容,用于管理和控制外部中断请求,主要功能如下:(1) 具有8级中断优先级控制,若采用级联的方式,最多可管理64级中断。(2) 对每个中断请求均有屏蔽功能;在中断响应期间,可提供中断类型码。(3)8259a是可编程器件,可以通过编程随时根据需要对所具有的多种中断管理方式进行设置或重新组织。2.2选择芯片8255a2.2.1 8255a在本设计中的作用在本实验中,a、b口工作与输出方式,c口的pc7

6、控制绿灯信号、pc5控制红灯信号、pc0用于接受挂机信号。a口用于led的段选,b口用于led的位选。2.2.2 8255a功能分析8255a是一种通用的可编程的并行i/o接口芯片,又称“可编程外设接口芯片”。它是为8086/8088而设计的可以通过程序来改变其功能。可用与连接pci卡与外设,实现数据的的输入输出功能,可以对输入/输出的数据进行数据锁存和数据缓冲,有中断请求信号,可以向cpu发出中断请求,能进行单向和双向通信。8255a的数据总线缓冲器是一个三态8位双向缓冲器,用作8255a同系统数据总线相连时的缓冲部件,cpu通过执行输入/输出指令来实现对缓冲器发送或接收数据。8255a的控

7、制字或状态字也是通过该缓冲器传送的。pa、pb、pc三口均工作在方式0状态,在方式0下,cpu可以采用无条件读/写方式与8255a交换数据。pa口的八位作为led小灯的连接位。图2-1 8255a图表2-1 8255a的操作功能表8255a的操作功能表 a1 a0操 作数 据 传 送 方 式0 0 1 0 0读 a 口a口数据 数据总线0 0 1 0 1读 b 口b口数据 数据总线0 0 1 1 0读 c 口c口数据 数据总线0 1 0 0 0写 a 口数据总线数据 a口0 1 0 0 1写 b 口数据总线数据 b口0 1 0 1 0写 c 口数据总线数据 c口0 1 0 1 1写控制口数据总

8、线数据 控制口(1) 方式0的工作特点:这种方式通常不用联络信号,不使用中断,三个通道中的每一个都有可以由程序选定作为输入或输出。(2) 方式0的功能为:a.两个8位通道:通道a、b。两个四位通道:通道c高4位和低四位;b.任何一个通道可以作输入/输出;c.输出是锁存的;d.输入是不锁存的;e.在方式0时各个通道的输入/输出可有16种不同的组合。2.2.3 8255a主要技术参数表2-2 8255a主要技术参数参数名称符号测试条件规范值最大最小输入低电平电压vil0.8v-0.5v输入高电平电压vihvcc2.0v输入低电平电压(数据总线)voliol=2.5ma0.45v输入低电平电压(外部

9、端口)voliol=1.7ma0.45v输入高电平电压(数据总线)vohioh= -400ua2.4v输入高电平电压(外部端口)vohioh= -200ua2.4v达林顿驱动电流idarrext=750 vext=1.5-0.4ma1.0ma电源电流icc120ma输入负载电流iili=vcc0ma+10ma-ma输出浮动电流ioflvout=vcc0ma+ma-ma2.3 选择芯片led2.3.1 led在本设计中的作用led发光二极管(light-emitting diode),在本设计中采用7段数字发光二级管,做为终端显示。2.3.2 led的功能分析图2-2 led原理图 笔画型led

10、显示器是由8个二极管电路adp按字型8的方式排列,当不同的二极管被选通后根据发光效果会显示不同的自型。本设计中采用共阴极连接方式,当某段接入正电压时,对应的发光二极管会发光,当需要显示字型码“0”时,对应下图中的a,b,c,d,e,f发光二极管应发光,输入位选码应为00111111,即为:3fh;类似可以显示其他。adp分别与74ls273的1q8q相连,接收段选码信号(高电平);8位led显示器的8根共阴极引线与8255a的pb口相连,接收位选码信号(低电平)。段选码和位选码共同作用以显示不同的字型。(表2-3)表2-3 共阴极七段led显示段码数字dpgfedcba二进制编码(字形)000

11、1111113fh10000001103h2010110115bh3010011114fh40110011066h5011011016dh6011111017dh70000011107h8011111117fh9011011116fha0111011177hb011111007chc0011100169hd010111105ehe0111100179hf0111000171h2.3.3 芯片led的技术参数表2-4 led的技术参数pcwifvririfp对应型号散射颜色bt2352702551.52.5200sel-10红色bt14415291004050.52.5565绿色bt134152

12、91004050.52.5585蓝色2.4 蜂鸣器图2-3 蜂鸣器电路图消耗功率 pm150mw最大工作电流 ifm100ma 正常工作电流 if40ma 正向压降 vf 1.8v 共阴极led的pm300mw,ifm200 ma,if60ma,vf 1.8v,vr5v,发红光。3、硬件总逻辑图及其说明3.1硬件总逻辑图图3-1 硬件逻辑图3.2说明实验硬件原理图由pci、8255a、8259a以及led数码显示器构成,8255a芯片cs片选信号线接pci卡上cs1, 8255a芯片a0、a1接pci卡的a0、a1; 8255a的c口的pc7作为红灯的输出口、pc5作为红灯的输出口,a口作为l

13、ed数码管的段选,b口作为led数码管的位选。4、控制程序设计4.1 控制程序设计思路说明 本程序主要功能分为初始化、接受投币、读是否挂机及led的显示输出。初始化主要实现写8255和8259方式控制字,8259a 的初始化设置其为单片级联、只接受ir0引脚引起的中断。在本实验中,8255a的初始化为a、b口工作为输出方式,c口的高四位输出,低四位输入(pc7控制绿灯信号、pc5控制红灯信号和pc0用于接受挂机信号。)由8259接受投币过程,若有投币则进入处理程序,由8255控制红绿灯以及led管的显示,同时检测是否有挂机信号,若有则中断处理,显示剩余时间以及总的投币数,并关掉红灯绿灯。led

14、管实现二进制到十六进制数字型码的转化主要通过二进制数从段选码中查表找出相应的字型码并从8255中送出在led显示器中显示。从高位到低位、输出结果并控制显示器显示通过循环完成。4.2 程序流程图 (图4-1 主程序) (图4-2 子程序)4.3 程序代码表4-1 转换表0123456789abcdef3fh06h5bh4fh66h6dh7dh07h7fh6fh77h7ch39h5eh79h71h.modeltinypcibar1equ14h;pci9052 i/o基地址(用于访问局部配置寄存器)pcibar3equ1ch;8位i/o空间基地址(它就是实验仪的基地址,也为dma & 32 bit

15、ram板卡上的8237提供基地址)pciiprequ3ch;irq号intcsrequ4ch;pci9052 intcsr地址mask_int_9052 equ24hvendor_idequ10ebh;厂商id号device_idequ8376;设备id号.stack 100.data io8259_0dw00f0hio8259_1dw00f1hrd_io8259dw0000hcom_adddw 00e3h;控制口偏移量pa_adddw00e0h;pa口偏移量pb_adddw00e1h;pb口偏移量pc_adddw00e2h;pc口偏移量io_bit8_baseaddress dw?pci_i

16、o_baseaddress0 dw?pci_irq_numberdb?int_maskdb?int_vectordb?int_csdw?;保护原中断入口地址int_ipdw?msg0dbbios不支持访问pci $msg1db找不到star pci9052板卡 $msg2db读pci9052 i/o基地址时出错$msg3db读8位i/o空间基地址时出错$msg4db读irq号出错$countdb?overflag db 0answertime db ?answer db 00hhundreds db 00hdecade db 00hunit db 00hnumber db 0 ;显示后移tab

17、 db 5bh,06h,06h,06h,06h,06h,06h,06h,06h,06h,06h,3fh,3fh,3fh,3fh,3fh,3fh,3fh,3fh,3fh ;七段代码表tab1 db 3fh,6fh,7fh,07h,7dh,6dh,66h,4fh,5bh,06h,3fh,6fh,7fh,07h,7dh,6dh,66h,4fh,5bh,06h tab2 db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;七段代码表.codestart: mov ax,data mov ds,ax moves,ax nopcallinitpcicallmodifyad

18、dress2 ;根据pci提供的基地址,将偏移地址转化为实地址 callmodifyaddress1 ;根据pci提供的基地址,将偏移地址转化为实地址callmodifyvector ;修改中断向量、允许中断 movah,00h moval,03h int10h ;清屏 movcount,0 ;中断次数callinit8259sti ;开中断 mov dx,com_add mov ax,81h out dx,al ;pa,pb,pc为基本输出模式start1: mov dx,pc_add mov al,11110000b ;灯全灭 out dx,al mov overflag,0 mov nu

19、mber,0 chushihua: mov dx,pb_add mov al,0fbh out dx,al mov dx,pa_add mov al,00h out dx,al mov dx,pb_add mov al,0fdh out dx,al mov dx,pa_add mov al,00h out dx,al ;led管灭 mov al,count begin: cmp al,0 jz add2 call prints push ax mov al,overflag cmp al,1 jz add3 mov al,answer add al,1 mov answer,al pop ax

20、 mov bl,count cmp al,bl jnz add1 dec al mov count,al jmp over add1: mov al,count dec al mov count,al over: cmp al,0 jz add3 jmp begin add2: callifexitjzstart1 jmpexit add3: call prints2 jmp start1 init8259procnearmovdx,io8259_0mov al,13h out dx,al movdx,io8259_1mov al,70h out dx,al moval,09houtdx,al

21、mov al,0feh ;屏蔽寄存器outdx,alretinit8259endpint_0: ;中断处理程序 pushdx pushax movdx,rd_io8259 moval,countaddal,1movcount,alint_0_0:movdx,io8259_0moval,20houtdx,alpopaxpopdxiretifexitprocnearpushaxpushdxmovah,06hmovdl,0ffhint21hpopdxpopaxjzifexit1jmpexitifexit1:retifexitendpprints proc near pushaxpushdx push

22、 bx mov dx,pc_add mov al,11110000b out dx,al ;灯全灭 mov dx,pc_add mov al,01110000b out dx,al ;绿灯亮 call dl5s mov dx,pc_add mov al,01010000b out dx,al ;红灯亮 mov cx,20 mov number,0 mov al,count cmp al,1 jnz output1 mov dx,pc_add mov al,00010000b out dx,al ;报警 output1: push cx movcx,50 output: mov dx,pc_ad

23、d in al,dx and al,0fh mov overflag,al cmp al,01h jz final mov dx,pb_add mov al,0fbh out dx,al mov dx,pa_add lea bx,tab mov al,number xlat out dx,al call dl10ms mov dx,pb_add mov al,0fdh out dx,al mov dx,pa_add lea bx,tab1 mov al,number xlat out dx,al call dl10ms area: loop output mov al,number add a

24、l,1 mov number,al mov dx,pc_add mov al,01010000b out dx,al ;解除报警 pop cx loop output1 mov dx,pb_add mov al,0fdh out dx,al mov dx,pa_add lea bx,tab2 mov al,count dec al xlat out dx,al mov al,count dec al cmp al,0 jz final jmp last final: mov al,overflag cmp al,1 jnz xx pop cx xx: mov answertime,cl mov

25、 al,count dec al mov ah,25 mul ah add ax,answertime mov bl,100 div bl mov hundreds,al mov al,ah mov bl,10 div bl mov decade,al mov unit,ah mov dx,pc_add mov al,01010000b out dx,al ;解除报警 last: pop bx popdxpopax retprintsendpprints2 proc near push ax push cx mov dx,pc_add mov al,11110000b out dx,al ;灯

26、全灭 mov cx,100 output2: mov dx,pb_add mov al,0fdh out dx,al mov dx,pa_add lea bx,tab2 mov al,count add al,answer xlat out dx,al call dl5ms mov dx,pb_add mov al,07fh out dx,al mov dx,pa_add lea bx,tab2 mov al,hundreds xlat out dx,al call dl5ms mov dx,pb_add mov al,0bfh out dx,al mov dx,pa_add lea bx,t

27、ab2 mov al,decade xlat out dx,al call dl5ms mov dx,pb_add mov al,0dfh out dx,al mov dx,pa_add lea bx,tab2 mov al,unit xlat out dx,al call dl5ms loop output2 mov answer,0 mov count,0 pop cx pop ax retprints2 endp dl500msprocnearpushaxpushdxmovdx,500 ;延时500msmovah,0ffh int21hpopdxpopaxretdl500msendpdl

28、10msprocnearpushaxpushdxmovdx,10 ;延时10msmovah,0ffh int21hpopdxpopaxretdl10msendpdl5msprocnearpushaxpushdxmovdx,5 ;延时5msmovah,0ffh int21hpopdxpopaxretdl5msendpdl5sprocnearpushcxmovcx,10dl5s1:calldl500msloopdl5s1popcxretendpinitpciprocnear movah,00h moval,03h int10h;清屏movah,0b1hmoval,01hint1ahcmpah,0j

29、zinitpci2leadx,msg0initpci1:movah,09hint21hjmpexitinitpci2:movah,0b1hmoval,02hmovcx,device_idmovdx,vendor_idmovsi,0int1ahjncinitpci3;是否存在star pci9052板卡leadx,msg1jmpinitpci1initpci3:movdi,pcibar1movah,0b1hmoval,09hint1ah;读取该卡pci9052基地址jncinitpci4leadx,msg2jmpinitpci1initpci4:andcx,0fffchmovpci_io_bas

30、eaddress0,cxmovdi,pcibar3movah,0b1hmoval,09hint1ah;读取该卡扩展的8位io基地址jncinitpci5leadx,msg3jmpinitpci1initpci5:andcx,0fffchmovio_bit8_baseaddress,cxmovdi,pciiprmovah,0b1hmoval,09hint1ah;读取irq号jncinitpci6leadx,msg4jmpinitpci1initpci6:movpci_irq_number,clretinitpciendpmodifyaddress1procnearmovax,io_bit8_ba

31、seaddressaddio8259_0,axaddio8259_1,axaddrd_io8259,axretmodifyaddress1endpmodifyaddress2procnear movcx,io_bit8_baseaddressaddcom_add,cxaddpa_add,cxaddpb_add,cxaddpc_add,cxretmodifyaddress2endpmodifyvectorprocnearpushesmoval,pci_irq_numbercmpal,08hjaemodifyvector1addal,08h ;irq0.7 - 中断向量8.fjmpmodifyve

32、ctor2modifyvector1:addal,70h-08h;irq8.f - 中断向量70h.77hmodifyvector2:movint_vector,almovah,35hint21hmovint_ip,bx;保护原中断处理例程地址movax,esmovint_cs,axmoval,int_vectorleadx,int_0pushdspushcspopdsmovah,25hint21h ;设置新中断向量popdsmovbl,pci_irq_numbermovdx,21hcmpal,08hjbmodifyvector3movdx,0a1hmodifyvector3:inal,dxm

33、ovint_mask,alandbl,07hmovcl,blmovbl,1shlbl,clnotblandal,bloutdx,al;允许中断popesstiretmodifyvectorendpexit:climovbl,pci_irq_numbermovdx,21hcmpal,08hjbexit1movdx,0a1hexit1:moval,int_maskoutdx,al;屏蔽中断pushdsmoval,int_vectormovdx,int_ip;保护原中断处理例程地址movax,int_csmovah,25hint21h ;设置新中断向量popdsstimovah,4chint 21h

34、endstart5、上机调试过程5.1 硬件调试过程刚开始,按照硬件原理图连线后,发现中断无法读入,进过多次的调试,检查到试验箱的接口出现了问题,于是更换了试验箱,从而解决了这个问题。在投币后的倒计时的功能中,由于8255每次只能位选一个led数字管,所以导致每次显示时间时都是一位一位进行,无法实现各位十位的同时显示,为了解决这个问题,我加入了循环程序,将一秒钟的显示分为100次,每次显示一个数字的延迟为5ms,显示两个数字也就是10ms,循环一百次的话正好是1s,这样在不断的循环显示时,基本可以保证在肉眼无法识别的情况下完成了两个数字位的同时显示,后来老师又要我新增一个挂机的功能,于是我就将

35、8255a的pc口的低四位设置成输入方式。并用其中的pc0端口接受挂机信号。还要在每次led管显示数之前,对8255a的pc口的pc0口进行测试是否有挂机信号的接入。若有挂机信号的接入则转到相应的程序部分去执行,并在led管上显示剩余的时间以及总的投币数。最后在最后一次投币的20秒倒计时时蜂鸣器报警。5.2 软件调试程序是使用汇编语言编写的,在一开始,根据我的整体的思路开始设计,然后上机调试,发现错误之后对错误进行查找并修改,如此反复的修改直到程序没有逻辑错误为止,然后开始一步步的实现实验设计要求的功能,根据得到的实验结果对程序进行再次的修改,如此,保证最后所有的功能得意实现,运行的时候也有同样会有问题出现。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论