[工学]北京交通大学微机原理实验报告_第1页
[工学]北京交通大学微机原理实验报告_第2页
[工学]北京交通大学微机原理实验报告_第3页
[工学]北京交通大学微机原理实验报告_第4页
[工学]北京交通大学微机原理实验报告_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、微机原理实验报告隋伟08212013自动化0801目 录一、i/o地址译码与交通灯控制实验3二、可编程定时器/计数器(8253)6三、中断实验(纯dos)11四、模/数转换器18 五、串行通讯 16六、课程综合实验(抢答器) 28七、自主设计实验led显示32 八、参考文献35一、i/o地址译码与交通灯控制实验一.实验目的通过并行接口8255实现十字路口交通灯的模拟控制,进一步掌握对并行口的使用。二.实验内容如图5-3,l7、l6、l5作为南北路口的交通灯与pc7、pc6、pc5相连,l2、l1、l0作为东西路口的交通灯与pc2、pc1、pc0相连。编程使六个灯按交通灯变化规律燃灭。十字路口交

2、通灯的变化规律要求:(1) 南北路口的绿灯、东西路口的红灯同时亮3秒左右。(2) 南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮。(3) 南北路口的红灯、东西路口的绿灯同时亮3秒左右。(4) 南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁若干次。(5) 转(1)重复。8255动态分配地址: 控制寄存器: 0c40bha口地址: 0c408hc口地址: 0c40ah 三程序流程图和程序清单data segment x db ?data endsstack1 segment stack dw 100h dup(0)stack1 endscode segment assume cs:code,d

3、s:data,ss:stack1start:mov ax,datamov ds,ax;-init-mov dx,0c40bh;写控制字mov al,80hout dx,al l3:mov dx,0c40ahmov al,24h;南北绿灯,东西红灯亮out dx,alcall delaycall delay;长延时,3s左右 call delay call delay call delay call delay call delay mov bl,8 mov al,04hl0:xor al,40h;南北黄灯闪,东西红灯亮out dx,alcall delay;延时 call delaydec b

4、l ;闪烁几次jnz l0call delaymov al,81h;南北红灯亮,东西绿灯亮out dx,al call delaycall delaycall delay;长延时,3s左右 call delay call delay call delay call delaymov bl,9 mov al,80hl1:xor al,02h;南北红灯亮,东西黄灯闪out dx,alcall delay;延时 call delaydec bljnz l1 ;闪烁几次 call delaymov dl,0ffhmov ah,06hint 21hjz l3;六号功能判断若无字符输入zf=1继续循环;-

5、mov ah,4chint 21h;-延时函数- delay : push cx push dx mov cx,1fffh lop1: mov dx,0ffffh lop2: dec dxjnz lop2loop lop1pop dxpop cxretcode ends end start四实验遇到的问题和解决方法问题:绿灯灭后黄灯没有出现闪烁的效果,一直保持常亮解决方法:修改程序,通过利用异或和循环指令使绿灯灭、红灯亮后,黄灯口的状态从0到1循环变换,并通过调用延迟子程序,从而实现人眼可辨的黄灯闪的效果。二、可编程定时时钟/计数器(8253)一、实验目的掌握8253的基本工作原理和编程方法。

6、二、实验内容1 按图5-1虚线连接电路,将计数器0设置为方式0,计数器初值为n(n0fh),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察out0电平变化(当输入n+1个脉冲后out0变高电平)。图 5-1 2 按图5-2连接电图,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察out1输出电平的变化(频率1hz)。 图5-2 三实验原理8253具有3个独立的计数通道,采用减1计数方式。在门控信号有效时,每输入1个计数脉冲,通道作1次计数操作。当计数脉冲是已知周期的时钟信号时,计数就成为定时。作计数器时, 要求计数的次数可直接作为计数器的初值预置到减

