您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页广工计算机接口与通信实验报告(原创).doc

广工计算机接口与通信实验报告(原创).doc

来源:意榕旅游网


接口与通讯实验报告

1、8253定时/计数器实验

2、8255并行接口实验 3、数字式时钟(电子钟) 4、D/A(数/模)转换实验

5、A/D(模/数)转换实验

学生学院 计算机学院 专业班级 学 号 311000 学生姓名 指导教师

2013年1 月1日

__计算机__学院__2010级计算机科学与技术_专业__四___班___组、学号3110006015

姓名 张法光 协作者_________ 教师评定_________________ 实验题目 8253定时/计数器实验

一、 实验目的与要求

学习8253可编程定时器/计时器定时方法。学习8253多级串联实现大时间常数的定时方法。学习8086/86控制8253可编程定时器的方法。

二、 实验内容

用8253对标准脉冲信号进行计数,就可以实现定时功能。用板上的1MHz作为标准信号,将8253可编程计数器/定时器的时间常数设在1000000次,就可以在定时器的管脚上输出1秒针高/1秒钟低得脉冲信号。因为8253每个计数器只有十六位,要用两个计数器才能实现一百万次的技术,实现每一秒输出状态发生一次反转。

1、实验电路

2、实验连线

8253的CS,接地址译码CS4,8253_GATEO,接VCC(是+5V),8253_GATE1,也接VCC(是+5V)。8253_CLK1,接1MHz。具体连线见下表:

3、实验原理

8253即可做定时器又可作计数器:

(1)计数:计数器装入初值后,当GATE为高电平时,可用外部事件为CLK,脉冲对计数值进行减1计数,每来一个脉冲减1,当计数值减至0时,在OUT端输出一个标志信号。

(2)定时:计数器装入初值后,当GATE为高电平时,由CLK脉冲触发开始自动计数,当计数到零时,发计数结束定时信号。

8253控制字

4、实验程序框图

三、实验程序与注释

CONTROL equ 0c003h ;控制口地址 COUNT0 equ 0c000h ;计数器0地址 COUNT1 equ 0c001h ;计数器1地址 COUNT2 equ 0c002h ;计数器2地址 code segment

assume cs:code

start proc near

mov al, 36H(00110110B) ; 计数器0,16位,方式3,二进制 mov dx, CONTROL

out dx, al; 将控制字写入控制寄存器

mov ax, 1000 ;在计数器0中写入初值 mov dx, COUNT0

out dx, al ; 计数器低字节 mov al, ah

out dx, al ; 计数器高字节

mov al, 76H(01110110B); 计数器1,16位,方式3,二进制 mov dx, CONTROL

out dx, al ;将控制字写入控制寄存器 mov ax, 1000 ;在计数器1中写入初值 mov dx, COUNT1

out dx, al ; 计数器低字节 mov al, ah

out dx, al ; 计数器高字节 jmp $

start endp code ends

end start

若改用方式2,并改变时间常数。如何修改程序。

(程序段加粗为修改部分) CONTROL equ 0c003h ;控制口地址 COUNT0 equ 0c000h ;计数器0地址 COUNT1 equ 0c001h ;计数器1地址 COUNT2 equ 0c002h ;计数器2地址 code segment

assume cs:code

start proc near

mov al, 34H(00110100B) ; 计数器0,16位,方式2,二进制 mov dx, CONTROL

out dx, al; 将控制字写入控制寄存器

mov ax, 5000 ;在计数器0中写入初值 mov dx, COUNT0

out dx, al ; 计数器低字节 mov al, ah

out dx, al ; 计数器高字节

mov al, 74H(01110110B); 计数器1,16位,方式2,二进制 mov dx, CONTROL

out dx, al ;将控制字写入控制寄存器 mov ax, 200 ;在计数器1中写入初值 mov dx, COUNT1

out dx, al ; 计数器低字节 mov al, ah

out dx, al ; 计数器高字节 jmp $

start endp code ends

end start

__计算机__学院__2010级计算机科学与技术_专业__四___班___组、学号3110006015

姓名 张法光 协作者_________ 教师评定_________________ 实验题目 8255并行接口实验

