1、编程将片内RAM30H单元开始的15 B的数据传送到片外RAM3000H开始的单元中去解:STRAT: MOVMOVR0,#30HR7,#0FHMOVDPTR,#3000HLOOP: MOVA,@R0MOVX@DPTR,AINCR0INCDPTRDJNZR7,LOOPRET2、片内RAM30H开始的单兀中有10B的一进制数,请编程求它们之和(和V256 ).解 ADDIO: MOVR0,30HMOVR7,#9MOVA,@R0LOOP: INCR0ADDA,@R0DJNZR7,LOOPMOV30H,ARET3、编一个程序,将累加器中的一个字符从串行接口发送出去.解 SOUT: MOVSCON,#40H ;设置串行接口为工作方式MOVTMOD,#20H ;定时器 T1 工作于模式2MOVTL1,#0E8H; ;设置波特率为1200b/sMOVTH1,#0E8HSETBTR1MOVSBUF,AJNBT1,$CLB T1RET4、用查表法编一子程序,将R3中的BCD码转换成ASCII码.解MAIN:MOVA,R3;待转换的数送AMOVDPTR,#TAR; 表 首 地址 送DPTRMOVCA,@A+DPTR;查 ASCII 码表MOVR3,A;查表结果送 R3RETTARDB30H,31H,32H,33H,34HDB35H,36H,37H,38H,39H5、片内RAM40H开始的单元内有10B二进制数,编程找出其中最大值并存于50H 单元中.解START: MOVR0,#40H ;数据块首地址送 R0MOVR7,#09H ;比较次数送R7MOVA,@RO ;取数送ALOOP: INCR0MOV30H,@R0 ;取数送 3 0HCJNEA,30H,NEHT ; (A)与(30H)相比NEXT: JNCBIE1 (A) 2(30H)转 BIR1MOVA,30H ;(A)<(30H),大数送 ABIE1: DJNZR7,LOOP ;比较次数减 1,不为 0,继续比较MOV50H,A ;比较结束,大数送50HRET6、编一子程序,从串行接口接受一个字符.解: START: MOVTMOD,#20H;定时器 T1 工作于模式 2MOVTH1,#0E8H;设置波特率为 1 200b/sMOVTL1,#0E8HL1:SETBTR1;启动 T1MOVSCON,#5OH;串行接口工作于方式 1,充许接收JNBRI,L1;等待接收数据,末接收到数据,继续等待CLRRI;接收到数据,清 RIMOVA, SBUF;接收到数据送ARET7、利用调子程序的方法,进行两个无符号数相加。
请编主程序及子程序解:用RO和R1作数据指针,R0指向第一个加数,并兼作“和”的指针,R1指 向另一个加数,字节存放到R2中作计数初值主程序:JAFA: MOVRO,#2OH;指向加数最低字节MOVR1,#29H;指向另一加数最低字节MOVR2,#O4H;字节数作计数值ACALLJASUB;调用加法子程序AJMPRTE多字节加法子程序:JASUB: CLRJASUB1: MOVA,@RO;取出加数的一个字节(4B无符号数加数)ADDCA,@R1;加上另一数的一个字节MOV@RO,A;保存和数INCRO;指向加数的高位INCR1;指向另一加数的高位DJNZR2,JASUB1;全部加完了吗?RET8、若图数据块是有符号数,求正数个数,编程并注释ORGOO3OHSTART: MOV2OH,#OOH;计正数个数计数器MOVDPTR,#OOOOHMOVXA,@DPTR;数据块长度f 10HMOV10H,AINCDPTR;DPTR 指向第一个数的地址TWO: MOVXA,@DPTR;取数f AJBACC.7,ONE;是负数转ONE,准备取下一个数INC20H;是正数,正数计数器加1ONE: INCDPTR;地址指针加1DJNZ10H,TW;数据块长度减1不等于0,继续寻找RET9、编制一个循环闪烁灯的程序。
有8个发光二极管,每次其中某个灯闪烁点亮10次后,转到下一个闪烁 10次,循环不止画出电路图解本程序的硬件连接如图所示当P1.0输出高电平时,LED灯亮,否则不亮其程序如下:MOV A,#01HSHIFT: LCAIL FLASH;灯亮初值;调闪亮 10 次子程序SJMPSHIFT;循环FLASH:MOVR2,#0AH闪烁 10 次计FLASH1;MOVP1,A;点亮LCALLDELAY;延时MOVP1,#00H;熄灭LCALLDELAY;延时DJNZR2,FLASH1;循环RRA;右移一位RET1. 8225A控制字地址为300FH,请按:A 口方式0输入,B 口方式1输出,C 口高位输出,C 口低位输入,确定8225A控制字并编初始化程序.解:控制字为 10010101=95H初始化程序:MOV DPTR ,#300FHMOV A,#95H MOVX @DPTR ,A2•编定一个软件延时1S和1min的子程序.设f osc=6Hz,则一个机器周期1 us解:(1) 1S=2US*5*1000005*100000=250*200*10ORG 1000HTIME:MOVR7,#10T3:MOVR6,#200T2:MOVR6,#250T1:DJNZR5,T1DJNZR6,T2DJNZR7,T3RET(2)1min=60,调用上面1s子程序60次 ORG 0030HMOV R0,#60LOOP:LCALL TIME DJNZ R0,LOOP RET3•请编制串行通信的数据发送程序,发送片内RAM50H~5FH的16B数据,串行接口设 定为方式2,采用偶校验方式。
设晶振频率为6MHz解:查询方式发送程序如下MOV SCON,#8OHM OV PCON,#80HMOV R0,#50HMOV R7,#16HLOOP: MOV A,@MOVC,PMOVTB8,CMOVSBUF,AJNBT1,$CLRT1INCRODJNZR7,LOOPRET4•应用单片机内部定时器TO工作在方式1下,从P1.0输出周期为2ms的方波脉冲信号 已知单片机的晶振频率为6MHZ请(1)计算时间常数X,应用公式X=2 16-t (f/12)( 2)写出程序清单解:X=216-t(F/12)=216-1*1O-3*6*1O6/12=OFEOCHORG 3OOOHSTART:MOV TMOD,#O1HMOV TLO,#OCHMOV THO,#OFEHSETB TROLOOP: JBC TFO,DONESJMP LOOPDONE: MOV TLO,#OCHMOV THO,#OFEHCPL P1.OSJMP LOOP5•应用单片机内部定时器TO工作在方式1下,从P1.0输出周期为1ms的方波脉冲信号 已知单片机的晶振频率为6MHZ请(1)计算时间常数X,应用公式X=2 16-t (f/12)( 2)写出程序清单解:解: X=216-t(F/12) =216-O.5*1O-3*6*1O6/12=FFO6HORG 3OOOHSTART:MOV TMOD,#O1HMOV TLO,#O6HMOV THO,#FFHSETB TROLOOP: JBC TFO,DONESJMP LOOPDONE: MOV TLO,#O6HMOV THO,#FFHCPL P1.OSJMP LOOP6. 用89C51的Pl 口,监测某一按键开关,使每按键一次,输出一个正脉冲(脉宽随意)。
编出汇编语言程序解:ORG0100HABC:SETBP1.0SETBP1.7JBPI.7,$JNBP1.7,$CLRP1.0MOVR2,#0DAY: NOPNOPDJNZ R2,DAYSJMP ABC7、 设计一个4位数码显示电路,并用汇编语言编程使"8"从右到左显示一遍 解: ORG 0100HMOV A,#08HMOV R2,#01HMOV DPTR,#TABMOVC A,@A+DPTRMOV P1,ANEXT:MOV A,R2MOV P3,AACALL DAYJB ACC.4,LPDRL AMOV R2,AAJMP NEXTLPD: RETTAB: DBEND8. 编制一个循环闪烁的程序有8个发光二极管,每次其中某个灯闪烁点亮10次后 转到下一个闪烁10次,循环不止画出电路图解: MOV A,#01HSHIFT: LCALL FLASHRRSJMP SHIFTFLAH:MOVR2,#0AHFLAH1:MOVP1,ALCALLDELAYMOVP,#00HLCALLDELAYDJNZR2,FLASH1RET9.在8051单片机的INTO引脚外接脉冲信号,要求每送来一个脉冲,把30H单元值加1,若30H单元记满则进位31H单元。
试利用中断结构,编制一个脉冲计数程序解:ORG0000HAJMPMAINORG0003HAJMPSUBGMAIN:MOVA,#OOHMOV30H,AMOV31H,AMOVSP,#70HSETBINT0SETBEASETBEX0AJMP$ORG0200HSUBG:PUSH ACCINC 30HMOV A,30HJNZ BACKINC 31HBACK:POPRET110.利用89C51的P1 口控制8个发光二极管LED相邻的4个LED为一组,使2组每 隔 0 5S 交替发亮一次,周而复始试编写程序解: ORG 0100HMOV A,#0FHABC: MOV P1,AACALL D05SWAP A SJMP ABCD05:MOV R6,250DY: MOV R7,250DAY:NOPNOPDJNZ R6,DAYDJNZ R7,DAYRETEND11.设计89C51和ADC0809的接口,采集2通道10个数据,存入内部RAM的50H~59H 单元,画出电路图,编出:(1)延时方式;(2)查询方式;(3)中断方式中的一种程序解:IN2的地址为7FFAH,P1.0查询转换结束信号,查询程序如下:ORG 0100HMOV R7,#0AHMOV R0,#50HMOV DPTR,#7FFAHNEXT: MOVX @DPTR,AJB P1.0,$MOVX A,@DPTRMOV @R0,AINC R0DJNZ NEXTSJMP $。