一、复习8255及端口的寻址方式实验18255键盘扫描与LED数码管显示实验8255功能特性三个独立的8位并行输入/输出端口,各端口均具有数据输入、输出能力;三种工作方式:0基本、1选通、2双向;可通过编程设置各端口的工作方式和数据传送方向(入/出/双向)。1.数导线(21根),检查实验箱是否正常2.下次实验时间是第**周注意:1.8255相关知识图9.98255编程结构8255的内部结构数据总线缓冲器读/写控制部件A组控制部件B组控制部件A组端口A(8)A组端口C上半部(4)B组端口C上半部(4)B组端口B(8)双向数据总线D7~D0RDWRA1A0RESETCS8位内部数据总线I/OPA7~PA0I/OPC7~PC4I/OPC3~PC0I/OPB7~PB0C下半部PAPBPC8255外部引脚连接系统端的引线:D0~D7RESETA0A1CSRDWRCS:片选RD:读控制WR:写控制RESET:复位A1,A0:端口选择A1A0选择00端口A01端口B10端口C11控制寄存器D0~D7:数据线分别对应PA、PB、PC三个8位输入/输出端口D0~D7RESETA0A1CSRDWRPAPBPC三个端口可通过编程分别指定为输入或输出口。连接外设端的引线:PA0~PA7PB0~PB7PC0~PC78255外部引脚8255的初始化8255工作前必须初始化,初始化时需设置:工作方式数据传送方向PC口各数据线的状态(必要时)通过向8255的控制口写入控制字实现:方式控制字*用于控制8255各端口的工作方式和数据传输方向位控字控制PC端口在方式0(输出)时每一根输出线的状态方式0:基本输入/输出方式方式1:选通方式方式2:双向方式(仅A口)输入输出置0(低电平)置1(高电平)1D0D1D2D3D4D5D6方式控制字标志位1:端口C(PC3~PC0)输入0:端口C(PC3~PC0)输出1:端口B输入0:端口B输出1:端口B方式10:端口B方式01:端口C(PC7~PC4)输入0:端口C(PC7~PC4)输出1:端口A输入0:端口A输出00:端口A方式001:端口A方式11X:端口A方式28255工作方式控制字格式对20H端口的访问格式:直接寻址INAL,20H;从地址为20H的端口输入一个字节到ALOUT20H,AL;将AL的内容输出到地址为20H的端口对200H端口的访问格式:间接寻址MOVDX,200H;将端口地址送DX寄存器INAL,DX;从地址为200H的端口输入一个字节到ALOUTDX,AL;将AL的内容输出到地址为200H的端口2.端口寻址方式编程1:把8255工作方式设定为:A口指定为方式0,输入,C口为输出;B口指定为方式0,输出;设8255控制字寄存器端口地址为04a6H。分析:根据题目得工作方式命令代码是10010000B或90H。初始化程序段为:movdx,04a6h;控制寄存器地址movax,90h;设置为A口输入,;B口输出,C输出outdx,ax;8255初始化共阴极:公共端接低电平“L”发光段接高电平“H”共阳极:公共端接高电平“H”发光段接低电平“L”Abcdefg分类:h—小数点*3.LED数码管abcdefg+5V共阴极的情况下定义字形码:FECDBA9876543210二、键盘工作原理及键的识别方式键盘的结构1.键盘的工作原理PC0PC1PC22.键的识别——行扫描123掌握8255的编程原理及使用方法三、实验目的用8255扩展扫描3X8行列式键盘,由一位LED数码管显示。1、设计出8255与8086接口对应硬件电路,并完成相应的连接;2、调试对应8255、键盘、及数码管硬件接口电路及相应接口软件3、当用键盘输入时在数码管上显示相应值;4、完成习题的内容。四、实验内容五、实验设备MUT—Ⅲ型实验箱、8086CPU模块。六、8255与8086及8255与键盘的电路连接DB地址译码器D0~D7WRRDA1A0CS8255PAPBPCIOWIORA2A1D0~D7A15~A19系统总线RL10~RL17(列选择线)LED-A~LED-DP(段控)KA10~KA12(行选择线)LED1(位控)电源电路复位键3*8键盘8255并行接口CPU板座LED数码管显示屏RL10~RL17LED1~LED6LED-A~LED-DPKA10~KA12跳线冒七、实验步骤1、实验接线CS0CS8255(地址为04A0H);PA0~PA7(输入)RL10~RL17(列选择线);PB0~PB7(输出)发光二极管LED-A~LED-DP;PC0~PC2(输出)KA10~KA12(行选择线)PC3(输出)LED12、编程并全速或单步运行。3、全速运行时按动键盘,观察数码管的变化。4、编写实验报告。本实验中8255的地址分配如下:端口A04A0H端口B04A2H端口C04A4H控制口04A6H八、实验程序流程图采用行扫描法检测九、编写实验报告包括实验预习内容,实验目的,实验内容,实验步骤和正确的程序代码。注意:1、编程前先在E盘目录下建一个文件夹,并取一个英名名字,即名字中不能有汉字和数字。编完程序将其存于该目录下。3、做完实验将实验箱右上角的CPU板卸下,再关实验箱。2、做实验之前先取下跳线冒。十、实验程序assumecs:codecodesegmentorg100hstart:movdx,04a6h;控制寄存器地址movax,90h;设置为A口输入,;B口输出,C输出outdx,ax;8255初始化check0:;check0检测是否有健被按下movax,00h;C口的PC0、PC1、PC2作为行选择线movdx,04a4h;C口地址outdx,ax;写入C口内容00H,即令所有行为低电平movdx,04a0h;A口地址inax,dx;读入A口的内容cmpal,0ffh;判定是否有列线为低电平jecheck0;没有,无闭合键,则循环等待movcx,05ffh;延迟常数,可以修改来改变延时时间delay:loopdelay;有,则延迟清除抖动,当cx=0时则停止该循环本实验中8255的地址分配如下:端口A04A0H端口B04A2H端口C04A4H控制口04A6H;行扫描键盘和列扫描键盘,确定被按键的行值和列值movcl,3;行数movah,0moval,0fbh;0fbh=11111011Bcontin:pushax;将ax的内容(0fbh)入栈保存movdx,04a4h;C口地址outdx,al;写入C口内容0fbh=11111011B,即将第三行置为低电平movdx,04a0h;A口地址inal,dx;读入A口的内容movah,al;将A口的内容送入ahcmpah,0ffh;判断是否有列线为低电平jnenext;比较结果不等于0则转移,即有列线为低电平popax;比较结果等于0,即没有列线为低电平,(ax)=00fbhroral,1;fbh(11111011B)循环右移,(al)=11111101检测下一行loopcontin;循环扫描下一行,确定行jmpcheck0;若所有行都没有被按下,则返回check0重新检测next:movch,cl;保存行值至chmovcl,7;列值从0开始编号0-7begin0:shlah,1;ah为A口的内容,逻辑左移1位,末位补0jncgoon;无进位则转移,即可确定列loopbegin0;继续循环,确定列jmpcheck0goon:;计算显示码在discode中的位置:(行数-1)*8+列值movbl,cl;保存列值至BLdecch;行数减1movcl,3shlch,cl;左移三位即相当于减1之后的行数*8addbl,ch;确定显示码在discode表中的偏移量,即(行数-1)*8+列值movbh,0movcx,bx;显示码在discode表中的偏移量送CXdisplay:;显示输出movsi,offsetdiscodeaddsi,cx;显示码偏移地址movdx,04a4h;C口地址moval,0fhoutdx,al;写入C口内容,使位控(LED1)有效moval,[si];取被按键的显示字形码送入almovdx,04a2h;B口地址outdx,al;将显示字形码送B口输出显示nopnopjmpcheck0discodedb3fh,06h,5bh,4fh,66h,6dh,7dh,07h;(0-7)db7fh,6fh,77h,7ch,39h,5eh,79h,71h;(8-F)db01h,02h,04h,08h,10h,20h,40h,80h;(abcdefgh);显示字形码表codeendsendstart