一、 实验目的与要求

1.了解8255芯片结构及编程方法。 2.了解8255输入/输出实验方法。

二、 实验内容

利用8255可编程并行口芯片,实现输入/输出实验,实验中用8255PA口作输出,PB口作输入。

1、实验电路

2、实验连线 8255的CS,接地址译码/CS0。PA0-PA7(PA口)接LED0-LED7(LED),PB0-PB7(PB口)接K0-K7(开关量)。数据线、读/写控制、地址线、复位信号板上已接好。

连接孔1 连接孔2 连接孔1 连接孔2 连接孔1 连接孔2 K0 → 8255-PB0 K1 → 8255-PB1 K2 → 8255-PB2 K3 → 8255-PB3 K4 → 8255-PB4 K5 → 8255-PB5 K6 → 8255-PB6 K7 → 8255-PB7 CS0 → 8255_CS L0 → 8255-PA0 注:若8255的CS接地址L1 → 8255-PA1 孔8000H。 L2 → 8255-PA2 则PA口地址为8000H L3 → 8255-PA3 PB口地址为8001H L4 → 8255-PA4 PC口地址为8002H L5 → 8255-PA5 控制口地址为8003H L6 → 8255-PA6 L7 → 8255-PA7

3、实验原理

可编程通用接口芯片8255A有三个八位的并行I/O口,它有三种工作方式。本实验采用是方式0:PA,PC口输出,PB口输入。 *8255控制字

4.实验程序框图

三、实验程序与注释

mode equ 82H ; 10000010B; 方式0,PA,PC输出,PB输入 PortA equ 8000h ; Port A PortB equ 8001h ; Port B PortC equ 8002h ; Port C

CAddr equ 8003h ; 控制字地址

code segment

assume cs:code

start proc near

Start:

mov al, mode mov dx, CAddr

out dx, al ; 输出控制字

mov dx, PortC

out al, dx ; 输出到PortC mov dx, PortB

in dx, al ; 输入PortB mov dx, PortA

out dx, al ; 输出到PortA

mov ah, 200 call delay

jmp Start endp

delay proc near ; 入栈保护现场 push ax mov al,0 push cx mov cx,ax

loop $ ; 出栈恢复现场 pop cx pop ax ret delay endp

code ends end start

若将B口和C口的功能对调(连线对调),如何编写程序。

(程序段加粗为修改部分)

mode equ 89H ; 10001001B, 方式0,PA,PB输出,PC输入 PortA equ 8000h ; Port A PortB equ 8001h ; Port B PortC equ 8002h ; Port C

CAddr equ 8003h ; 控制字地址 code segment

assume cs:code

start proc near

Start:

mov al, mode mov dx, CAddr

out dx, al ; 输出控制字

mov dx, PortC

in al, dx ; 读入PortC mov dx, PortB

out dx, al ; 输出到PortB mov dx, PortA

out dx, al ; 输出到PortA

mov ah, 200 call delay jmp Start endp

delay proc near push ax mov al,0 push cx mov cx,ax loop $ pop cx pop ax ret delay endp

code ends end start

__计算机__学院__2010级计算机科学与技术_专业__四___班___组、学号3110006015

姓名 张法光 协作者_________ 教师评定_________________ 实验题目 数字式时钟(电子钟)

一、 实验目的与要求

进一步掌握定时器的使用和编程方法。进一步掌握中断处理程序的编程方法。进一步掌握数码显示电路的驱动方法。

二、 实验内容

利用CPU的定时器和试验仪上提供的数码显示电路,设计一个电子时钟。格式如下:XX XX XX 由左向右分别为:时、分、秒。 1、实验电路

2、实验连线 连接孔1 连接孔2 CS4 → 8253_CS VCC → 8253_GATE1 1MHz → 8253_CLK1

连接孔1 连接孔2 CS0 → KEY/LED_CS CS5 → 8259CS 8253_OUT1 → 8259_INT0

3、实验原理