7、“1”计数器中。8253中各通道可有6种可供选择的工作方式, 以完成定时、计数或脉冲发生器等多种功能。本实验用到的是方式0计数结束中断。在写入计数值n之后的第一个clk的下降沿将n装入计数执行单元,待下一个clk的下降沿到来且门控信号gate为高电平时,通道开始启动计数。在计数过程中,out一直保持低电平,直到计数达“0”时,out输出由低电平变为高电平,并且保持高电平。8253动态分配地址: 控制寄存器: 0c403h计数器0地址: 0c400h计数器1地址: 0c401h 四程序流程图和程序清单1)data segment n equ 0bh;计数器初值,不大于0fh chldb 0ah,

8、0dh,'$'换行data endsstack1 segment stack dw 100 dup(0)stack1 endscode segment assume cs:code,ds:data,ss:stack1start:mov ax,data mov ds,ax;-init-mov dx,0c403h;控制寄存器地址mov al,10h;计数器0,低字节,方式0,二进制计数out dx,al ;写入控制字mov dx,0c400hmov al,nout dx,al ;写入计数初值mov cl,nl0: ;mov al,0;计数器0锁存;mov dx,io8253;out

9、 dx,almov dx,0c400hin al,dx;读取当前数值cmp al,cljne l0;若al不等于cl,则继续到l0循环dec cl;更改cl值mov dl,alcmp dl,09h ;是09吗?jle asci add dl,07h ;是afasci: add dl,30hmov ah,02h ;单字符输出计数器当前值int 21hmov dx,offset chl;输出字符串换行mov ah,09hint 21hcmp cl,0 jnl l0;cl不小于0时,继续循环;-mov ah,4chint 21hcode endsend start2)data segment x d

10、b ?data endsstack1 segment stack dw 100h dup(0)stack1 endscode segmentassume cs:code,ds:data,ss:stack1 start: mov ax,datamov ds,ax mov al,36h mov dx,0c403h ;写计数器0控制字 out dx,al mov ax,1000 ;写计数器0初值 mov dx,0c400h out dx,al ;先写低字节后写高字节 mov al,ah out dx,al ;- mov al,76h mov dx,0c403h out dx,al ;写计数器1控制字

11、 mov ax,1000 ;写计数器0初值 mov dx,0c401h out dx,al mov al,ah ;先写低字节后写高字节 out dx,al code endsend start五实验遇到的问题和解决方案问题:计数初值没有显示出来解决方法:进行td调试,发现逻辑上出现了问题。修改程序,通过利用cmp al,cl jnz l0来实现将所有的计数值都显示出来。三、中断实验(纯dos)一、实验目的 、掌握pc机中断处理系统的基本原理。 、学会编写中断服务程序。 二、实验原理与内容 1、实验原理 pc机用户可使用的硬件中断只有可屏蔽中断,由8259中断控制器管理。中断控制器用于接收外部的

12、中断请求信号,经过优先级判别等处理后向cpu发出可屏蔽中断请求。ibmpc、pc/xt机内有一片8259中断控制器对外可以提供8个中断源: 中断源 中断类型号 中断功能 irq0 08h 时钟 irq1 09h 键盘 irq2 0ah 保留 irq3 obh 串行口2 irq4 0ch 串行口1 irq5 0dh 硬盘 irq6 0eh 软盘 irq7 0fh 并行打印机 8个中断源的中断请求信号线irq0irq7在主机的62线isa总线插座中可以引出,系统已设定中断请求信号为“边沿触发”,普通结束方式。对于pc/at及286以上微机内又扩展了一片8259中断控制,irq2用于两片8259之间

13、级连,对外可以提供16个中断源: 中断源 中断类型号 中断功能 52 irq8 070h 实时时钟 irq9 071h 用户中断 irq10 072h 保留 irq11 o73h 保留 irq12 074h 保留 irq13 075h 协处理器 irq14 076h 硬盘 irq15 077h 保留 pci总线中的中断线只有四根,inta#、intb#、intc#、intd#,它们需要通过p&p的设置来和某一根中断相连接才能进行中断申请。2、实验内容 实验电路如图31,直接用手动产单脉冲作为中断请求信号(只需连接一根导线)。要求每按一次开关产生一次中断,在屏幕上显示一次“tpc pci

