1、兰州大学接口及通讯实验报告实验6-6 8255并行接口(LED)实验实验说明8255工作于方式0,此时PA, PB, PC均为可独立输入输出的并行口。8255的各寄存器对应的端口地址为:PA口:288HPB口:289HPC口:28AH控制口:28BH8255的片选信号为CS连138译码器的288H-28FH。由于各PC速度不同,为到达较好的实验效果,可以适当调节LED亮灭的延迟时间。源代码:data segmentioport equ 0ff00h-0280hio8255a equ ioport+288h ;PA口io8255b equ ioport+289h ;PB口io8255c equ
2、ioport+28ah ;PC口io8255d equ ioport+28bh ;控制口mess1 db 左循环按1,0dh,0ah,$ ;提示信息 db 右循环按2,0dh,0ah,$ db 间隔闪烁按3,0dh,0ah,$ db 退出按4,0dh,0ah,$mess2 db 按无效键继续选择,0dh,0ah,$mess3 db 按任意键退回主菜单,0dh,0ah,$data endsstack segmentsta db 20 dup(?)top equ length stastack endscode segmentassume cs:code,ds:data,ss:stack,es:d
3、atastart: mov ax,data ;data段装填 mov ds,ax mov ax,stack ;stack段装填 mov ss,ax mov sp,top ;设置栈顶 mov sp,ax mov dx,io8255d mov al,80h ;命令字10000000b,表示特征位为1,A组为0方式,A端口出, out dx,al ;PC4-PC7出,B组为0方式,B端口出,PC0-PC3出bg: lea dx,mess1 ;显示提示信息mess1 mov ah,09h int 21h mov ah,08h ;输入字符,结果保存至al int 21h push ax ;保存输入的值
4、lea dx,mess3 ;显示提示信息mess3 mov ah,09h int 21h pop ax ;拿出保存的值 mov ah,al ;ah=al cmp al,1 ;输入为1,跳转到zxh jz zxh mov al,ah ;al=ah cmp al,2 ;输入2,跳转到yxh jz yxh mov al,ah ;al=ah cmp al,3 ;输入3,跳转到jgs jz jgs mov al,ah ;al=ah cmp al,4 ;输入4,跳转到wx jnz wx jmt qitwx: lea dx,mess2 ;显示提示信息mess2 mov ah,09h int 21h jmp
5、bg ;无条件跳转到bgzxh: mov dx,io8255c mov al,0feh ;al=11111110bbb: out dx,al ;将al写入PC口 mov cx,0ffffh ;用于延迟一定的时间l1: loop l1 rol al,1 ;al循环左移一位 push ax ;保存ax push dx ;保存dx mov dl,0ffh ;直接控制台IO,输入,输入的值在al中 mov ah,06h int 21h jnz bg ;flag的ZF标志位不为0跳转至bg pop dx ;恢复dx,ax的值 pop ax jmp bb ;跳转至bbyxh mov dx,io8255c
6、mov al,0feh ;al=11111110bee: out dx,al ;将al写入PC口 mov cx,0fffh ;用于延迟一定的时间l2: loop l2 ror al,1 ;al循环右移一位 push ax ;保存ax push dx ;保存dx mov dl,0ffh ;直接控制台IO,输入,输入的值在al中 mov ah,06h int 21h jnz bg ;flag的ZF标志位不为0跳转至bg pop dx ;恢复dx,ax的值 pop ax jmp ee ;无条件转移至eejgs: mov dx,io8255c mov al,55h ;al=01010101bhh: o
7、ut dx,al ;将al写入PC口 mov cx,0fffh ;设置时延l3: loop l3 not al ;对al按位取反 push ax ;保存ax push dx ;保存dx mov dl,0ffh ;直接控制台IO,输入,输入的值在al中 mov ah,06h int 21h jnz bg1 ;flag的ZF标志位不为0跳转至bg1 pop dx ;恢复dx,ax的值 pop ax jmp hh ;无条件转移至hh bg1: jmp bg ;无条件转移至bgqit: mov ax,4c00h ;交还控制权给DOS int 21hcode ends end start6-7 8255
8、简单控制交通灯实验实验电路图程序流程图实验代码:stack segment db 256 dup(?)stack ends data segmentioport equ 0ff00h-0280hio8255a equ ioport+288h ;PA口io8255b equ ioport+289h ;PB口io8255c equ ioport+28ah ;PC口io8255d equ ioport+28bh ;控制口portc1 db 24h, 44h, 04h, 44h, 04h, 44h, 04h ;6个灯可能的 db 81h, 82h, 80h, 82h, 80h, 82h, 80h ;状
9、态数据 db 0ffh ;结束标志data endscode segmentassume cs:code, ds:data, ss:stackstart: mov ax, data ;data段装填 mov ds, ax mov dx, io8255d mov al, 90h ;命令字10010000B out dx, al ;表示A组方式0,A端口入,B组方式0,B, C端口出 mov cx, 3 ;整个过程循环3次p: lea di, portc1re_on: mov al, di ;把portc1中数据逐个赋给al inc di ;di=di+1 cmp al, 0ffh ;如果读取到结
10、束标志,则跳转到s jz s mov dx, io8255con: out dx, al ;向C端口写入数据 call relay ;调用时延子程序 jmp re_on ;无条件跳转至re_on s: dec cx ;cx=cx-1 cmp cx, 0 jnz p ;cx不等于0,则跳转至pexit: mov ah, 4ch ;交还控制权 int 21h relay proc near push cx ;保存cx的值 mov cx, 3300hde1: mov bx, 0ffffhde0: dec bx jnz de0 loop de1 pop cx ;恢复cx的值 retrelay endp
11、code ends end start附加实验data segmentioport equ 0ff00h-0280hio8255a equ ioport+288h ;PA口io8255b equ ioport+289h ;PB口io8255c equ ioport+28ah ;PC口io8255d equ ioport+28bh ;控制口data endscode segmentassume cs:code, ds:datastart: mov ax, data ;data段装填 mov ds, ax mov ax, stack ;stack段装填 mov ss, ax mov dx, io8
12、255d mov al, 10010000b ;命令字A,B,C组方式0,A组入,B,C出 out dx, al wait1: mov dx, io8255a in al, dx ;从A口读入数据 mov dx, io8255c out dx, al ;将al中的数据写入C口 mov ah, 06h ;直接控制台IO mov dl, 0ffh ;输入 int 21h jmp wait1 ;跳转到wait1 mov ah, 4ch ;交还控制权 int 21h code ends end start6-15 A/D转换实验实验代码:data segment ioport equ 0ff00h-0
13、280h io0809a equ ioport+298h ts1 db a/d start., 0dh, 0ah, $ ts2 db a/d end., 0dh, 0ah, $ buf dw 300 dup(?)data endsstack segment sta dw 20 dup(?) top equ length stastack endscode segmentassume cs:code, ds:data, ss:stackstart: mov ax, data ;data段装填 mov ds, ax mov ax, stack ;stack段装填 mov ss, ax mov sp
14、, top ;设置栈顶指针 lea dx, ts1 mov ah, 9 int 21h ;显示提示信息 mov cx, 300conv: mov dx, io0809a mov al, 0 out dx, al ;为io0809a设置初值为0 call adint ;调用adint子程序 mov ax, si ;si中此时为读入数据,ax=si,al就是读入的一个字节 lea di, buf mov di, al ;将读入的数据送入buf缓冲区 and al, 0f0h ;将al与0f0h求与,并将结果重新赋给al push cx ;保存cx的值 mov cl, 4 shr al, cl ;逻
15、辑右移4位 pop cx ;恢复cx的值 add al, 30h ;al=al+30h cmp al, 39h jbe displ ;小于等于39h时跳转到displ add al, 07h ;al=al+07hdispl: mov dl, al ;dl=al mov ah, 2 ;显示输出,要输出的值为dl中的值 int 21h mov al, di ;取出buf中的值,赋给al inc di and al, 0fh ;al的值与0fh按位求与 add al, 30h ;al=al+30h cmp al, 39h jbe disph ;小于等于39h跳转到disph add al, 07h
16、;大于39h时,al=al+07hdisph: mov dl, al ;dl=al mov ah, 2 ;显示dl中的值 int 21h mov dl, 20h mov ah, 2 int 21h int 21h ;显示两个空格 loop conv ;循环至conv lea dx, ts2 mov ah, 9 ;显示结束信息 int 21h adint proc near push ax push bx push cx mov cx, 0ffffh ;设置时延delay: mov bx, 2fhdelay1: dec bx cmp bx, 0 jnz delay1 loop delay mov
17、 dx, io0809a in al, dx ;从io0809a读入一个字节赋给al mov si, ax ;si=ax,用si把读入的数据返回出去 pop cx pop bx pop ax ret adint endpcode ends end start实验数据:电压/V00.51.01.52.02.53.03.54.04.55.0输出(十六进制)01AH35H4FH69H83H9DHB8HD2HEDHFFH输出(十进制)0265379105131157184210237255散点图:误差分析:利用作图分析A/D转换的线性度,其中为转换后的数字量,为输入的模拟量,是个无穷小量可以忽略。,是待求的量,可以用最小二乘法求得近似值。公示如下:计算过程结果如下:Sxx=27.5Sxy=1426a =1.01b =51.85直线方程为:Y=51.85x+1.01
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2