对于8088的实验,8255做定时器,用定时器输出的脉冲控制8259产生中断,在8259中断处理程序中,对时、分、秒进行计数,在等待中断的循环中用LED显示时间。8253用定时/计数器1,8253片选接CS4,地址为0C000H,8253时钟源CLK1接时钟信号1MHz。8253的GATE1接VCC。8259中断INTO接8253的OUT1,片选接CS5,地址为0D000H。显示电路的KEY/LED CS 接CS0,地址为08000H。定时器没100us中断一次,在中断服务程序中,对中断次数进行技术,100us计数10000次就是1秒。然后再对秒计数得到分和小时值,并送入显示缓存区。

4、实验程序框图

三、实验程序与注释

; 本实验利用8253做定时器,用定时器输出的脉冲控制8259产生中断 ; 在8259中断处理程序中,对时、分、秒进行计数,在等待中断的循 ; 环中用LED显示时间。

; 8253用定时器/计数器1,8253片选接CS4,地址为0C000H。8253时钟 ; 源CLK1接分频电路的F/16 输出。分频器的Fin接1MHz时钟。8253的 ; GATE1接VCC。

; 8259中断INT0接8253的OUT1,片选接CS5,地址为0D000H。 ; 显示电路的KEY/LED CS 接CS0,地址为08000H。 ;

CONTROL equ 0c003h COUNT0 equ 0c000h COUNT1 equ 0c001h COUNT2 equ 0c002h

md8255 equ 82h ; 8255 工作方式

PA8255 equ 8000h ; 8255 PA口输出地址 CTL8255 equ 8003h ; 8255 控制口地址

OUTBIT equ 08002h ; 位控制口 OUTSEG equ 08004h ; 段控制口

ICW1 equ 13H ;(00010011B) ,单片8259, 上升沿中断, 要写ICW4 ICW2 equ 20H ;(00100000B) ,中断号为20H

ICW4 equ 01H ;(00000001B) ,工作在8086/88 方式 OCW1 equ FEH ;(11111110B) ,只响应INT0 中断 CS8259A equ 0d000h ; 8259的基地址和偶地址 CS8259B equ 0d001h

data segment CNT db 0

LEDBuf db 6 dup(?) ; 显示缓冲 Num db 1 dup(?) ; 显示的数据 DelayT db 1 dup(?) Hour db 0 Minute db 0 Second db 0

LEDMAP: ; 八段管显示码

db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h data ends

code segment

assume cs:code, ds: data Delay proc near

push ax ; 延时子程序 push cx

mov al, 0 mov cx,ax loop $

pop cx pop ax ret Delay endp

DisplayLED proc near

mov bx, offset LEDBuf

mov cl, 6 ; 共6个八段管

mov ah, 20h ; 00100000b , 从左边开始显示 DLoop:

mov dx, OUTBIT mov al, 0

out dx,al ; 关所有八段管 mov al, [bx] mov dx, OUTSEG out dx,al

mov dx, OUTBIT mov al, ah

out dx, al ;

push ax mov ah, 1 call Delay pop ax

shr ah, 1 inc bx dec cl jnz DLoop

mov dx, OUTBIT mov al, 0

out dx,al ; ret

DisplayLED endp

IEnter proc near push ax push dx

inc Second mov al, Second cmp al, 60 jne Exit

mov Second, 0 inc Minute mov al, Minute cmp al, 60 jne Exit

显示一位八段管 关所有八段管

mov Minute, 0 inc Hour mov al, Hour cmp al, 24 jne Exit

mov Hour, 0 Exit:

mov dx, CS8259A

mov al, 20h ; out dx, al

pop dx pop ax iret IEnter endp

IInit proc

mov dx, CS8259A mov al, ICW1 out dx, al

mov dx, CS8259B mov al, ICW2 out dx, al

mov al, ICW4 out dx, al

mov al, OCW1 out dx, al ret IInit endp

start proc near mov ax, data mov ds, ax

mov Hour, 0 mov Minute, 0 mov Second, 0

cli

中断服务程序结束指令 mov ax, 0 mov ds, ax

mov al, 76H ; 01110110B, 计数器1,16位,方式3,二进制 mov dx, CONTROL out dx, al

mov ax, 62500 ; 设定计数值,16us计数62500次就是一秒 mov dx, COUNT1