14、 card interrupt”,中断10次后程序退出。 三、编程提示 1. 由于9054的驱动程序影响直写9054芯片的控制寄存器,中断实验需要在纯dos的环境中才能正常运行。这里指的纯dos环境是指微机启动时按f8键进入的dos环境。windows重启进入msdos方式由于系统资源被重新规划过,所以也不能正常实验。 2. 由于tpc卡使用pci总线,所以分配的中断号每台微机可能都不同,编程时需要了解当前的微机使用那个中断号并进行设置,获取方法请参看汇编程序使用方法的介绍。(也可使用自动获取资源分配的程序取得中断号) 3. 在纯dos环境下,有些微机的bios设置中有将资源保留给isa总线使

15、用的选项,致使在纯dos环境(windows环境下不会出现此问题)下pci总线无法获得系统资源,也就 53 无法做实验,这时需要将此选项修改为使用即插即用。 4. 在纯dos环境下,有些微机的bios设置中有使用即插即用操作系统的选项,如果在使用即插即用操作系统状态下,bios将不会给tpc卡分配系统资源,致使在纯dos环境(windows环境下不会出现此问题)下pci总线无法获得系统资源,也就无法做实验,这时需要将此选项修改为不使用即插即用操作系统。 5. 由于tpc卡使用9054芯片连接微机,所以在编程使用微机中断前需要使能9054的中断功能,代码如下: mov dx,ioport_cen

16、t+68h ;设置 tpc 卡中9054芯片io口,使能中断 in ax,dx or ax,0900h out dx,ax 其中ioport_cent是9054芯片寄存器组的i/o起始地址,每台微机可能都不同,编程时需要了解当前的微机使用哪段并进行设置,获取方法请参看本书结尾部分的介绍。(也可使用自动获取资源分配的程序取得),+68h的偏移是关于中断使能的寄存器地址,设置含义如下: 程序退出前还要关闭9054的中断,代码如下: mov dx,ioport_cent+68h ;设置 tpc 卡中9054芯片io口,关闭中断 in ax,dx and ax,0f7ffh out dx,ax 6.

17、pc机中断控制器8259 的地址为20h、21h,编程时要根据中断类型号设置中断矢量,8259中断屏蔽寄存器imr对应位要清零(允许中断),中断服务结束返回前要使用中断结束命令: mov al,20h out 20h,al 中断结束返回dos时应将imr对应位置1,以关闭中断 。 四、参考流程图 五、参考程序 程序名:int.asm;386以上微机适用 ;纯dos下才能使用 ;tasm4.1或以上编译 data segment int_vect equ 071h ;中断0-7的向量为:08h-0fh,中断8-15的向量为:70h-77h 55 irq_mask_2_7 equ 01111101

18、1b ;中断掩码,中断0-7时从低至高相应位为零,中断8-15时第2位为零 irq_mask_9_15 equ 011111101b ;中断0-7时全一,中断8-15时从低至高相应位为零 ioport_cent equ 0d800h ;tpc 卡中9054芯片的io地址 csreg dw ? ipreg dw ? ;旧中断向量保存空间 irq_times dw 00h ;中断计数 msg1 db 0dh,0ah,'tpc pci card interrupt',0dh,0ah,'$' msg2 db 0dh,0ah,'press any key to e

19、xit!',0dh,0ah,'$' msg3 db 0dh,0ah,'press dmc to interrupt 10 times and exit!',0dh,0ah,'$' data ends stacks segment db 100 dup (?) stacks ends code segment assume cs:code,ds:data,ss:stacks,es:data start: ;enable local interrupt input .386 cli mov ax,data mov ds,ax mov es,a

