《兰州大学接口与通讯实验报告.docx》由会员分享,可在线阅读,更多相关《兰州大学接口与通讯实验报告.docx(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
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 ioport+28ah;PC口
2、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:datastart: mov ax,da
3、ta;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;保存输入的值 lea dx,mess3;显示提示信息mess3 mo
4、v 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 bg;无条件跳转到bgzxh: mov dx,io8255c mov al,
5、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 mov al,0feh;al=11111110bee: out dx,al;将al写入PC口 mo
6、v 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: out dx,al;将al写入PC口 mov cx,0fffh;设置时延l3: loop l3 not al;对al按位取
7、反 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 endsend start6-7 8255简单控制交通灯实验实验电路图程序流程图实验代码:stack segmentdb 256 dup()stackendsdatasegmentio
8、portequ0ff00h-0280hio8255aequioport+288h;PA口io8255bequioport+289h;PB口io8255cequioport+28ah;PC口io8255dequioport+28bh;控制口portc1db24h, 44h, 04h, 44h, 04h, 44h, 04h;6个灯可能的db 81h, 82h, 80h, 82h, 80h, 82h, 80h;状态数据db0ffh;结束标志data endscodesegmentassume cs:code, ds:data, ss:stackstart:movax, data;data段装填mov
9、ds, axmovdx, io8255dmoval, 90h;命令字10010000Boutdx, al;表示A组方式0,A端口入,B组方式0,B, C端口出movcx, 3;整个过程循环3次p:leadi, portc1re_on:moval, di;把portc1中数据逐个赋给alincdi;di=di+1cmpal, 0ffh;如果读取到结束标志,则跳转到sjzsmovdx, io8255con:outdx, al;向C端口写入数据callrelay;调用时延子程序jmpre_on;无条件跳转至re_ons:deccx;cx=cx-1cmp cx, 0jnzp;cx不等于0,则跳转至pe
10、xit:movah, 4ch;交还控制权int 21hrelay proc nearpush cx;保存cx的值movcx, 3300hde1:mov bx, 0ffffhde0:decbxjnzde0loopde1popcx;恢复cx的值retrelay endpcode endsend start附加实验datasegmentioportequ0ff00h-0280hio8255aequioport+288h;PA口io8255bequioport+289h;PB口io8255cequioport+28ah;PC口io8255dequioport+28bh;控制口data endscode
11、segmentassume cs:code, ds:datastart:movax, data;data段装填movds, axmovax, stack;stack段装填movss, axmovdx, io8255dmoval, 10010000b;命令字A,B,C组方式0,A组入,B,C出outdx, alwait1:movdx, io8255ainal, dx;从A口读入数据movdx, io8255coutdx, al;将al中的数据写入C口movah, 06h;直接控制台IOmovdl, 0ffh;输入int 21hjmpwait1;跳转到wait1movah, 4ch;交还控制权in
12、t 21hcode endsend start6-15 A/D转换实验实验代码:datasegmentioportequ0ff00h-0280hio0809aequioport+298hts1dba/d start., 0dh, 0ah, $ts2dba/d end., 0dh, 0ah, $bufdw300 dup()dataendsstacksegmentstadw20 dup()topequlength stastackendscodesegmentassumecs:code, ds:data, ss:stackstart:movax, data;data段装填movds, axmova
13、x, stack;stack段装填movss, axmovsp, top;设置栈顶指针leadx, ts1movah, 9int21h;显示提示信息movcx, 300conv:movdx, io0809amoval, 0out dx, al;为io0809a设置初值为0calladint;调用adint子程序movax, si;si中此时为读入数据,ax=si,al就是读入的一个字节leadi, bufmovdi, al;将读入的数据送入buf缓冲区andal, 0f0h;将al与0f0h求与,并将结果重新赋给alpushcx;保存cx的值movcl, 4shral, cl;逻辑右移4位po
14、p cx;恢复cx的值addal, 30h;al=al+30hcmpal, 39hjbedispl;小于等于39h时跳转到displadd al, 07h;al=al+07hdispl:movdl, al;dl=almovah, 2;显示输出,要输出的值为dl中的值int21hmoval, di;取出buf中的值,赋给alincdiandal, 0fh;al的值与0fh按位求与addal, 30h;al=al+30hcmpal, 39hjbedisph;小于等于39h跳转到disphaddal, 07h;大于39h时,al=al+07hdisph:movdl, al;dl=almovah, 2
15、;显示dl中的值int 21hmovdl, 20hmovah, 2int 21hint21h;显示两个空格loopconv;循环至convleadx, ts2movah, 9;显示结束信息int21hadintproc nearpushaxpushbxpushcxmovcx, 0ffffh;设置时延delay:movbx, 2fhdelay1: decbxcmpbx, 0jnzdelay1loopdelaymovdx, io0809ainal, dx;从io0809a读入一个字节赋给almovsi, ax;si=ax,用si把读入的数据返回出去popcxpopbxpopaxretadintendpcodeendsendstart实验数据:电压/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
限制150内