资源描述:
《单片机编程题练习》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、编程练习题1.将累加器A的低4位传送到P0口的低4位,但P0口的高4位保持不变。ANLA,#0FHANLP0,#0F0HORLP0,A2.两个4位BCD码相加,一个存放在内部RAM31H30H单元;另一个存放在RAM33H32H单元。求和数存放在存在内部RAM41H40H单元中(所有数据都高位在前)。MOVA,30HADDA,32HDAAMOV40H,AMOVA,31HADDA,33HDAAMOV40H,A3.把片外RAM从1000H开始存放的10个数据,传送到片内RAM40H开始的单元中。答:ORG0030HMOVR0,#40HMOVDPTR,#1000H
2、MOVR7,#0AHSTART:MOVXA,@DPTRMOV@R0,AINCR0INCDPTRDJNZR7,START4.在外部RAM首地址为TABLE之数据表中有10个字节数据,请编程将每个字节之最高位无条件地置1.MOV R2,#10 MOV DPTR,#TABLE LOOP: MOVX A,@DPRT;取一数 ORL A,#80H;最高位置1 MOVX @DPTR,A;写回原地址 INC DPTR;处理下一单元 DJNZ R2,LOOP END5.试编写程序,查找内部RAM的20H~50H单元中是否有数据0AAH。若找到则
3、将51H单元置为0lH,,若未找到则使51H单元置为00H。MOVR0,#20H;取首地址LOOPl:CJNE@RO,#0AAH,LOOP2;取数与0AAH比较不等转移MOV51H,#01H;找到则将51H单元置为01HSJMPLOOP3LOOP2:INCRO;未完成指向下一个数CJNER0,#51H,LOOP1MOV51H,#00HLOOP3:SJMP$1.试编写程序,对片外4000H开始的单元中100个带符号数,统计其中正数、负数和零的个数,分别存到片内RAM12H、11H和10H单元中。0RG0100HSTART:MOVDPTR,#4000H;DPTR
4、指向片外4000H单元MOVR2,#l00;送字节数至计数器R2MOV12H,#0:存放统计数单元清零MOV11H,#0;存放统计数单元清零MOVlOH,#0;存放统计数单元清零L00P:MOVXA,@DPTR;取数CJNEA,#00H,NEQU;与零比较lNC10H;等于零,单元10H加1SJMPNEXTNEQU:JNBACC.7,LI;大干零转移到L1INC11H;小于零,单元11H加ISJMPNEXTL1:INC12H;大于零,单元12H加1NEXT:DJNZR2,LOOP;数据是否统计完?未完则转LOOP。SJMP$7.将片内RAM30H的中间4位,
5、31H的低2位,32H的高2位按序拼成一个新字节,存入33H单元。(2)将DPTR中间8位取反,其余位不变。(1)MOVA,30HANLA,#3CHRLARLAMOV33H,AANL31H,#3ANL32H,#0C0HMOVA,31HORLA,32HRLARLAORL33H,A(2)XRLDPH,#0FHXRHDPL,#0F0H8.设有30个单字节数,依次存放在外部RAM的21H开始的连续30个单元中,求这30个单字节数之和。要求把计算结果存放在R1和R2中,其中R1为高位,R2为低位。MOVR0,#21HMOVR3,#30MOVR1,#00HMOVR2,#
6、00HLOOP:MOVXA,@R0ADDA,R2MOVR2,AJNCLOOP1INCR1LOOP1:INCR0DJNZR3,LOOPEND9.用程序实现C=A2+B2。设A、B均为小于10,A存在21H单元,B存在22H单元,结果C存在20H单元。ORG1000HMOVA,21HLCALLSQRMOV20H,AMOVA,22HLCALLSQRADDA,20HMOV20H,ASJMP$ORG2000HSQR:MOVB,AMULABRETEND10.利用定时器T0,对外部信号计数,要求每满100次,P1.0取反。ORG0100HMAIN:MOVTMOD,#06H
7、MOVTH0,#9CHMOVTL0,#9CHSETBTR0LOOP:JBCTF0,NEXTSJMPLOOPNEXT:CPLP1.0SJMPLOOPEND