20、x mov ax,stacks mov ss,ax mov dx,ioport_cent+68h ;设置 tpc 卡中9054芯片io口,使能中断 in ax,dx or ax,0900h out dx,ax mov al,int_vect ;保存原中断向量 mov ah,35h int 21h mov ax,es mov csreg,ax mov ipreg,bx mov ax,cs ;设置新中断向量 56 mov ds,ax mov dx,offset int_proc mov al,int_vect mov ah,25h int 21h in al, 21h ;设置中断掩码 and al

21、, irq_mask_2_7 out 21h, al in al, 0a1h and al, irq_mask_9_15 out 0a1h, al mov ax,data mov ds,ax mov dx,offset msg2 mov ah,09h int 21h mov dx,offset msg3 mov ah,09h int 21h mov irq_times,0ah sti loop1: cmp irq_times,0 ;等待中断并判断中断10次后退出 jz exit mov ah,1 int 16h jnz exit ;按任意键退出 jmp loop1 exit: cli mov

22、bl, irq_mask_2_7 ;恢复中断掩码 not bl in al, 21h or al, bl out 21h, al mov bl, irq_mask_9_15 not bl in al, 0a1h 57 or al, bl out 0a1h, al mov dx,ipreg ;恢复原中断向量 mov ax,csreg mov ds,ax mov ah,25h mov al,int_vect int 21h mov dx,ioport_cent+68h ;设置 tpc 卡中9054芯片io口,关闭中断 in ax,dx and ax,0f7ffh out dx,ax mov ax,

23、4c00h int 21h int_proc proc far ;中断处理程序 cli push ax push dx push ds dec irq_times mov ax,data ;interrupt to do mov ds,ax mov dx,offset msg1 mov ah,09h int 21h mov al,20h ;send eoi out 0a0h,al out 20h,al pop ds pop dx pop ax sti iret int_proc endp code ends四、模/数转换器一、实验目的 了解模/数转换的基本原理,掌握adc0809的使用方法。

24、二、实验内容 、实验电路原理图如图38。通过实验台左下角电位器rw1输出05直流电压送入adc0809通道0(in0),利用debug的输出命令启动/转换器,输入命令读取转换结果,验证输入电压与转换后数字的关系。 启动in0开始转换: out 0298 0 读取转换结果: in 0298 、编程采集in0输入的电压,在屏幕上显示出转换后的数据(用16进制数)。 、将jp3的1、2短接,使in2处于双极性工作方式,并给in1输入一个低频交流信号(幅度为±),编程采集这个信号数据并在屏幕上显示波形。 三、实验提示 、adc0809的in0口地址为298h,in1口地址为299h。 、in

25、0单极性输入电压与转换后数字的关系为: 其中ui为输入电压,uref为参考电压,这里的参考电压为机的电源。 、一次a/d转换的程序可以为 mov dx,口地址 out dx,al ;启动转换 ;延时 in al,dx ;读取转换结果放在al中四、参考流程图五、参考程序:ad_1.asm ioport equ 0d400h-0280h io0809a equ ioport+298h code segment assume cs:code start:mov dx,io0809a ;启动a/d转换器 out dx,al mov cx,0ffh ;延时 delay:loop delay in al,

26、dx ;从a/d转换器输入数据 mov bl,al ;将al保存到bl mov cl,4 shr al,cl ;将al右移四位 call disp ;调显示子程序显示其高四位 mov al,bl and al,0fh call disp ;调显示子程序显示其低四位 mov ah,02 mov dl,20h ;加回车符 int 21h mov dl,20h int 21h push dx mov ah,06h ;判断是否有键按下 mov dl,0ffh int 21h pop dx je start ;若没有转start mov ah,4ch ;退出 int 21h disp proc near

