资源预览内容
第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
第9页 / 共13页
第10页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
实验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口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,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;保存输入的值 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 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 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: out 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 endsend start6-7 8255简单控制交通灯实验实验电路图程序流程图实验代码:stack segmentdb 256 dup(?)stackendsdatasegmentioportequ0ff00h-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段装填movds, 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,则跳转至pexit: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 endscodesegmentassume 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;交还控制权int 21hcode endsend start6-15 A/D转换实验实验代码:datasegmentioportequ0ff00h-0280hio0809aequioport+298hts1dba/d start., 0dh, 0ah, $ts2dba/d end., 0dh, 0ah, $bufdw300 dup
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号