out dx, al ; mov al, ah

out dx, al ;

mov al, MD8255 ; mov dx, CTL8255 out dx, al

mov bx, 4*ICW2 ;

mov ax, code

shl ax, 4 ; x 16

add ax, offset IEnter ; mov [bx], ax ;

mov ax, 0 inc bx inc bx

mov [bx], ax ;

call IInit

mov ax, data mov ds, ax

mov CNT, 0 ; mov al, CNT mov dx, PA8255 out dx, al sti

LP: ; mov al, Hour mov ah, 0 mov cl, 10 div cl

计数器低字节 计数器高字节 设定8255工作方式 中断号 中断入口地址(段地址为0)

以段地址加上中断处理程序偏移地址注册中断向量表代码段地址为0 计数值初始为0 等待中断,并计数。

mov ch, ah mov ah, 0

mov bx, offset LEDMAP add bx, ax mov al, [bx] mov LEDBuf, al

mov bx, offset LEDMAP mov al, ch mov ah, 0 add bx, ax mov al, [bx] or al, 80h

mov LEDBuf+1, al

mov al, Minute mov ah, 0 mov cl, 10 div cl

mov ch, ah mov ah, 0

mov bx, offset LEDMAP add bx, ax mov al, [bx] mov LEDBuf+2, al

mov bx, offset LEDMAP mov al, ch mov ah, 0 add bx, ax mov al, [bx] or al, 80h

mov LEDBuf+3, al

mov al, Second mov ah, 0 mov cl, 10 div cl

mov ch, ah mov ah, 0

mov bx, offset LEDMAP

add bx, ax mov al, [bx] mov LEDBuf+4, al

mov bx, offset LEDMAP mov al, ch mov ah, 0 add bx, ax mov al, [bx] or al, 80h

mov LEDBuf+5, al

call DisplayLED

jmp LP

start endp

code ends

end start

1、若使用IR1做中断源,如何编写程序? 答:将OCW1的控制字改为FDH(11111101B) 2、将电子钟的秒速变慢,如何编写程序?

答:8253时钟源CLK1接分频电路的F/16 输出。分频器的Fin接4MHz时钟。同时把电子

时钟实验程序段中8253的计数值修改为250000。

四、心得体会

第一次上机是做8253定时计数器实验,所以印象十分深刻。加上实验老师在上次实验结束后提醒了电子时钟是个综合性实验,难度相对较大,建议我们提前预习。为了更好地理解实验原理和具体操作,提前复习了定时器的使用和编程方法,同时上网查询了8259中断控制处理程序的实验原理。实验的关键在于计数的实现和中断控制的调用,对8253和8259初始化和写入各端口控制字等。最终在实验课中完成了这看似复杂的电子时钟实验,本次实验比想象中做得顺利,得益于实验前的预习和实验课程上老师的讲解。其实综合性实验并不是很难,关键在于对实验原理的理解和动手操作,逐步付诸实践。

__计算机__学院__2010级计算机科学与技术_专业__四___班___组、学号3110006015

姓名 张法光 协作者_________ 教师评定_________________ 实验题目 D/A(数/模)转换实验

一、 实验目的与要求

1、了解D/A转换的基本原理。

2、了解D/A转换芯片0832的性能及编程方法。 3、了解单片机系统中扩展D/A转换的基本方法。

二、 实验内容

利用DAC0832,编制程序产生锯齿波、三角波、正弦波。三种波轮流显示,用示波器观看。

1、 实验电路

2、 实验连线

3、 实验原理

这是用总线器件做的ADC实验,对于MCS196,LPC2103,芯片已经带有ADC转换电路,也可以用片上的ADC进行模数转换。

(1)D/A转换是把数字量转换成模拟量的变换,试验台上D/A电路输出的是模拟电压信号。要实现实验要求,比较简单的方法是产生三个波形的表格,然后通过差白哦来实现波形显示。 (2)产生锯齿波和三角波的表格只需由数字量的增减来控制,同时要注意三角波要封端来产生。要产生正弦波,较简单的方法是造一张正弦数字量表。即查函数表得到的值转换成十六进制数填表。D/A转换取值范围为一个周期,采样点越多,精度越高些。本例采用的采样点为256点/周期。