27、 ;显示子程序 mov dl,al cmp dl,9 ;比较dl是否>9 jle ddd ;若不大于则为'0'-'9',加30h为其ascii码 add dl,7 ;否则为'a'-'f',再加7 ddd: add dl,30h ;显示 mov ah,02 int 21h ret disp endp code ends end start五、串行通讯一、实验目的1、 进一步了解串行通信的基本原理。2、 掌握串行接口芯片8250的工作原理和编程方法。3、 熟悉pc机串行口的基本连接方法二、实验内容1、pc机rs-232串口自发自

28、收。按照pc机串口自发自收的连接方法连线。编写pc机自发自收串行通信程序,要求:从键盘输入一个字符,将字符通过串口发送出去,再由此串口将字符接收回来并在屏幕上显示,实现自发自收。2、 两台pc机间rs-232串口通信。按照pc机rs-232串口直接互连的方法连接两台pc机。 编写pc机直接互连串行通信程序;要求:由甲机键盘键入字符经串口发送给乙机,再由乙机通过串口接收字符并显示在屏幕上。当键入感叹号“!”,结束收发过程。三实验原理1)本实验为异步通信:以字符为单位进行传送,每传送一个字符,以起始位作为开始标志,以停止位作为结束标志。异步串行通信的工作过程是:传送开始后,接收设备不断地检测传输线

29、是否有起始位到来,当接收到一系列的“1”(空闲或停止位)之后,检测到第一个“0”,说明起始位出现,就开始接收所规定的数据位、奇偶校验位及停止位。经过接收器处理,将停止位去掉,把数据位拼装成一字节数据,并且经奇偶校验无错误,才算是正确地接收到了一个字符。当一个字符接收完毕,接收设备又继续测试传输线,监视“0”电平的到来(下一个字符的开始),直到全部数据接收完毕。2)8250各部分功能说明8250片内有10个寄存器,其中有几个是共用地址的,其识别由线路控制寄存器(lcr)的最高位dlab来决定。各寄存器的地址和格式如下所示:. 3)数据发送和接收:四程序清单1自发自收data segment ch

30、ldb 0ah,0dh,'$'换行字符串data endsstack1 segment stack dw 100 dup(0)stack1 endscode segment assume cs:code,ds:data,ss:stack1start:mov ax,data mov ds,ax;-init-mov dx,3fbh;mov al,80h;dlab=1 out dx,al mov ax,0ch;n=12 baud=9600bpsmov dx,3f8h;低位 out dx,almov al,ahinc dx out dx,almov al,03h;八位数据,1停止,无校

31、验mov dx,3fbh;线路控制reg out dx,almov al,0;屏蔽全部中断mov dx,3f9h out dx,alwait1: mov dx,3fdh;读线路状态寄存器in al,dxtest al,1eh;判断是否有错jnz errortest al,01h;判断是否收到jnz receivetest al,20h;判断发送端是否空jz wait1mov dl,0ffh;六号功能调用读入待发送数据mov ah,06hint 21hjz wait1mov dx,3f8h;写发送regout dx,aljmp wait1;返回 wait1char: push axmov dl,

32、al;显示接收mov ah,02hint 21hmov dx,offset chl;输出字符串换行mov ah,09hint 21hpop axjmp wait1error:mov dx,3fdhin al,dxmov dl,'?'对于错误显示'?"mov ah,02hint 21hjmp wait1receive:mov dx,3f8hin al,dx;读数据接收寄存器 cmp al,'!'判断是否结束jne char;- mov ah,4ch int 21hcode ends end start2.双机通信(1)发送端: code segm

33、ent assume cs:codestart: mov al,80h ;8250初始化,设dlab=1 mov dx,3fbh out dx,al mov ax,30h mov dx,3f8h out dx,al ;写入除数低字节 mov al,ah inc dx out dx,al ;写入除数高字节 mov al,0ah ;7位数据,1位停止,奇校验 mov dx,3fbh out dx,al ;写入线路控制寄存器 mov al,03h mov dx,3fch out dx,al ;写入modem控制寄存器 mov al,0 mov dx,3f9h out dx,al ;写中断允许寄存器,

