您好,欢迎访问三七文档
实验二清零程序一、实验目的掌握汇编语言设计和调试方法,熟悉键盘操作。二、实验内容把2000H~20FFH的内容清零。三、实验程序框图四、实验步骤用连续或单步的方式运行程序,检查2000~20FF中执行程序前后的内容变化。五、思考假使把2000H~20FFH中的内容改成FF,如何修改程序。六、程序清单文件名:SW01.ASMORG0000HLJMPSE01ORG0640HSE01:MOVR0,#00HMOVDPTR,#2000H;(0000H)送DPTRLOO1:CLRAMOVX@DPTR,A;0送(DPTR)INCDPTR;DPTR+1INCR0;字节数加1CJNER0,#00H,LOO1;不到FF个字节再清LOOP:SJMPLOOPEND实验三拆字程序一、实验目的掌握汇编语言设计和调试方法二、实验内容把2000H的内容拆开,高位送2001H低位,低位送2002H低位,2001H、2002H高位清零,一般本程序用于把数据送显示缓冲区时用。三、实验程序框图四、实验步骤用连续或单步方式运行程序,检查2000H~2002H中内容变化情况。五、思考如何用断点方式调试本程序六、程序清单文件名:SW02.ASMORG0000HLJMPSE02ORG0660HSE02:MOVDPTR,#2000HMOVXA,@DPTRMOVB,A;(2000)→A→BSWAPA;交换ANLA,#0FH;屏蔽高位INCDPTR开始2000H内容送A高地位交换屏蔽高位后送2001H2000H内容送A屏蔽高位后送2002H结束MOVX@DPTR,A;送2001HINCDPTRMOVA,BANLA,#0FH;(2000)内容屏蔽高位MOVX@DPTR,A;送2002HLOOP:JMPLOOPEND实验四数据区传送子程序一、实验目的掌握RAM中的数据操作二、实验内容把R2、R3源RAM区首地址内的R6、R7字节数据传送到R4、R5目的RAM区。三、实验程序框图四、实验步骤在R2、R3中输入源首址(例如0000H),R4、R5中输入的目的地址(例如2000H),R6、R7中输入字节数(例如1FFFH),运行程序,检查0000H~1FFFH中内容是否和2000H~3FFFH中内容完全一致。五、程序清单文件名SW04.ASMORG0000HLJMPSE22ORG07B0HSE22:MOVDPL,R3MOVDPH,R2;建立源程序首址MOVXA,@DPTR;取数MOVDPL,R5MOVDPH,R4;目的地首址MOVX@DPTR,A;传送CNER3,#0FFH,LO42INCR2LO42:INCR3;源地址加1CJNER5,#0FFH,LO43INCR4LO43:INCR5;目的地址加1CJNER7,#00H,LO44开始源地址内容送A(A)送目的地址源地址加1目的地址加1字节数到么?结束NCJNER6,#00H,LO45;字节数减1LOOP:SJMPLOOPNOPLO44:DECR7SJMPSE22LO45:DECR7DECR6SJMPSE22;未完继续END实验五简单I/O口应用一、实验目的掌握P1口作为I/O口的使用方法,理解读引脚和读锁存器的区别。二、实验要求运行不同的程序,观察发光二极管的亮灭状态,比较程序的特点,了解汇编语言设计的基本思路和指令应用。三、思想描述流程图:;------------------------------------------------------;程序:所有发光二极管不停地闪动;------------------------------------------------------LED_PORTEQUP1ORG0000H;程序从地址0000H开始存放LJMPSTARTORG0100HSTART:CLREA;关闭所有中断MOVLED_PORT,#00H;点亮所有发光二极管LCALLDELAY;延时MOVLED_PORT,#0FFH;灭掉所有发光二极管LCALLDELAYSJMPSTART;重复闪动DELAY:MOVR3,#7FH;延时子程序DEL2:MOVR4,#0FFHDEL1:NOPDJNZR4,DEL1DJNZR3,DEL2结束开始读P3.4的脚P3.4接地点亮8个LED8个LED交叉亮灭程序流程图开始立即数00H送P1口,点亮8个发光二极管延时立即数0FFH送P1口,熄灭8个发光二极管延时结束RETEND;------------------------------------------------------;程序:用于关控制发二极管的显示方式;------------------------------------------------------LED_PORTEQUP1ORG0000HLJMPSTARTORG0100HSTART:CLREA;关闭所有中断MOVP3,#11111111B;使P3口锁存器置位MOVA,P3;读P3口引脚线信号ANLA,#00010000B;逻辑与操作,屏蔽掉无关位JZDDPING;判断P3.4是否接地,若是,跳转到DDPING执行MOVLED_PORT,#00H;否则,P3.4高电平,点亮所有发光二极管SJMPSTARTDDPING:MOVLED_PORT,#55H;P3.4接地,发光二极管交叉亮灭SJMPSTARTEND1234ABCD4321DCBATitleNumberRevisionSizeA4Date:2-Aug-2004SheetofFile:E:\JZV2.ddbDrawnBy:1A121A241A361A482A1112A2132A3152A4171Y1181Y2161Y3141Y4122Y192Y272Y352Y431G12G19U174LS240D2D3D4D5D6D7D8D1+5V234567819R11Kx8EA/VP31XLAT119XLAT218RESET9P3.7/RD17P3.6/WR16P3.2INT012P3.3/INT113P3.4/T014P3.5/T115P1.0/T1P1.1/T2P1.23P1.34P1.45P1.56P1.67P1.78P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P2.021P2.122P2.223P2.324P2.425P2.526P2.627P2.728PSEN29ALE/P30P3.1/TXD11P3.0/RXD10U2MCU8052G111.0592MC130pFC230pF123U3A74ALS00456U3B74ALS00312K1R25.1kR35.1k+5V实验六P3口输入P1口输出实验一、实验目的P3口输入P1口输出,实现I/O控制。二、实验要求撰写实验报告,给出输入输出实现方式,画出实验原理图,给出程序流程及实现的全部代码。三、思想描述:系统板上硬件连线(1.把“单片机系统”区域中的P0.0-P0.7端口用8芯排线连接到“动态静态数码显示模块”区域中的a-h端口上;要求:P0.0对应着a,P0.1对应着b,……,P0.7对应着h。(2.把“单片机系统”区域中的P2.0端口用8芯排线连接到“动态数码显示模块”区域中的任一个公共端上。实验原理AT89S51单片机的内部16位定时/计数器是一个可编程定时/计数器,它既可以工作在13位定时方式,也可以工作在16位定时方式和8位定时方式。只要通过设置特殊功能寄存器TMOD,即可完成。定时/计数器何时工作也是通过软件来设定TCON特殊功能寄存器来完成的。现在我们选择16位定时工作方式,对于T0来说,最大定时也只有65536us,即65.536ms,无法达到我们所需要的1秒的定时,因此,我们必须通过软件来处理这个问题,假设我们取T0的最大定时为50ms,即要定时1秒需要经过20次的50ms的定时。对于这20次我们就可以采用软件的方法来统计了。因此,我们设定TMOD=00000001B,即TMOD=01H下面我们要给T0定时/计数器的TH0,TL0装入预置初值,通过下面的公式可以计算出TH0=(216-50000)/256TL0=(216-50000)MOD256当T0在工作的时候,我们如何得知50ms的定时时间已到,这回我们通过检测TCON特殊功能寄存器中的TF0标志位,如果TF0=1表示定时时间已到。实验结果汇编源程序(查询法)SECONDEQU30HTCOUNTEQU31HORG00HSTART:SETBP2.0MOVSECOND,#00HMOVTCOUNT,#00HMOVTMOD,#01HMOVTH0,#(65536-50000)/256MOVTL0,#(65536-50000)MOD256SETBTR0DISP:MOVA,SECONDANLA,#0FHMOVDPTR,#TABLEMOVCA,@A+DPTRMOVP0,AWAIT:JNBTF0,WAITCLRTF0MOVTH0,#(65536-50000)/256MOVTL0,#(65536-50000)MOD256INCTCOUNTMOVA,TCOUNTCJNEA,#20,NEXTMOVTCOUNT,#00HINCSECONDMOVA,SECONDCJNEA,#60,NEXMOVSECOND,#00HNEX:LJMPDISPNEXT:LJMPWAITTABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND汇编源程序(中断法)SECONDEQU30HTCOUNTEQU31HORG00HLJMPSTARTORG0BHLJMPINT0XSTART:SETBP2.0MOVSECOND,#00HMOVA,SECONDANLA,#0FHMOVDPTR,#TABLEMOVCA,@A+DPTRMOVP0,AMOVTCOUNT,#00HMOVTMOD,#01HMOVTH0,#(65536-50000)/256MOVTL0,#(65536-50000)MOD256SETBTR0SETBET0SETBEASJMP$INT0X:MOVTH0,#(65536-50000)/256MOVTL0,#(65536-50000)MOD256INCTCOUNTMOVA,TCOUNTCJNEA,#20,NEXTMOVTCOUNT,#00HINCSECONDMOVA,SECONDANLA,#0FHMOVDPTR,#TABLEMOVCA,@A+DPTRMOVP0,ANEXT:RETITABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND实验7外部中断实验一、实验目的中断实验输出控制,学习中断程序设计方法,理解中断机制理解下降沿中断和低电平中断的区别。二、实验要求编写主程序实现系统的初始化,若有不同的初始化方式,应有状态指示;编写中断服务程序,服务程序操作以能明确判断发生一次中断为准,且有声光指示作为人机界面。实验前必须认真复习中断相关内容,并在实验报告上写出预习报告,给出实验方案,经过实验指导教师检查合格后,方可进行实验。实验结束后撰写实验报告画出实验原理图,给出程序流程及实现的全部代码。实验原理用8051单片机设计一交通信号灯模拟控制系统,能够完成正常情况下的轮流放行以及特殊情况和紧急情况下的红绿灯控制1.掌握单片机中断系统、定时/计数器的编程应用。2.通过对交通灯控制程序的编写与调试,掌握中断程序的结构。3.正常情况下A、B道(A、B道交叉组成十字路口,A是主道,B是支道)轮流放行,A道放行1分钟(其中5秒用于警告),B道放行30秒(其中5秒用于警告)。4.一道有车而另一道无车时,使有车车道放行,K5键按下表示A道有车,K1键按下表示B道有车。5.K9键按下表示有紧急车辆通过时,A、B道均为红灯。控制码表P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0控制码(P1口数据)状态说明(空)(空)B线绿灯B线黄灯
本文标题:51单片机实验代码
链接地址:https://www.777doc.com/doc-6392321 .html