(3)3为D/A转换的输入数据与输出电压的关系为U(0~-5V)=Uref/256*N与U(-5V~+5V)=2*Uref/256*N-5(这里的Uref为+5)

4、 实验程序框图

三、实验程序与注释

CS0832 equ 8000h data segment

assume ds: data SinData:

;正弦数字量表

DB 0C0H, 0C3H, 0C6H, 0C9H, 0CCH, 0CFH, 0D2H, 0D5H DB 0D8H, 0DBH, 0DEH, 0E0H, 0E3H, 0E6H, 0E8H, 0EAH DB 0EDH, 0EFH, 0F1H, 0F3H, 0F5H, 0F6H, 0F8H, 0F9H DB 0FBH, 0FCH, 0FDH, 0FEH, 0FEH, 0FFH, 0FFH, 0FFH DB 0FFH, 0FFH, 0FFH, 0FFH, 0FEH, 0FEH, 0FDH, 0FCH DB 0FBH, 0F9H, 0F8H, 0F6H, 0F5H, 0F3H, 0F1H, 0EFH DB 0EDH, 0EAH, 0E8H, 0E6H, 0E3H, 0E0H, 0DEH, 0DBH DB 0D8H, 0D5H, 0D2H, 0CFH, 0CCH, 0C9H, 0C6H, 0C3H DB 0C0H, 0BCH, 0B9H, 0B6H, 0B3H, 0B0H, 0ADH, 0AAH DB 0A7H, 0A4H, 0A1H, 9FH, 9CH, 99H, 97H, 95H DB 92H, 90H, 8EH, 8CH, 8AH, 89H, 87H, 86H DB 84H, 83H, 82H, 81H, 81H, 80H, 80H, 80H DB 80H, 80H, 80H, 80H, 81H, 81H, 82H, 83H DB 84H, 86H, 87H, 89H, 8AH, 8CH, 8EH, 90H DB 92H, 95H, 97H, 99H, 9CH, 9FH, 0A1H, 0A4H

DB 0A7H, 0AAH, 0ADH, 0B0H, 0B3H, 0B6H, 0B9H, 0BCH

ends code segment

assume cs:code

proc Delay near push cx mov cx, ax DelayLoop:

;延时子程序 nop nop nop nop nop nop

loop DelayLoop pop cx ret endp

proc OutputDA near ;输出子程序 mov dx, CS0832

out dx, al ret endp

proc ShowSin near ;显示正弦波 push cx

mov bx, 400H + offset SinData mov cx, 80h

ShowSinLoop: ;循环显示波形 mov al, [bx] call OutputDA inc bx

mov ax, 40 ; call Delay

loop ShowSinLoop pop cx ret endp

proc ShowTri near ; push cx

mov bx, 80h mov cx, 80h ShowTriLoop:

mov al, bl call OutputDA inc bx

mov ax, 40 call Delay

loop ShowTriLoop pop cx ret endp

proc ShowSq near ; push cx

mov al, 80h call OutputDA mov cx, 10 D1:

延时控制 显示三角波 显示方波 mov ax, 200 call Delay loop D1

mov al, 0ffh call OutputDA mov cx, 10 D2:

mov ax, 200 call Delay loop D2 pop cx ret endp

start proc near mov ax, 0 mov ds, ax mov es, ax MLoop:

mov cx, 100 MD1:

call ShowSin loop MD1

mov cx, 100 MD2:

call ShowTri loop MD2

mov cx, 100 MD3:

call ShowSq loop MD3

jmp MLoop

start endp code ends

end start

效果图:

思考题:

1、如果要将其中的正弦波去掉,如何修改程序。 答:删除正弦数字量表sindata和正弦波输出调用的相关代码。 2、编写一个三角波。

答:

proc ShowTri near ;显示三角波 push cx

mov cx, 80h ShowTriLoop: mov cx,0ffh mov al,00h

r1: mov al, bl call OutputDA

inc al ; 上升沿 loop r1 mov cx,0ffh

r2:dec al ; 下降沿 mov al, bl call OutputDA

loop r2