34、屏蔽所有中断 wait1: mov dx,3fdh ;读线路状态寄存器 in al,dx test al,1eh ;出错否 jnz error ;test al,01h ;接收数据就绪否 ;jnz send ;发送 test al,20h ;发送寄存器空否,不空,返回等待 jz wait1 send: mov ah,1 int 21h ;读键盘 cmp al,21h ;是'!'? jz exit ;是,返回操作系统 mov dx,3f8h ;不是,则发送 out dx,al jmp wait1 ;返回等待 error: mov dx,3fdh ;出错则清除线路状态寄存器 in

35、al,dx mov dl,'?' ;显示'?' mov ah,02h int 21h jmp wait1 exit: mov ah,4ch int 21h code ends end start(2)接收端: code segment assume cs:code start: mov al,80h ;8250初始化 mov dx,3fbh out dx,al mov ax,30h ;写除数 mov dx,3f8h out dx,al ;写入除数低字节 mov al,ah inc dx mov dx,3f9h out dx,al ;写入除数高字节 mov al,

36、0ah mov dx,3fbh out dx,al ;写入线路控制寄存器 mov al,03h mov dx,3fch out dx,al ;写入modem控制寄存器 mov al,0 mov dx,3f9h out dx,al ;写中断允许寄存器,屏蔽所有中断 wait1: mov dx,3fdh ;读线路状态寄存器 in al,dx test al,1eh ;出错否 jnz error test al,01h ;接收数据就绪否 jnz receive ;转接收 ;test al,20h ;发送寄存器空否,不空,返回等待 ;jz wait1 jmp wait1 ;均返回等待 receive:

37、 mov dx,3f8h ;读接收数据 in al,dx and al,01111111b ;保留位数据 cmp al,21h ;是'!'? jnz char mov ah,4ch ;返回操作系统 int 21h char: push ax mov dl,al mov ah,2 ;显示接受字符 int 21h pop ax jmp wait1 ;返回等待 error: mov dx,3fdh ;出错则清除线路状态寄存器 in al,dx mov dl,'?' ;显示'?' mov ah,02h int 21h jmp wait1code ends

38、 end start五实验遇到的问题和解决方法问题:当按下一个字符时,屏幕上会显示两个字符。其中一个不正确。解决方法:显示字符时,用6号功能代替2号功能。这样问题就得到了解决。六、课程综合实验(抢答器)一、实验目的1、了解微机化竞赛抢答器的基本原理。2、进一步学习使用并行接口。二、实验内容图5-4为竞赛抢答器(模拟)的原理图,逻辑开关k0k7代表竞赛抢答按钮07号,当某个逻辑电平开关置“”时,相当某组抢答按钮按下。在七段数码管上将其组号(07)显示出来,并使喇叭响一下。从键盘上按空格键开始下一轮抢答,按其它键程序退出。图 5-4 8255动态分配地址: 控制寄存器: 0c40bha口地址: 0

39、c408hc口地址: 0c40ah 三程序流程图和程序清单data segment list db 3fh,06h,5bh,4fh,66h,6dh,7dh,07hdata endsstack1 segment stack dw 100h dup(0)stack1 endscode segment assume cs:code,ds:data,ss:stack1start: mov ax,data mov ds,ax;- mov dx,0c40bh mov al,89h out dx,al ;对8255进行初始化l0: mov dx,0c40ah in al,dx ;读c口状态 cmp al,0 ;如果为0则循环 jz l0 mov bl,0l1: inc bl shr al,1 ;将al逻辑右移 jnc l1 dec bl mov al,bl ;求出组号 mov bx,offset list ; 七段显示代码表的首址送bx and ax,00ffh ; 屏蔽ax高字节,组号 add bx,ax ; 形成显示字符

温馨提示

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

评论

0/150

提交评论