文档视界 最新最全的文档下载
当前位置:文档视界 › 汇编语言与微机接口技术实验四

汇编语言与微机接口技术实验四

实验报告

课程名称汇编语言与微机接口技术

实验项目

实验仪器 PC微机、CZ-CIU实验箱

学院__ _ _计算机学院_ _ _

专业计算机科学与技术

班级/学号 *

学生姓名___ _ _ *________

实验日期 2018/12/3

成绩

指导教师 *

指导书中实验16

一、实验目的

1、了解串行通讯的基本原理。

2、掌握串行接口芯片8251的工作原理和编程方法。

二、实验原理、内容描述和硬件连接

1、按图4-16-1连接好电路,(8251插通用插座)其中8254计数器用于产生8251的发送和接收时钟,TXD和RXD连在一起。

2、编程: 从键盘输入一个字符,将其ASCII码加 1 后发送出去,再接收回来在屏幕上显示,实现自发自收。

3、接线: CLK0 /8254 接 1M时钟

GATE0 /8254 接 +5V

0UT0 /8254 接 TX/RXCLK /8251

CS /8254 接 Y0 /IO地址

CS /8251 接 Y7 /IO地址

RXD /8251 接 TXD /8251

三、程序流程图

四、代码、和关键注释

;E8251.ASM

data segment

io8254a equ 280h

io8254b equ 283h

io8251a equ 2b8h

io8251b equ 2b9h

mes1 db 'you can play a key on the keybord!',0dh,0ah,24h

mes2 dd mes1

data ends

code segment

assume cs:code,ds:data

start:

mov ax,data

mov ds,ax

mov dx,io8254b ;设置8254计数器0工作方式

mov al,16h ;00010110B,通道0,只读低字节,方式3方波发生器,

二进制计数

out dx,al

mov dx,io8254a

mov al,52 ;计数初值,给8254计数器0送初值

out dx,al

mov dx,io8251b ;初始化8251

xor al,al ;和自己异或,即清0

mov cx,03 ;设置循环次数为3,即向8251控制端口送三次0

delay: call out1

loop delay ;loop循环减一

mov al,40h ;向8251控制端口送40H,使其复位

call out1

mov al,4eh;01001110B,方式字,设置为1个停止位,8个数据位,波特率因子为16

call out1

mov al,27h;00100111B,命令字,向8251送命令字允许其发送和接收

call out1

lds dx,mes2 ;显示提示信息

mov ah,09

int 21h

waiti: mov dx,io8251b

in al,dx

test al,01 ;检测TxRDY是否为1,发送是否准备好

jz waiti

mov ah,01 ;是,从键盘上读入一个字符

int 21h

cmp al,27 ;若为ESC,结束

jz exit

mov dx,io8251a ;数据口

inc al ;ASC码加1

out dx,al ;发送

mov cx,40h

s51: loop s51 ;延时

next: mov dx,io8251b

in al,dx

test al,02;检测RxRDY是否为1,检查接收是否准备好

jz next

mov dx,io8251a

in al,dx ;准备好,接收

mov dl,al

mov ah,02 ;将接收到的字符显示在屏幕上

int 21h

jmp waiti

exit: mov ah,4ch ;退出

int 21h

out1 proc near ;向外发送一字节的子程序

out dx,al

push cx ;因为使用到了CX,压栈再出栈来保护主程序中的CX

mov cx,40h

gg: loop gg ;延时

pop cx

ret

out1 endp

code ends

end start

五、按老师要求如何改变程序功能或改进程序?

无其他要求,主要是读懂和记住程序。

六、解答实验课上老师的提问?

1.问:计数器的初值52是怎么来的?

回答:首先波特率选1200 波特率因子选16 时钟频率是1MHZ 那么用1MHZ/(1200*16)≈52 所以计数器的初值是52。

2.问:有没有可能数据口和控制口反过来?

回答:不可能,数据口一个是奇地址,一个是偶地址,连续的地址,所以不可以调换,一个是2b8h,一个是2b9h,不能反过来。

