1、微机原理硬件实险I/O地址铎码&简单畀行接口班级 姓名 学号一实验目的实验一:掌握I/O地址译码电路的工作原理。实验二:掌握简单并行接口的工作原理及使用方法。二、实验原理和内容实验一:1、实验电路如图4-1-1所示,其中74LS74为D触发器,可直接使用实验台上数 字电路实验区的D触发器,74LS138为地址译码器。译码输出端Y0Y7在实验台 上“I/O地址“输出端引出,每个输出端包含8个地址,YO:280H-287H,Y1:288H-28FH,当CPU执行I/O指令且地址在280H2BFH范围内,译码器选 中,必有一根译码线输出负脉冲。例如:执行下面两条指令MOV DX,2A0HOUT DX
2、,AL(或 IN AL,DX)Y4输出一个负脉冲,执行下面两条指令MOV DX,2A8HOUT DX,AL(或 IN AL,DX)Y5输出一个负脉冲。图 41-1利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、),时间间隔通过软件 延时实现。2、接线:Y4/I0地址 接CLK/D触发器Y5/I0地址 接CD/D触发器D/D触发器接SD/D角发器接+5VQ/D触发器接L7(LED灯)或逻辑笔实验二:1、按下面图4-2-1简单并行输出接口电路图连接线路(74LS273插通用插座,74LS32用实验台上的“或门”)。74LS273为八D触发器,8个D输入端分别接数据总线D0-D7,8个Q输出端按LE
3、D显示电路L0L7。2、编程从键盘输入一个字符或数字,将其ASCH码通过这个输出接口输出,根 据8个发光二极管发光情况验证正确性。图 4-2-1了II I 74LS273 o01234567DDDDDDDDCLK 0C L R 9土-一01234567LLLLLLLL2A8H-i i ToU3、接线:按图4-2T接线(图中虚线为实验所需接线,74LS32为实验台逻辑或门)三硬件接线图及软件程序流程图1硬件接线图实验一:实验二:不7 4 L S 2 7 32569T-s1234S678QQQQQQQQ 0言 J J A K R12345678L LDDDDDDDDC c01234567DDDDD
4、DDDIOW2A8H 01234567LLLLLLLL2软件程序流程图实验一:四源程序实验一:DATA SEGMENTDATA ENDSSTACK SEGMENT STACK STACK DB 100H DUP(?)STACK ENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK;延时子程序DELAY1PROCNEARMOVBX,500HPUSHCXL00P2:MOVCX,OFFFHWAIT1:LOOPWAIT1DECBXJNZL00P2POPCXDELAY1RETENDP;L7闪烁START:MOVCX,OFFFFHLOOP1:MOVDX,2A0H;灯亮
5、OUTDX,ALCALLDELAY1MOVDX,2A8H;灯灭OUTDX,ALCALLDELAY1LOOPL00P1;循环闪烁CODEENDSEND START实验二:DATASEGMEN1rDATAENDSSTACKSEGMEN1r STACK STACKDB 100 DUP(?)STACKENDSCODESEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOVAH,1;键盘输入INT21HCMPAL,27;判断是否为ESC键JZEXITMOVDX,2A8HOUTDX,AL;输出JMPSTART;返回DOSEXIT:MOVDX,2A8HMOVAL,0OU
6、TDX,AL;所有灯灭MOVAX,4C00HINT21HCODEENDSENDSTART五实验结果实验一:L7闪烁实验二:从键盘输入字符或数字,若不是Esc键,则二极管显示其ASCII 码情况,若按下ESC,则返回dos,且各LED灯灭。六:实验总结1主要问题是对题目中所给的硬件接线图不是很理解,如第二个实验中或门 的作用。向老师请教后明白了硬件接线图的原理,做实验就容易许多。2在第一个实验中起先对AL进行了赋值,后来发现是没必要的,不对AL赋 值对产生负脉冲无影响,后来删掉了相应的赋值语句,精简了代码。七实验收获与心得体会这是第一次接触微原硬件实验,实验板比小学期单片机实验更丰富,但也会 导
7、致刚开始的时候不知道该把线接在哪。在明白了硬件接法,将自己的代码反映 在硬件上时,觉得非常有趣。之前一直以为微原实验不如C+等高级语言编程有 趣,现在看来丝毫不逊色。且通过自己动手实验,使我对理论课所学知识有了更 好的理解。期待通过这几次微原实验能让我收获更多知识。微机原理硬件卖脸可编程并行接口 255&七段熬鸡管&桂盘显示按喇实验班级 姓名 学号一实验目的实验三:通过实验,掌握8255工作于方式。以及设置A 口为输出口,C 口为输 入口的方法。实验四:掌握数码管显示数字的原理。实验五:掌握8255控制键盘及显示电路的基本功能及编程方法。掌握一般键盘 和显示电路的工作原理。二实验原理和内容实验
8、三:1、实验电路见硬件连接图,8255c 口接逻辑电平开关K0K7,A 口接LED显示电 路L0L7。2、编程从8255c口输入数据,再从A口输出。实验四:静态显示:按下图连接好电路,将8255的A 口 PAOPA7分别与七段数码管的段码 驱动输入端adp相连,位码驱动输入端SO、SI、S2、S3接PCO、PCK PC2、PC3,编程在数码管显示自己的学号的后四位。实验五:编程:使得在小键盘上每按一个健,4位数码管上显示出相应字符。三硬件接线图及软件程序流程图1硬件接线图实验三:KO K2 K4 K6288H PCOPAOPC1PA1PC2PA2PC3PA3PC4PA4PC5PA5PC6PA6
9、PC7PA7CS LO LI L2 L3 L4 L5L6L7U18 8255实验四:du0科PA 口8255CS4-288H-28FHY12软件程序流程图实验三:(引用讲义上已给出的图)实验四:(引用讲义上已给出的图)实验五:是否四源程序实验三DATA SEGMENTDATA ENDSSTACK SEGMENT STACK STACKDB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV DX,28BH;8255 初始化,10001001,C 口输入,A 口输
10、出MOV AL,89HOUT DX,AL故退出LOOP1:MOVDX,28AH;C 口输入IN AL,DXMOVDX,288H;A 口输出OUTDX,ALMOVAH,01HINT16HJNZEXIT;ZF=O说明有按键输入,JMPL00P1EXIT:MOV AX,4C00HINT21HCODEENDSENDSTART实验四DATA SEGMENTDATA ENDSSTACK SEGMENT STACK STACKDB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOVMOV DSMOVMOV OUTA
11、X,DATA,AXDX,28BHAL,80HDX,AL;8255控制寄存器端口地址28BH;工作方式为0;初始化8255DIGITAL:MOVDX,28AH;熄灭数码管MOVAL,OOHOUTDX,ALMOVDX,288H;A 口显示5MOVAL,6DHOUTDX,ALMOVDX,28AH;C 口 00000001(位码)MOVAL,01HOUTDX,ALEXIT:MOVDX,28AH;熄灭数码管MOVAL,OOHOUTDX,ALMOVDX,288H;A 口显示2MOVAL,5BHOUTDX,ALMOVDX,28AH;C 口 OOOOOO1O(位码)MOVAL,02HOUTDX,ALMOVDX
12、,28AH;熄灭数码管MOVAL,OOHOUTDX,ALMOVDX,288H;A 口显示6MOVAL,7DHOUTDX,ALMOVDX,28AHMOVAL,04H;C 口 00000100(位码)OUTDX,ALMOVDX,28AH;熄灭数码管MOVAL,OOHOUTDX,ALMOVDX,288H;A 口显示0MOVAL,3FHOUTDX,ALMOVDX,28AHMOVAL,08H;C 口 00001000(位码)OUTDX,ALMOVDX,28AH;熄灭数码管MOVAL,OOHOUTDX,ALMOVAH,O1HINT16HJNZEXIT;ZF=O说明有按键输入,故退出JMPDIGITALMO
13、V AX,4COOHINT21HCODE ENDSENDSTART实验五DATA SEGMENTTABLE DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H;数码管显示 0123456789ABCDEFNUM DB 70H,OBOH,ODOH,OEOH;用 于 扫 描 键 盘 70H=01110000,0B0H=10110000,0D0H=11010000,OEOH=11100000 DATA ENDSSTACK SEGMENT STACK STACKDB 100 DUP(?)STACK ENDSCODE SEG
14、MENTASSUME CS:CODE,DS:DATA,SS:STACK;延时子程序DELAYPROCNEARPUSHCXMOVCX,100HWAIT1:LOOPWAIT1POPCXRETDELAYENDP;获取键盘的输入数字的子程序,通过BX寄存器传递KEYPROCNEARPUSHAX;保护现场PUSHCXPUSHDXMOVCX,OOH;从第一行开始扫描CHECK:MOVDX,28AH;C 口地址给 DXMOVBX,OFFSET NUMADDBX,CXMOVAL,BXOUTDX,AL;防抖INAL,DX;判断是否有键盘按下MOVAH,ALCALLDELAYINAL,DXCMPAL,AHJNZC
15、HECK;不相等说明为抖动,重新检测;判断按下的列ANDAL,OFHCMPAL,OFHJZNEXTCMPAL,OEHJZNEXT1CMPAL,ODHJZNEXT2CMPAL,OBHJZNEXT3MOVBX,OOHJMPGOTNEXT:INCCX;修改变量扫描下一行CMPCX,04HJNZJUMP1MOVCX,OOHJUMP1:JMPCHECKNEXT1:MOVBX,03HJMPGOTNEXT2:MOVBX,02HJMPGOTNEXT3:MOVBX,O1H;计算按下键盘的数值GOT:MOVAL,CLMOVDL,04HMULDLADDBL,AL;此时BX中所存即为对应的偏移量POPDX;恢复现场P
16、OPCXPOPAXRETKEYENDP;主程序START:MOVAX,DATAMOVDS,AXMOVDX,28BH;8255初始化MOVAL,81H;C 口输入OUTDX,ALMOVDX,289H;B 口位选数码管MOVAL,O1HOUTDX,AL;扫描键盘LOOP1:CALLKEY;数码管显示字符MOVAX,BXMOVBX,OFFSET TABLEADDBX,AX;此时BX即为对应的地址MOVAL,BXCMP BX,OFFSET TABLE;按下的为0则退出JZ EXITMOVDX,288H;A 口输出OUTDX,ALMOVDX,28AH;c 口输入INAL,DX;检测键盘是否弹起MOVAH
17、,ALL00P2:CALLDELAYINAL,DXCMPAL,AHJZL00P2JMPL00P1;返回DOSEXIT:MOV,AL,OOHMOVDX,288H;A 口输出OUTDX,ALMOVAX,4C00HINT21HCODE ENDSENDSTART五实验结果实验三:拨动K0K7,对应的L0L7亮,有按键输入则退出。实验四:数码管显示学号的后四位:0625。有按键输入则退出。实验五:按小键盘广F则数码管显示对应的字符,按下。则结束。六:实验总结本次实验课做了三个实验,每个实验也都变换了端口重新操作以加深理解,觉得 比第一次做的更熟练。本次实验遇到问题的主要是实验五,键盘扫描及防抖程序 较为
18、复杂,需要考虑很多。在添加按小键盘0则退出时起初代码位置不对导致有 逻辑错误,修改了两次才正确。七实验收获与心得体会这次实验觉得和小学期的单片机实验有很多的想通之处。小学期使用的键盘扫描 方法就是行扫描法,所以这次对扫描方法的理解更轻松一些。通过这次实验,我 对8255的应用有了更深的了解。这次实验我更加注意了代码优化,每个实验都 添加了退出的代码,觉得更可靠。实验三和四相对来说更容易,几乎是静态的,而实验五由于一直随着按键而变化所以需要考虑多种情况和变化,增加了难度,这也提高了我编程时考虑多种情况的意识,相信对我以后的编程也有很多的好 处。微机原理硬件实险可编程笑时器/祈微器(昆25引825
19、4 班级:姓名:学号:实验目的学习掌握8253用作定时器的编程原理;二、实验原理和内容1.完成一个音乐发生器,通过喇叭或蜂鸣器放出音乐,并在数码管上显示乐谱。音符频率对照音符1(do)2(re)3(mi)4(fa)5(so)6(la)7(si)i(do)频率(Hz)256288320341384426.64805122.扩展部分:利用小键盘实现弹琴功能,并显示弹奏的乐谱。注意:8253输入频率应小于2MHz。三硬件接线图及软件程序流程图1硬件接线图LhCI KO 时钟*5V储 TEO 一丁工喇叭或蜂呜器2软件程序流程图开始四源程序DATA SEGMENTFENPIN DW 0001H,3906
20、,3472,3125,2932,2604,2344,2083,1953;分频比DIGITAL DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH;数码管MUSIC DB0,1,2,3,1,1,2,3,1,0,3,4,5,0,3,4,5,0,5,6,5,4,3,1,0,5,6,5,4,3,1,0,1,5,1,0,1,5,1,0;存放播放的乐曲音符NUM DB OOH,070H,OBOH,ODOH,OEOH;检测键盘输入DATA ENDSSTACKSEGMENT STACK STACKDB 100 DUP(?)STACKENDSCODE SEGMENTASSUME CS:
21、CODE,DS:DATA,SS:STACK;延时子程序DELAYPROC NEAR PUSH CXMOV CX,100HWAITO:LOOP WAITOPOP CXRETDELAYENDP;延时子程序2DELAY1PROC NEARPUSH CXMOV CX,OFFFFHWAIT1:LOOP WAIT1POP CXRETDELAY1ENDP;获取键盘输入值的子程序KEYPROC NEARPUSH AX;保护现场PUSH CXPUSH DXMOV CX,01HCHECK:MOV DX,28AH;C 口地址给 DXMOV BX,OFFSET NUMADD BX,CXMOV AL,BXOUT DX,
22、AL;防抖IN AL,DX;判断是否有键盘按下MOV AH,ALCALL DELAYIN AL,DXCMP AL,AHJNZ CHECK;不相等说明为抖动,重新检测;判断按下的列ANDAL,OFHCMPAL,OFHJZNEXTCMPAL,OEHJZNEXT1CMPAL,ODHJZNEXT2CMPAL,OBHJZNEXT3MOVBX,O1HJMPGOTNEXT:INCCX;修改变量扫描下一行CMPCX,05HJNZJUMP1MOVCX,O1HJUMP1:JMPCHECKNEXT1:MOVBX,04HJMPGOTNEXT2:MOVBX,03HJMPGOTNEXT3:MOVBX,02H;计算按下键盘
23、的数值GOT:SUBCX,O1HMOVAL,CLMOVDL,04HMULDLADDBL,ALSUBBL,O1H;此时BX中所存即为对应的偏移量POPDX;恢复现场POPCXPOPAXRETKEYENDP;主程序START:MOVAX,DATAMOVDS,AX;8253初始化MOVDX,283HMOVAL,36HOUTDX,AL;8255初始化MOVDX,28BHMOVAL,81H;c 口输入OUTDX,AL;检测键盘是否弹起MOV DX,289H;B 口位选数码管MOV AL,01HOUT DX,AL;扫描键盘L00P1:CALL KEYCMP BX,0;按。播放音乐JZ PLAYOCMP B
24、X,9;按9退出JZ EXIT;按8发出对应音 MOV CX,BXMOV BX,OFFSET DIGITAL;数码管显示音符ADD BX,CXMOV AL,BXMOV DX,288H;A 口输出OUT DX,AL;播放该音符 MOV BX,OFFSET FENPIN MOV AX,CXADD AX,AXADD BX,AX;计数,先低八位后高八位 MOV AX,BXMOV DX,280HOUT DX,ALMOV AL,AHOUT DX,ALCALL DELAY1CALL DELAY1MOV DX,28AH;C 口输入 IN AL,DXLOOP2:MOV AH,ALCALL DELAYIN AL,
25、DXCMP AL,AHJZ LOOP2;初始化8253,停止播放音乐 MOV AX,OHMOV DX,283HMOV AL,36HOUT DX,ALJMP LOOP1;播放音乐PLAYO:MOVCX,01HPLAY:PUSHCX;读取音符,存于ex中MOVBX,OFFSETMUSICADDBX,CXMOVAL,BXMOVCL,ALMOVCH,OH;数码管显示MOVBX,OFFSETDIGITALADDBX,CXMOVAL,BXMOVDX,288HOUTDX,AL;播放该乐符MOVBX,OFFSETFENPINMOVAX,CXADDAX,AXADDBX,AX;计数,先低八位后高八位MOVAX,B
26、XMOVDX,280HOUTDX,ALMOVAL,AHOUTDX,ALPOPCX;延时,持续播放MOVAX,90HL00P3:CALLDELAY1DECAXJNZLOOP3;乐曲未结束时,CX加1INCCXCMPCX,28H;共40个音东JNZJUMJMPLOOP1JUM:JMPPLAYEXIT:MOVAL,0MOVDX,288HOUTDX,ALMOV AX,4C00HINT 21HCODE ENDSEND START五实验结果按小键盘的0时,播放预置音乐两只老虎,同时数码管显示相应的音符;按小键盘的8时,分别发出do,re,mi,fa,so,la,si,高音do,数码管显示 按下的音符;按小
27、键盘的9时,熄灭数码管,回到dos六:实验总结由于小学期单片机实验做的就是电子琴,原理上比较熟悉,所以这次实验比 较容易。在调试时,主要是调整延时以使音乐播放更准确。延时程序是保证本次 实验成功的关键。在弹奏时,发声时长即为按键时长,按键弹起时停止播放音乐(但为保证按键很短时发声不至于太急促,仍在此处加入了一点延时)。七实验收获与心得体会这次实验的主要收获是熟悉了可编程定时器/计数器的使用。可以利用 8253/8254工作于方式三来产生相应频率的方波,送给喇叭后发出相应的音。这 次实验也使我对查表调用的使用更得心应手。本实验只使用了 09,后面的键没 有应用。在以后如果有机会进一步完善,可以给
28、其他键赋予功能,如播放更多音 乐、使数码管显示更丰富等等。在本次实验调试时主要是调整延时,这使我更加 体会到了延时的重要性,看似不起眼的几行代码在整个电子琴程序中起到了很重 要的作用,可以检测防抖时使用,可以调整音乐时使用等等。在程序中,真的是 失之毫厘差之千里。以后的编程中我也会注意每一个细节,使程序更加优化。八思考题写出8253计数初值,输入频率和输出频率的关系:答:输出频率=输入频率/8253计数初值微机原理硬件实脸串行通讯宓分班级 姓名 学号一、实验目的1、了解串行通讯的基本原理。2、掌握串行接口芯片8251的工作原理和编程方法。二、实验原理和内容基础功能:1、按图4-16-1连接好电
29、路,(8251插通用插座)其中8254计数器用于产生8251的发 送和接收时钟,TXD和RXD连在一起。2、编程:从键盘输入一个字符,将其ASCH码加1后发送出去,再接收回来在屏 幕上显示,(或将内存制定区域内存放的一批数据通过8251A的TXD发送出去,然后从RXD接收回来,并在屏幕上或数码管上显示出来。)实现自发自收。扩展功能:双机通信,将发送端用小键盘发送数据,接收端用数码管显示接收的数据。三、硬件接线图及软件程序流程图1硬件接线图(引用讲义上的流程图)OUT0GATE0CLK0U5 8253CS2B8H2BFH-32 120280h287h1MHZ27282 豆 A T-DS 0123
30、4567-SDR/E DDDDDDDD-CRUCR5 Q N 9-IOX.L 2TxDRxDTxRDYRxRDVo CTS工2软件程序流程图(引用讲义上的流程图)四源程序1单机通信:DATA SEGMENTSTRING DB TRANSLATE,STRING1 DB RECEIVE,STRING2 DB ODH,OAH,$DATA ENDSSTACK SEGMENT STACK SATCKDB 100 DUP(?)STACKENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK;延时子程序DELAY PROCNEARPUSHCXMOVCX,100HWAI
31、TO:LOOPWAITOPOPCXRETDELAY ENDPSTART:MOVAX,DATAMOVDS,AX;8254初始化MOVDX,283HMOVAL,16H;计数器0,只读低字节,方式0,二进制OUTDX,ALCALLDELAYMOVDX,280H;计数器0,初值为52MOVAL,34HOUTDX,ALCALLDELAY;8251初始化MOVDX,2B9H;控制端口MOVAL,40H;内部复位命令OUTDX,ALNOPCALLDELAYMOVAL,5EH;方式控制字OUTDX,ALMOVAL,37H;命令控制字OUTDX,ALCALLDELAY;发送数据GOON:MOVDX,2B9H;读
32、状态字INAL,DXTESTAL,01HJZGOON;显示提示语句MOVAH,09HMOVDX,OFFSETSTRINGINT21HMOVAH,01HINT21H;检测是否为ESC键CMPAL,1BHJZEXITINCAL;加 1MOVDX,2B8HOUTDX,AL;接收数据RECEIVE:MOVDX,2B9HINAL,DXTESTAL,02HJZRECEIVE;显示提示语句MOVAH,09HMOVDX,OFFSETSTRING2INT21HMOVAH,09HMOVDX,OFFSETSTRING1INT21HMOVDX,2B8HINAL,DXMOVDL,ALMOVAH,02H;显示接收的数据I
33、NT21HMOVAH,09HMOVDX,OFFSETSTRING2INT21HJMPGOONEXIT:MOVAX,4C00HINT21HCODE ENDSENDSTART双机通信DATA SEGMENTSTRING DB Please put in a word,ODH,OAH,$TABLE DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,OOH;数码管显示 NUM DB 70H,OBOH,ODOH,OEOHDATA ENDSSTACK SEGMENT STACK SATCKDB 100 DUP(?)STACK
34、 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK;延时子程序;延时子程序2DELAY1 PROC NEARDELAYPROCNEARPUSHCXMOVCX,100HWAITO:LOOPWAITOPOPCXRETDELAYENDPPUSH CX PUSH BXMOV BX,250LP2:MOV CX,OFFFFHLP1:LOOP LP1DEC BXJNZ LP2 POP BX POP CX RETDELAY1 ENDPinput PROC NEARL00P1:MOV DX,28AH mov al,01111111b out dx,al in al,
35、dx and al,00001111b emp al,00000111bjz caseOCMP AL,OOOO1O11BJZ CASE1CMP AL,OOOO11O1BJZ CASE2CMP AL,OOOO1 HOBJZ CASE3mov al,10111111b out dx,alin al,dxand al,00001111b cmp al,00000111b jz case4CMP AL,00001011BJZ CASE5CMP AL,00001101BJZ CASE6CMP AL,00001 HOBJZ CASE7mov al,11011111b out dx,alin al,dxan
36、d al,00001111b cmp al,00000111b jz case8CMP AL,00001011BJZ CASE9CMP AL,00001101BJZ CASE10CMP AL,00001 HOBJZ CASE11mov al,11101111b out dx,alin al,dxand al,00001111b cmp al,00000111b jz casel2CMP AL,00001011BJZ CASE13CMP AL,00001101BJZ CASE14CMP AL,00001 HOBJZ CASE15MOV AL,16JMP OUTINPUT;根据判断的按键状态,给a
37、l赋相应的偏移值CASEO:MOV JMP CASE1:MOV JMPCASE2:MOV JMPAL,0 OUTINPUT AL,1 OUTINPUT AL,2 OUTINPUTCASE3:MOV AL,3JMP OUTINPUTCASE4:M0V AL,4JMP OUTINPUTCASE5:MOV AL,5JMP OUTinputCASE6:MOV AL,6JMP CASE7:MOVJMPCASE8:MOVJMP CASE9:M0VJMPOUTINPUT AL,7 OUTINPUT AL,8 OUTINPUT AL,9 OUTINPUTCASE1O:MOV AL,10 JMP OUTINPU
38、TCASE11:MOV AL,11JMP OUTINPUTCASE12:M0V AL,12JMP OUTINPUTCASE13:M0V AL,13JMP OUTINPUTCASE14:M0V AL,14 JMP OUTINPUTCASE15:M0V AL,15OUTINPUT:RET input ENDP;主程序START:MOV AX,DATAMOV DS,AX;8255初始化 MOV DX,28BHMOV AL,81H;C 口输入OUT DX,ALCALL DELAYMOV DX,289H;B 口位选数码管MOV AL,01HOUT DX,ALCALL DELAY;8254初始化 MOV
39、DX,283HMOV AL,16HOUT DX,ALCALL DELAYMOV DX,280HMOV AL,34HOUT DX,ALCALL DELAY;8251初始化 MOV DX,2B9HMOV AL,40HOUT DX,ALNOP CALL DELAY MOV AL,5EH OUT DX,AL MOV AL,37H OUT DX,AL CALL DELAY;显示提示语句MOV AH,09HMOV DX,OFFSET STRINGINT 21H;发送数据GOON:MOV DX,2B9H;读状态字IN AL,DXTEST AL,01HJZ RECEIVECALL inputCMP AL,16
40、JZ CHUSHI INC AL;加1 MOV DX,2B8H OUT DX,AL CALL DELAY JMP RECEIVE CHUSHI:MOV AL,16MOV DX,2B8HOUT DX,ALCALL DELAYJMP RECEIVE;接收数据RECEIVE:MOV DX,2B9H;读状态字IN AL,DXTEST AL,02HJZ GOONMOV DX,2B8HIN AL,DX;数码管显示MOV AH,0MOV BX,OFFSET TABLEADD BX,AXMOV AL,BXMOV DX,288H;A 口输出OUT DX,ALCALL DELAY1JMP GOONCODE END
41、SEND START五实验结果自发自收:键盘输入字符后,加一发送,本机接收后在屏幕显示加一后的字符,按ESC退出。拓展功能:小键盘输入,接收端数码管显示加1后的结果,可双机通信,支持连 续发送。六实验总结在编程时,由于使用的芯片较多,所以在编程顺序上发生了一定的混乱,有 一些考虑不周导致的问题。本次实验除了 8251A的发送接收外,大多数的知识在 之前的实验中有了一定的基础,比如键盘扫描程序等,可以直接从之前的实验中 移植过来,但怎样正确地控制好各个芯片有序工作是这个实验的重点。在单机通信时,起初输入字符后没有反应,后来在每个控制字后添加了延时 程序,显示正常。双机调试花了许多时间,之前是发送
42、后必须接收方按键后数码管才能显示,后来采取的措施是将原本的小键盘扫描程序中循环扫描改成只扫描一次。这样程 序可以不断执行GOON和RECEIVE,不需要接收方再按一次键即可实现连续通信,数码管实时显示。在发现问题解决问题的过程中还有很多细节问题的改动,在此 不再细说。每一次改动都能感觉到代码有了优化,直到最终出现正确的效果。七实验收获与心得体会通过这次实验,我对8251A有了更好的理解。本实验中不止使用了 8251,还使用了其他芯片,使我对各芯片的综合使用能力有了一定的提高。在之前课上 学习8251A理论知识时,我对这个芯片没有很理解,只知道是串行可编程接口,甚至对某些部分的理解是错误的,经过
43、了自己的实际体验才对之有了较多的理 解,明白了它的使用原理。这次的单机通信很简单,在进行了双机通信后才对8251双机通信的握手问 题有了更好的了解。同时感觉到知识的交流很重要,在实验室时,开始时遇到问 题就是自己去修改代码,始终没有找到问题的根源,在与老师和做成功的同学交 流后才找到问题并最终修改成功。本实验代码中的键盘扫描程序使用了张煜昊 的,因为自己的扫描程序解决不了这个问题,只有根本改变算法才行。通过这四次的微原硬件实验,我的收获很大。虽然通过小学期对汇编语言有 了一定的了解,但微原课本中的好多知识都是全新的,不自己去编程、调试很难 能够真正去了解这其中的原理。八思考题在实验中,你如何确定RxC,TxC的值,写出计算公式答:RxC=TxC=8253输出时钟频率=8251波特率*波特率因子