jmp ShowTriLoop pop cx ret endp

__计算机__学院__2010级计算机科学与技术_专业__四___班___组、学号3110006015

姓名 张法光 协作者_________ 教师评定_________________ 实验题目 A/D(模/数)转换实验

一、 实验目的与要求

1、掌握A/D转换与微处理的借口方法。了解A/D芯片ADC0809转换性能及编程。 2、通过实验了解微处理如何进行数据采集。

二、 实验内容

利用实验板上的ADC0809做A/D转换器,实验板上的电位器提供模拟量输入,编制程序,将模拟量转换为二进制数字量,用8255的PA口输出到发光二极管显示。

A/D转换器大致有三类:一是双积分A/D转换器,有点事精度高,抗干扰性好;价格便宜,但熟读满;而是主次逼近A/D转换器,精度,熟读,价格适中;三十并行A/D转换器,速度快,价格也昂贵。实验用的ADC0809属第二类,记住次逼近A/D转换器是八位A/D转换器。

1、 实验电路

2、 实验连线

3、 实验原理

实验用的ADC0809逐次逼近A/D转换器是八位A/D转换器。每采集一次一般需要100us。本程序是用演示查询的方式读入A/D转换结果。也可以用中断方式读入结果,在中断方式下,A/D转换结束后会自动产生EOC信号,将其与CPU的外部中断相接。

4、实验程序框图

三、实验程序与注释

mode equ 082h ;8255工作字10000010 B ,方式0,A、C口输入,B输入 PA equ 09000h ;8255A口地址 CTL equ 09003h ;8255A控制地址 CS0809 equ 08000h ;AD转换器端口

code segment

assume cs:code

start proc near mov bx, 0f123h mov ax, 5678h mov [bx], ax mov ax, [bx]

mov ax, 1234h mov bx, 5678h add ax, bx mov bx, 400h mov [bx], ax

mov al, mode mov dx, CTL out dx, al again:

mov al, 0

mov dx, CS0809

out dx, al ; 起动 A/D

mov cx, 40h

loop $ ; 延时 > 100us

in al, dx ; 读入结果

mov dx, PA out dx, al

jmp again

code ends

end start

若以中断方式实现数据采集,将0809的EOC信号接到8259中断控制器的IN0中断源。并在中断服务程序里读取A/D转换值,如何编写程序。 答:START:

MOV DS,AX

MOV DI, OFFSET BUFF

MOV AL,0AH MOV AH,35H INT 21H PUSH PUSH PUSH

ES BX DS

;填写中断向量表(N=0AH)

;取IRQ0中断服务程序入口地址ES:BX ;保护ES,BX,DS

;

MOV AX,DATA

MOV AX,SEG ADINT MOV DS,AX

MOV DX,OFFSET ADINT MOV AL,0AH MOV AH,25H INT 21H POP DS IN AL,21H MOV BP,AX

;保护中断屏蔽寄存器内容于BP中

;恢复DS

AND AL,11111110B OUT 21H,AL MOV CX,300H MOV DX,203H MOV AL,36H OUT DX,AL MOV DX,200H MOV AL,10H OUT DX,AL MOV AL,00H OUT DX,AL

STI

;初值得0010H

;8253初始化,0通道方式3 ;允许IR0中断

CCC:

MOV DX,220H OUT DX,AL HLT CLI

;关中断

;取A/D转换结果 ;启动一次A/D转换

MOV AX,SI MOV AH,25H INT 21H MOV AX,BP OUT 21H,AL

;恢复中断屏蔽寄存器内容

WAIT_IN:

MOV AH,1

;程序暂停,等待键入

INT 21H

MOV SI,OFFSET BUFF CALL

CRTSET

EXIT:

MOV AX,4C00H INT 21H ADINT PROC PUSH PUSH MOV

AX DX

NEAR

;中断服务程序

;结束

;保护AX ;保护DX

;读A/D转换结果

DX,220H

IN AL,DX MOV SI,AX MOV AL,20H OUT 20H,AL POP DX POP AX IRET

;恢复

;发中断结束命令 ;送SI

ADINT ENDP CODE

ENDS

END START

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务