七、实验收获与总结

通过这次微机操作原理实践实验,使得我对汇编语言编程产生了浓厚的兴趣,并在实验的过程中掌握了各种功能语句的运用,并熟知了8254和8251的构造,工作方式等相关知识,了解了串行通讯的基本原理,掌握了串行接口芯片8251的工作原理和编程方法,能够熟悉地对8251的输入输出端口进行初始化,对程序中的循环语句,循环体能够更加透彻地运用,明白了对功能号的灵活运用会使得编程更加便捷与灵活,为之后的学习生活奠定了深厚的基础。

指导书中实验17

一、实验目的

了解数/模转换器的基本原理,掌握DAC0832芯片的使用方法。

二、实验原理、内容描述和硬件连接

1、实验电路原理如图4-17-1,DAC0832采用单缓冲方式,具有单双极性输出端(图中的Ua、Ub),利用debug输出命令(Out 290 数据)输出数据给DAC0832,用万用表测量单极性输出端Ua及双极性输出端Ub的电压,验证数字与电压之间的线性关系。

2、编程产生以下波形(从Ub输出,用示波器观察)

(1)锯齿波

(2)正弦波

3、接线: CS /0832 接 Y2 /IO地址

三、程序流程图

第一题:第二题:

修改要求后的流程图:(三角波)

四、代码、和关键注释

第一题:

;DA_1.ASM

io0832a equ 290h

code segment

assume cs:code

start:

mov cl,0

mov dx,io0832a

lll: mov al,cl

out dx,al

inc cl ;cl加1

inc cl

inc cl

inc cl

inc cl

inc cl

inc cl

push dx

mov ah,06h ;判断是否有键按下

mov dl,0ffh

int 21h

pop dx

jz lll ;若无则转lll

mov ah,4ch ;返回

int 21h

code ends

end start

第二题:

;DA_2.ASM

data segment

io0832a equ 290h

sin db 80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdh

db 0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96h

db 80h,66h,4eh,38h,25h,15h,09h,04h

db 00h,04h,09h,15h,25h,38h,4eh,66h ;正弦波数据

data ends

code segment

assume cs:code ,ds:data

start:

mov ax,data

mov ds,ax

ll: mov si,offset sin ; 置正弦波数据的偏移地址为si mov bh,32

lll: mov al,[si] ;将数据输出到D/A转换器mov dx,io0832a

out dx,al

mov ah,06h

mov dl,0ffh

jne exit

mov cx,1

delay: loop delay ;延时

inc si ;取下一个数据

dec bh

jnz lll ;若未取完32个数据则转lll

jmp ll

exit: mov ah,4ch ;退出

int 21h

code ends

end start

五、按老师要求如何改变程序功能或改进程序?

如何将锯齿波改成三角波?

答:设计思想:设置上限和下限,并增加判断:是否超过上限和下限?如果超过上限则dec,若超过下限则inc,否则继续。修改代码如下:

;DA_1.ASM

io0832a equ 290h

code segment

assume cs:code

start:

mov cl,1ah ;下限值

mov dx,io0832a

lll: mov al,cl

out dx,al

inc cl ;cl加1

cmp cl,0e1h ;超过上限了吗?

jnz lll ;没有继续转换

dec cl ;超过了,数值减量

ll: mov al,cl

out dx,al

dec cl ;cl减1

cmp al,19h ;低于下限了吗?

jnz ll ;没有

jmp start ;转下一个周期

push dx

mov ah,06h ;判断是否有键按下

mov dl,0ffh

int 21h

pop dx

jz lll ;若无则转lll

mov ah,4ch ;返回

code ends

end start

六、解答实验课上老师的提问?

1.问:如何将锯齿波改成三角波?

回答:在程序代码中设置上限和下限,然后在程序中增加判断语句:检测是否超过了上限或者低于下限。如果超过上限则用自减一dec功能向下减,低于下限则继续执行自加一inc功能往回加。

