您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > 单片机实验指导_59728
151系列单片机原理与应用实验实验1简单汇编语言实验一、实验目的:掌握汇编语言设计和调试方法,熟悉键盘操作。熟悉汇编语言编程。二、实验内容:1.查找相同数据个数:在2000H~200FH的N个单元中填入零,运行本程序后检查2100H中是否为N;2.清零:把2000H~20FFH的内容清零。三、实验程序框图:查找相同数据个数程序实验框图清零程序框图四、实验步骤:1、在2000H~200FH的几个单元中填入零,运行查找相同数据个数程序后检查2100H中是否是几个单元数。2、用连续或单步方式运行清零程序,检查2000~20FF中执行程序前后的内容变化。五.思考:1、修改程序,查找其它内容。2、修改清零程序,假使把2000H~20FFH中的内容改成FF,如何修改程序。1/查找相同数据个数程序程序清单:ORG0000HLJMPL5800ORG0AA0H2L5800:MOVR0,#10H;查找16个字节MOVR1,#00HMOVDPTR,#2000HL5811:MOVXA,@DPTRCJNEA,#00H,L5816;取出内容与00H相等吗?INCR1;取出个数加1L5816:INCDPTRDJNZR0,L5811;未完继续MOVDPTR,#2100HMOVA,R1MOVX@DPTR,A;相同数的个数送2100HL581E:SJMPL581EEND2/清零程序清单:ORG0000HLJMPSE01ORG0640HSE01:MOVR0,#00HMOVDPTR,#2000H;(0000H)送DPTRLOO1:CLRAMOVX@DPTR,A;0送(DPTR)INCDPTR;DPTR+1INCR0;字节数加1CJNER0,#00H,LOO1;不到FF个字节再清LOOP:SJMPLOOPEND实验2拆字和拼字程序一、实验目的:掌握汇编语言设计和调试方法。二、实验内容:1、把2000H的内容拆开,高位送2001H低位,低位送2002H低位,2001H、2002H高位清零,一般本程序用于把数据送显示缓冲区时用;2、把2000H.2001H的低位分别送入2002H高低位,一般本程序用于把显示缓冲区的数据取出拼装成一字节。三、实验程序框图:3拆字程序框图拼字程序框图四、实验步骤:用连续或单步方式运行程序,检查2000H~2002H中内容变化情况。五、思考:如何用断点方式调试本程序。1/拆字程序清单:ORG0000HLJMPSE02ORG0660HSE02:MOVDPTR,#2000HMOVXA,@DPTRMOVB,A;(2000)→A→BSWAPA;交换ANLA,#0FH;屏蔽高位INCDPTRMOVX@DPTR,A;送2001HINCDPTRMOVA,BANLA,#0FH;(2000)内容屏蔽高位MOVX@DPTR,A;送2002HLOOP:SJMPLOOPEND2/拼字程序清单:ORG0000HLJMPSTARTORG0680HSTART:MOVDPTR,#2000HMOVXA,@DPTRANLA,#0FH;(2000H)内容屏蔽高位SWAPA;交换MOVB,A;保存INCDPTR4MOVXA,@DPTR;(2000H)内容送AANLA,#0FH;屏蔽高位ORLA,B;或INCDPTRMOVX@DPTR,A;送2002HSJMP$END实验3数据排序实验一、实验目的:熟悉51指令系统,掌握程序设计方法。二、实验内容:编写并调试一个排序子程序,其功能为用冒泡法将数据存储单元中几个单字节无符号的正整数,按从小到大的次序重新排列。三、程序框图:四、实验步骤:将RAM1000H~100FH中放入不等的数据,用断点方法运行本实验程序后检查1000H~100FH中的内容是否按从小到大的次序排列。五、思考:修改程序把1000H~100FH中内容从大到小排列。1/程序清单:ORG0000HLJMPSE01开始清标志位DPTR取数送A(DPTR+1)送DPTR(A)<((DPTR))?置标志位,内容交换长度-1=0?标志位=0?结束YNNNYY5ORG0640HSE01:CLR00H;标志位MOVDPTR,#1000H;起始地址MOVXA,@DPTRMOVR7,#04H;要排序的数据个数LOOP:MOV22H,A;第一个数送22hINCDPTRMOVXA,@DPTR;第二个数送ACLRC;清零CCJNEA,22H,LOOP5;判断是哪个数大LOOP5:JNCLOOP1;前面的数小则不作处理,否则交换位置LOOP2:DECDPL;交换位置MOVR5,DPLCJNER5,#0FFH,LOOP4DECDPHLOOP4:MOVX@DPTR,AMOVA,22HINCDPTRMOVX@DPTR,ASETB00HLOOP1:DJNZR7,LOOP;;;;;不交换位置JB00H,SE01;判断此次循环有无交换发生LOOP3:SJMPLOOP3END例4-1有一变量在片内RAM的20H单元,取值范围:00H~05H。编制一段程序,根据变量值求其平方值,并存入片内RAM的21H单元。ORG0000HLJMPSE01ORG0640HSE01:MOVDPTR,#2000HMOVA,20HMOVCA,@A+DPTRMOV21H,ASJMP$ORG2000HTABLE:DB01,01,04,09,16,25END例4-2设变量x以补码的形式存放在片内RAM的30H单元,变量y与x的关系是:当x大于0时,y=x;当x=0时,y=20H;当x小于0时,y=x+5。编制程序,根据x的大小求y并送回原单元。ORG0000HLJMPSTARTORG0640HSTART:MOVA,30H6JZNEXTANLA,#80H;判断符号位JZLPMOVA,#05HADDA,30HMOV30H,ASJMPLPNEXT:MOV30H,#20HLP:SJMP$END例4-3编写程序,将内部RAM的30H至3FH单元初始化为00H。ORG0000HLJMPMAINORG0040HMAIN:MOVR0,#30HMOVA,#00HMOVR7,#16LOOP:MOV@R0,AINCR0DJNZR7,LOOPSJMP$END例4-4将内部RAM中起始地址为60H的数据串传送到外部RAM中起始地址为1000H的存储区域内,直到发现’$’字符停止传送。由于循环次数事先不知道,但循环条件可以测试到。该程序采用先判断后执行的结构。ORG0000HLJMPMAINORG0040HMAIN:MOVR0,#60HMOVDPTR,#1000HLOOP0:MOVA,@R0CJNEA,#24H,LOOP1SJMPDONELOOP1:MOVX@DPTR,AINCR0INCDPTRSJMPLOOP0DONE:SJMPDONEEND实验4-1P1口亮灯实验一、实验目的:l)学习P1口的使用方法;72)学习延时子程序的编写。二、实验顶备知识:(l).Pl口为准双向口,每一位都可独立地定义为输入或输出,在作输入线使用前,必须向锁存器相应位写入“1”,该位才能作为输入。(2).本实验中延时子程序采用指令循环来实现,机器周期(12/6MHz)*指令所需机器周期数*循环次数,在系统时间允许的情况下可以采用此方法。三、实验内容:P1口输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。四、实验程序框图:五、实验步骤:P1.0~P1.7用插针连至L1~L8,运行程序后,观察发光二极管闪亮移位情况。六、思考:改变延时常数,使发光二极管闪亮时间改变。修改程序,使发光二极管闪亮移位方向改变程序清单ORG0000HLJMPSE18ORG0790HSE18:MOVP1,#0FFH;送P1口LO34:MOVA,#0FEH;L1发光二极管点亮LO33:MOVP1,ALCALLSE19;延时RLA;左移位SJMPLO33;循环ORG07A0HSE19:MOVR6,#0A0HLO36:MOVR7,#0FFHLO35:DJNZR7,LO35DJNZR6,LO36;延时RETEND实验4-2P1口转弯灯实验一、实验目的:进一步了解P1口的使用,学习汇编语言编程方法及调试技巧。二、实验内容:P1.0开关接5V,右转弯灯闪亮,P1.1开关接5V时左转弯灯闪亮,P1.0,P1.18开关同时接5V或接地时,转弯灯均不闪亮。三、实验程序框图:四、实验接线图:五、实验步骤:P1.0接K1,P1.1接K2,P1.4~P1.7接L1、L5、L9、L13,连续运行本程序,应看到转弯灯正确闪亮,在用单步方式调试本程序时需修改延时子程序,(例可把延时程序第一个字节改成返回指令22H),以便观察。程序清单:ORG0000HLJMPPX00ORG0C30HPX00:MOVP1,#0FFH;初始化PX03:MOVA,P1MOVB,AANLA,#03HCJNEA,#01H,PX01;满足只是P1.0为高条件?JB00H,PX04;闪烁标志位CLRP1.4CLRP1.5;开右灯SETBP1.6SETBP1.7;关左灯MOVR2,#20HLCALLDELY;延时SETB00H;置标志位9LJMPPX03;继续查找状态PX04:SETBP1.4SETBP1.5SETBP1.6;关灯SETBP1.7MOVR2,#20HLCALLDELY;延时CLR00H;清标志位AJMPPX03;继续查找状态PX01:CJNEA,#02H,PX02;满足只是P1.1为高条件吗?JB01H,PX05;判标志位SETBP1.4SETBP1.5;开左灯CLRP1.6CLRP1.7;关右灯MOVR2,#20HLCALLDELY;延时SETB01H;置标志位LJMPPX03;继续查找PX05:SETBP1.4SETBP1.5SETBP1.6;关灯SETBP1.7MOVR2,#20HLCALLDELY;延时CLR01H;清标志位LJMPPX03;继续查找状态QPX02:SETBP1.4SETBP1.5SETBP1.6;关灯SETBP1.7LJMPPX03;继续DELY:PUSH02HDEL2:PUSH02HDEL3:PUSH02H;延时DEL4:DJNZR2,DEL4POP02HDJNZR2,DEL3POP02HDJNZR2,DEL2POP02HDJNZR2,DELYRET10END实验5-1P3口输入,P1口输出一、实验目的:掌握P3口P1口简单使用。二、实验内容:P3.3口输入一脉冲,P1口按16进制加一方式点亮发光二极管。三、实验程序框图:四、实验步骤:P3.3用接针连至K1P1.0~P1.7插针连至L1~L8,K1拨动一次,L1~L8发光二极管按16进制方式加一点亮。五、思考:修改程序,使发光二极管左移方式点亮。程序清单:ORG0000HLJMPJ100ORG0810HJ100:MOVA,#00HJ101:JBP3.3,J101MOVR2,#10HLCALLDELYJBP3.3,J101;P3.3电平为低吗?J102:JNBP3.3,J102MOVR2,#10HLCALLDELYJNBP3.3,J102;P3.3电平为高吗?INCA;加1PUSHACCCPLA;取反MOVP1,A;驱动发光二极管POPACCAJMPJ101;循环DELY:PUSH02HDEL2:PUSH02HDEL3:PUSH02H11DEL4:DJNZR2,DEL4;延时POP02HDJNZR2,DEL3POP02HDJNZR2,DEL2POP02HDJNZR2,DELYRETEND实验5-2简单I/O口扩展一、实验目的:(1)学习单片机系统中扩展简单I/O口的方法。(2)学习数据输入输出程序的编制方法。二、实验内容:利用74LS244作为输入口,读取开关状态,并将此状态,通过74LS273再驱动发光二极管显示出来。三、实验程序框图:四、实验步骤:Y0~Y7接K1~K8,Q0~Q7接L1~L8,CS1接8000孔,CS2接9000孔,JX0接JX7,执行程序,按动K1~K8,观察L1~L8是否对应点亮。五、思考:可否用273输入,244输出。程序清单:ORG0
本文标题:单片机实验指导_59728
链接地址:https://www.777doc.com/doc-2594348 .html