实验6-68255并行接口(LED)实验实验说明8255工作于方式0,此时PA,PB,PC均为可独立输入输出的并行口。8255的各寄存器对应的端口地址为:PA口:288HPB口:289HPC口:28AH控制口:28BH8255的片选信号为CS连138译码器的288H-28FH。由于各PC速度不同,为到达较好的实验效果,可以适当调节LED亮灭的延迟时间。源代码:datasegmentioportequ0ff00h-0280hio8255aequioport+288h;PA口io8255bequioport+289h;PB口io8255cequioport+28ah;PC口io8255dequioport+28bh;控制口mess1db'左循环按1',0dh,0ah,'$';提示信息db'右循环按2',0dh,0ah,'$'db'间隔闪烁按3',0dh,0ah,'$'db'退出按4',0dh,0ah,'$'mess2db'按无效键继续选择',0dh,0ah,'$'mess3db'按任意键退回主菜单',0dh,0ah,'$'dataendsstacksegmentstadb20dup(?)topequlengthstastackendscodesegmentassumecs:code,ds:data,ss:stack,es:datastart:movax,data;data段装填movds,axmovax,stack;stack段装填movss,axmovsp,top;设置栈顶movsp,axmovdx,io8255dmoval,80h;命令字10000000b,表示特征位为1,A组为0方式,A端口出,outdx,al;PC4-PC7出,B组为0方式,B端口出,PC0-PC3出bg:leadx,mess1;显示提示信息mess1movah,09hint21hmovah,08h;输入字符,结果保存至alint21hpushax;保存输入的值leadx,mess3;显示提示信息mess3movah,09hint21hpopax;拿出保存的值movah,al;ah=alcmpal,'1';输入为1,跳转到zxhjzzxhmoval,ah;al=ahcmpal,'2';输入2,跳转到yxhjzyxhmoval,ah;al=ahcmpal,'3';输入3,跳转到jgsjzjgsmoval,ah;al=ahcmpal,'4';输入4,跳转到wxjnzwxjmtqitwx:leadx,mess2;显示提示信息mess2movah,09hint21hjmpbg;无条件跳转到bgzxh:movdx,io8255cmoval,0feh;al=11111110bbb:outdx,al;将al写入PC口movcx,0ffffh;用于延迟一定的时间l1:loopl1rolal,1;al循环左移一位pushax;保存axpushdx;保存dxmovdl,0ffh;直接控制台IO,输入,输入的值在al中movah,06hint21hjnzbg;flag的ZF标志位不为0跳转至bgpopdx;恢复dx,ax的值popaxjmpbb;跳转至bbyxhmovdx,io8255cmoval,0feh;al=11111110bee:outdx,al;将al写入PC口movcx,0fffh;用于延迟一定的时间l2:loopl2roral,1;al循环右移一位pushax;保存axpushdx;保存dxmovdl,0ffh;直接控制台IO,输入,输入的值在al中movah,06hint21hjnzbg;flag的ZF标志位不为0跳转至bgpopdx;恢复dx,ax的值popaxjmpee;无条件转移至eejgs:movdx,io8255cmoval,55h;al=01010101bhh:outdx,al;将al写入PC口movcx,0fffh;设置时延l3:loopl3notal;对al按位取反pushax;保存axpushdx;保存dxmovdl,0ffh;直接控制台IO,输入,输入的值在al中movah,06hint21hjnzbg1;flag的ZF标志位不为0跳转至bg1popdx;恢复dx,ax的值popaxjmphh;无条件转移至hhbg1:jmpbg;无条件转移至bgqit:movax,4c00h;交还控制权给DOSint21hcodeendsendstart6-78255简单控制交通灯实验实验电路图程序流程图实验代码:stacksegmentdb256dup(?)stackendsdatasegmentioportequ0ff00h-0280hio8255aequioport+288h;PA口io8255bequioport+289h;PB口io8255cequioport+28ah;PC口io8255dequioport+28bh;控制口portc1db24h,44h,04h,44h,04h,44h,04h;6个灯可能的db81h,82h,80h,82h,80h,82h,80h;状态数据db0ffh;结束标志dataendscodesegmentassumecs: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-1cmpcx,0jnzp;cx不等于0,则跳转至pexit:movah,4ch;交还控制权int21hrelayprocnearpushcx;保存cx的值movcx,3300hde1:movbx,0ffffhde0:decbxjnzde0loopde1popcx;恢复cx的值retrelayendpcodeendsendstart附加实验datasegmentioportequ0ff00h-0280hio8255aequioport+288h;PA口io8255bequioport+289h;PB口io8255cequioport+28ah;PC口io...