七、实验收获与总结

通过这次微机操作原理实践实验,使得我对汇编语言编程产生了浓厚的兴趣,并了解了数/模转换器的基本原理,掌握了DAC0832芯片的使用方法。而且在实验的过程中掌握了各种功能语句的运用,而且通过示波器清晰明了地观察到了实验的变化,对程序中的循环语句,循环体能够更加透彻地运用,明白了对功能号的灵活运用会使得编程更加便捷与灵活,为之后的学习生活奠定了深厚的基础。

指导书中实验18

一、实验目的

了解模/数转换的基本原理,掌握ADC0809的使用方法。

二、实验原理、内容描述和硬件连接

1、实验电路原理图如图4-18-1。通过实验台左下角电位器RW1输出0~5V直流电压送入ADC0809通道0(IN0),利用debug的输出命令启动A/D转换器,输入命令读取转换结果,验证输入电压与转换后数字的关系。

启动IN0开始转换: O 0298 0

读取转换结果: I 0298

2、编程采集IN0输入的电压,在屏幕上显示出转换后的数据(用16进制数)。

3、给IN1输入一个低频变化信号(幅度为0-5V),编程采集这个信号数据并在屏幕上显示波形。

4、接线: CS /0809 接 Y3 /IO地址

IN0 /0809 接 0~5V /直流信号

三、程序流程图

第一题:

第二题:

四、代码、和关键注释

第一题:

;AD_1.ASM

code segment

assume cs:code

start:

mov dx,io0809a ;启动A/D转换器

out dx,al

mov cx,0ffh ;延时

delay: loop delay

in al,dx ;从A/D转换器输入数据

mov bl,al ;将AL保存到BL

mov cl,4

shr al,cl ;将al右移4位

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 ;显示子程序

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

第二题:

;AD_2.ASM

code segment

assume cs:code

start:

mov ax,0012h ;设屏幕显示方式为VGA 640x480模式

int 10h

start1: mov ax,0600h

int 10h ;清屏

and cx,0 ;cx为横坐标

draw: mov dx,io0809b ;启动A/D转换器通道1

out dx,al

mov bx,200 ;延时

delay: dec bx

jnz delay

in al,dx ;读入数据

mov ah,0

mov dx,368 ;dx为纵坐标

sub dx,ax

mov al,0ah ;设置颜色

mov ah,0ch ;画点

int 10h

cmp cx,639 ;一行是否满

jz start1 ;是则转start

inc cx ;继续画点

push dx

mov ah,06h ;是否有按键按下

mov dl,0ffh

int 21h

pop dx

je draw ;无,则继续画点

mov ax,0003 ;有恢复屏幕为字符方式

int 10h

mov ah,4ch ;退出

int 21h

code ends

end start

五、按老师要求如何改变程序功能或改进程序?

改进要求:原先屏幕上显示出ASCII码值不断循环,试将程序改成仅显示一次,避免无限循环。

设计思路:将上一次显示出来的值存在另一个寄存器,每次循环用cmp指令与之判断,若该寄存器值相等,则不调用显示子程序,反之调用显示子程序显示其

ASCII码值。

六、解答实验课上老师的提问?

问题:怎么让电压得出的数值在表格上仅仅显示一次?

回答:增加判断条件,就像之前的实验一样,增加CMP比较指令,如果比较相等就不再输出,如果不相等,就证明电压发生了变化,就显示出。

七、实验收获与总结

通过这次微机操作原理实践实验,使得我对汇编语言编程产生了浓厚的兴趣,并了解了模/数转换的基本原理,掌握了ADC0809的使用方法。而且在实验的过程中掌握了各种功能语句的运用,而且清晰明了地观察到了实验的变化,对程序中的循环语句,循环体能够更加透彻地运用,明白了对功能号的灵活运用会使得编程更加便捷与灵活,为之后的学习生活奠定了深厚的基础。

相关文档
相关文档 最新文档