微机原理及应用 复习题7-编程_第1页
微机原理及应用 复习题7-编程_第2页
微机原理及应用 复习题7-编程_第3页
微机原理及应用 复习题7-编程_第4页
微机原理及应用 复习题7-编程_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、微机原理及应用 复习题7-编写程序第一章基础知识第二章51单片机结构第三章指令系统1. 编写将程序存储器10F0H中的数据送入累加器A中的程序段。(本题5分)2. 编写程序段实现累加器A与寄存器B的内容交换。(本题5分)3. 编写将片内RAM 40H单元开始的20个字节的数据传送到片外RAM 1000H开始的单元中的子程序。(本题10分)4. 5编程将寄存器R0内容与R1内容相乘,结果存于R2R3中(R2存高位,R3存低位)。(本题5分)5. 6编程将片外数据存储器1080H单元的内容送到片内RAM的2BH单元。(本题5分)6. 7将片内RAM空间20H2AH中的数据的高4位变零,低4位不变,

2、原址存放。(本题10分)7. 9编程读取程序存储器1080H单元的内容送到片内RAM的30H单元中。(本题5分)8. 10. 编程将R1内容求补后送回R1中。(本题5分)9. 11设在寄存器R3的低4位中存有数码09中的一个数,将其转换成ASCII码,并存人片外RAM的2000H单元。(10分)10. 13. 将R1中的低4位数与R2中的高4位数合并成一个8位数并存放在R1中。(本题5分)11. 14. 试编写一段对中断系统初始化的程序,使之允许INT0 、INT1、 T0和串行口中断,且使串行口中断为高优先级中断,其余为低优先级中断。(本题5分)12. 编写将片内RAM 40H-4FH单元清

3、0的程序。(本题10分)13. 已知一MCS-51单片机系统的片外 RAM的30H、31H单元分别存放了8单元无符号数AFH和61H,是编程完成以上两个单元中的五符号数相加,并将和值送住片外RAM的8000H单元中,同时将所编写程序运行完毕后的数据填入表中的PRW的有关为以及寄存器A、DPTR和片外RAM单位中。CY A DPTR 片外31H 片外30H 片外8000H14. 已知在累加器A中存放一个BCD数(9),请编程实现一个查平方表的子程序。15. 请使用位操作指令实现下列逻辑操作: BIT=(P1.0)(11HCY)16. 已知变量X存于VAR单元,函数值Y存于FUNC单元,按下式编程

4、求Y值。Y=17. 已知在R2中存放一个压缩的BCD码,请将它拆成二个BCD字节,结果存于SUM开始的单元中(低位在前)。18. 将存于外部RAM 8000H开始的50H数据传送0010H的区域,请编程实现。19. 完成某种操作可以采用几条指令构成的指令序列实现,试写出完成以下每种操作的指令序列。 (1)将R0的内容传送到R1; MOV A,R0 MOV R1,A(2)内部RAM单元60H的内容传送到寄存器R2; MOV R2,60H(3)外部RAM单元1000H的内容传送到内部RAM单元60H; MOV DPTR,#1000H MOVX A,DPTR MOV 60H,A(4)外部RAM单元1

5、000H的内容传送到寄存器R2; MOV DPTR,#1000H MOVX A,DPTR MOV R2,A(5)外部RAM单元1000H的内容传送到外部RAM单元2000H。 MOV DPTR,#1000H MOVX A,DPTR MOV DPTR,#2000H MOVX DPTR,A20. 编写一段子程序,将二位压缩的BCD码转换为二进制数,入口、出口均是A。若是非法的BCD码,则A返回值为255。(10)21. 编定一个软件延时1S和1mi的子程序设osc=6Hz,则一个机器周期1。解:(1)1S=2US*5*5*=250*200*10ORG 1000H TIME:MOV R7,#10 T

6、3: MOV R6,#200 T2: MOV R6,#250 T1: DJNZ R5,T1DJNZ R6,T2DJNZ R7,T3RET (2)1min=60,调用上面1s子程序60次 ORG 0030H MOV R0,#60LOOP:LCALL TIME DJNZ R0,LOOP RET22. 编程将片内RAM30H单元开始的B的数据传送到片外RAM3000H开始的单元中去。解:STRAT:MOV R0,#30H MOV R7,#0FH MOV DPTR,#3000H LOOP: MOV A,R0 MOVX DPTR,A INC R0 INC DPTR DJNZ R7,LOOP RET23.

7、 用查表法编一子程序,将R3中的BCD码转换成ASCII码. 解MAIN: MOV A,R3 ;待转换的数送A MOV DPTR,#TAR ;表首地址送DPTR MOVC A,A+DPTR ;查ASCII码表 MOV R3,A ;查表结果送R3 RET TAR DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H24. 片内RAM40H开始的单元内有10B二进制数,编程找出其中最大值并存于50H单元中 解 START: MOV R0,#40H ;数据块首地址送R0 MOV R7,#09H ;比较次数送 MOV A,R0 ;取数送 LOOP: INC R0

8、MOV 30H,R0 ;取数送H CJNE A,30H,NEHT ;(A)与(30H)相比 NEXT: JNC BIE1 (A)(30H)转BIR1 MOV A,30H ;(A)(30H),大数送ABIE1: DJNZ R7,LOOP ;比较次数减1,不为0,继续比较 MOV 50H,A ;比较结束,大数送50H RET 25. 利用调子程序的方法,进行两个无符号数相加。请编主程序及子程序。解 用R0和R1作数据指针,R0指向第一个加数,并兼作“和”的指针,指向另一个加数,字节存放到中作计数初值。主程序:JAFA: MOV R0,#20H ;指向加数最低字节MOV R1,#29H ;指向另一加

9、数最低字节MOV R2,#04H ;字节数作计数值ACALL JASUB ;调用加法子程序AJMP $ RTE 多字节加法子程序:JASUB: CLR CJASUB1: MOV A,R0 ;取出加数的一个字节(无符号数加数)ADDC A,R1 ;加上另一数的一个字节MOV R0,A ;保存和数INC R0 ;指向加数的高位INC R1 ;指向另一加数的高位DJNZ R2,JASUB1 ;全部加完了吗?RET26. 若图数据块是有符号数,求正数个数,编程并注释。解 ORG 0030H START: MOV 20H,#00H ;计正数个数计数器 MOV DPTR,#0000H ; MOVX A,D

10、PTR ;数据块长度10H MOV 10H,A INC DPTR ;DPTR指向第一个数的地址 TWO: MOVX A,DPTR ;取数A JB ACC.7,ONE ;是负数转ONE,准备取下一个数 INC 20H ;是正数,正数计数器加ONE: INC DPTR ;地址指针加 DJNZ 10H,TW ;数据块长度减不等于,继续寻找 RET27. 编程序把内部RAM中20H4FH单元的内容清0。28. 设计一个延时0.1秒的子程序,设晶振频率为6MHz,指令的机器周期为2微秒。TIME:MOV R4,#64HTT1:MOV R6,#0C6HTT2:NOPNOPNOPDJNZ R6,_DJNZ

11、_RET29. 在3500H为首址的片外RAM中,有20个补码表示的数,欲编程序,把其中正数传到20H为首址的片内RAM区中,负数不传送,请补全下列程序。MOV DPTR,#3500HMOV R2,#14HMOV R0,#20H30. 编程序将2000H为首址的片外RAM区的若干字符传送到30H开始的片内RAM区中,遇到CR(即 0DH)就停止传送,CR不要传送,请补全下列程序。MOV DPTR,#2000HMOV R0,#30H31. 在3000H为首址的片外RAM中存100个单字节数据,试编程序,统计数据块中负数和正数(包括零)的个数,分别存于片内RAM的NEGT和POSIT单元中。请补全

12、下列程序。 CLR A MOV NEGT,A MOV POSIT,A MOV DPTR,#3000H MOV R2,#64H32. 完成某种操作可以采用几条指令构成的指令序列实现,试写出完成以下每种操作的指令序列。 (1)将R0的内容传送到R1; (2)内部RAM单元60H的内容传送到寄存器R2; (3)外部RAM单元1000H的内容传送到内部RAM单元60H; (4)外部RAM单元1000H的内容传送到寄存器R2; (5)外部RAM单元1000H的内容传送到外部RAM单元2000H。33. 片内RAM30H开始的单元中有10B的二进制数,请编程求它们之和(和256 )解ADDIO:MOV R

13、0,30H MOV R7,#9 MOV A,R0 LOOP: INC R0 ADD A,R0 DJNZ R7,LOOP MOV 30H,A RET第四章中断系统1. 在8051单片机的INTO引脚外接脉冲信号,要求每送来一个脉冲,把30H单元值加1,若30H单元记满则进位31H单元。试利用中断结构,编制一个脉冲计数程序。解: ORG 0000H AJMP MAIN ORG 0003H AJMP SUBG MAIN:MOV A,#OOH MOV 30H,A MOV 31H,A MOV SP,#70HSETB INT0SETB EASETB EX0AJMP $ORG 0200H SUBG: PUS

14、H ACCINC 30HMOV A,30HJNZ BACKINC 31H BACK: POP RET1 第五章定时器、计数器1. 请编程:使用定时器T1对外部引脚T1输入脉冲进行计数,每计满100个脉冲使片内RAM 40H单元内容减1,直到40H单元内容减到0时停止。(本题10分)2. 使用定时器T0对外部引脚T0输入脉冲进行计数,每计满200个脉冲使片内RAM 20H单元内容减1,直到20H单元内容减到0时停止。(本题10分)3. 编程用单片机内部定时器在P1.7引脚产生频率为100KHz等宽矩形波。假定单片机的晶振频率为12MHz,请编程实现。(本题10分)4. 设单片机晶振频率为6MHz

15、,使用定时器T1产生周期为500s的等宽连续方波,并由P1.0输出。(本题10分)5. 应用单片机内部定时器T0工作在方式1下,从P1.0输出周期为2ms的方波脉冲信号,已知单片机的晶振频率为6MHZ。请(1)计算时间常数X,应用公式X=2t(f)(2)写出程序清单解:X=216-t(F/12)=216-1*10-3*6*106/12=OFEOCHORG 3000HSTART:MOV TMOD,#01HMOV TL0,#OCHMOV THO,#OFEHSETB TR0LOOP: JBC TFO,DONESJMP LOOPDONE: MOV TL0,#OCHMOV THO,#OFEHCPL P1

16、.0SJMP LOOP6. 应用单片机内部定时器T0工作在方式1下,从P1.0输出周期为1ms的方波脉冲信号,已知单片机的晶振频率为6MHZ。请(1)计算时间常数,应用公式X=2t(f)(2)写出程序清单解:解:X=216-t(F/12)=216-0.5*10-3*6*106/12=FF06HORG 3000HSTART:MOV TMOD,#01HMOV TL0,#06HMOV THO,#FFHSETB TR0LOOP: JBC TFO,DONESJMP LOOPDONE: MOV TL0,#06HMOV THO,#FFHCPL P1.0SJMP LOOP7. 通过8031单片机使汽车尾灯亮0

17、.5秒,灭0.5秒,设定时器0每间隔0.1秒产生一次中断,外接晶体6MHz,电路如右图,请编写部分程序:BUFEQU40H;0.1秒单元ORG0000HLJMPMAINORG H; 定时器0中断服务程序入口LJMPCLOCK;ORG200HMAIN:MOVBUF, #0ANLTMOD, #0F0H ORLTMOD, #01HMOVTL0, #0B0HMOVTH0, # ; SETBET0SETB SETBTR0CLRP1.0LP:NOPSJMP ORG300HCLOCK:MOVTL0, # MOVTH0, #3CHINC BUFMOV ,BUFCJNEA, #5, EXITMOVBUF, #0

18、CPL EXIT: END8. 单片机内部定时方式产生频率为100KHZ等宽矩形波,假定单片机的晶振频率为12MHZ,请编程实现。答: ;T0低5位:1BH;T0高8位:FFHMOV TMOD,#00H ;设置定时器T0工作于模式0MOV TL0,#1BH ;设置5ms定时初值MOV TH0,#0FFHSETB TR0 ;启动T0LOOP:JBC TF0,L1 ;查询到定时时间到?时间到转L1SJMP LOOP ;时间未到转LOOP,继续查询L1:MOV TL0,#1BH ;重新置入定时初值MOV TH0,#0FFHCPL P1.0 ;输出取反,形成等宽矩形波SJMP LOOP ;重复循环9.

19、 以定时器/计数器1进行外部时间计数,每计数1000个脉冲后,定时器/计数器1转为定时工作方式,定时10ms后又转为计数方式,如此循环不止。假定 为6WHZ,用模式1编程。解:T1为定时器时初值:T1为计数器时初值:所以:L1:MOV TMOD,#50H ;设置T1为计数方式且工作模式为1MOV TH1,#0FCH ;置入计数初值MOV TL1,#18HSETB TR1 ;启动T1计数器LOOP1:JBC TF1,L2 ;查询计数溢出?有溢出(计数满1000个)转L2SJMP LOOP1 ;无溢出转LOOP1,继续查询L2:CLR TR1 ;关闭T1MOV TMOD,#10H ;设置T1为定时

20、方式且工作与模式1MOV TH1,#0ECH ;置入定时10ms初值MOV TL1,#78HSETB TR1 ;启动T1定时LOOP2:JBC TF1,L1 ;查询10ms时间到?时间到,转L1SJMP LOOP2 ;时间未到,转LOOP2,继续查询10. 已知89C51单片机的fosc=6MHz, 请利用T0和P1.0输出矩形波。矩形波高电平宽50s,低电平宽300s。解:T0采用模式2作为50s定时时的初值:所以 作300s定时时的初值:所以MOV TMOD,#02H ;设置定时器T0工作于模式2L2:CLR P1.0 ;P1.0输出低电平MOV TH0,#6AH ;置入定时300s初值M

21、OV TL0,#6AHSETB TR0 ;启动T0LOOP1:JBC TF0,L1 ;查询300s时间到?时间到,转L1SJMP LOOP1 ;时间未到,转LOOP1,继续查询L1:SETB P1.0 ;P1.0输出高电平CLR TR0 ;关闭T0MOV TH0,#0E7H ;置入定时300s初值MOV TL0,# 0E7HSETB TR0 ; 启动T0LOOP2:JBC TF0,L2 ;查询50s时间到?时间到,转L2SJMP LOOP2 ;时间未到,转LOOP2,继续查询11. 已知89C51单片机的fosc=12MHz, 用T1定时。试编程由P1.0和P1.1引脚分别输出周期为 2ms和

22、500s的方波。解:采用模式0作 定时初值:所以 MOV R2,#04H ;R2为“250s”计数器,置入初值4CLR P1.0 ;P1.0输出低电平CLR P1.1 ;P1.1输出低电平MOV TMOD,#00HL2:MOV TH1,#0F8H ;置入定时250s初值MOV TL1,#06HSETB TR1 ;启动T1LOOP:JBC TF1,L1 ;查询250s时间到?时间到,转L1SJMP LOOP ;时间未到,转LOOP,继续查询L1:CPL P1.1 ;P1.1输出取反,形成周期为500sCLR TR1 ;关闭T1DJNZ R2,L2 ;“250s”计数器减1,到1ms吗?未到转L2

23、CPL P1.0 ;P1.0输出取反,形成周期为2ms方波MOV R2,#04H ;重置“250s”计数器初值4LJMP L2 ;重复循环12. 设fosc=12MHz。试编制一段程序,功能为:对定时器T0初始化,使之工作在模式2,产生200s定时,并用查询T0溢出标志的方法,控制 P1.0输出周期为2ms的方波。解:T0作定时器时初值: 所以 程序1:CLR P1.0 ;P1.0输出低电平MOV R2,#05H ;R2为“200s”计数器,置入初值5,计1msMOV TMOD,#02H ;设定时器T0工作于模式2L2: MOV TH0,#38H ;置入定时初值MOV TL0,#38HSETB

24、 TR0 ;启动T0LOOP:JBC TF0,L1 ;查询200s时间到?时间到,转L1SJMP LOOP ;时间未到,转LOOP,继续查询L1: CLR TR0 ;关闭T0DJNZ R2,L2 ;“200s”计数器减1,到1ms吗?未到,转L2CPL P1.0 ;到1ms,P1.0取反,形成周期为2ms的方波MOV R2,#05H ;重置“200s”计数器初值LJMP L2 ;重复循环程序2:MAIN:MOV TMOD,#02H ;设定时器T0工作于模式2CLR P1.0 ;P1.0输出低电平LOOP1:MOV R2,#05H ;R2为“200s”计数器,置入初值5,计1msLOOP:MOV

25、 TH0,#38H ;置入定时初值MOV TL0,#38HSETB TR0 ;启动T0JNB TF0,$ ;查询200s时间到?时间到,继续查询CLR TR0 ;关闭T0DJNZ R2,LOOP ;“200s”计数器减1,到1ms吗?未到,转LOOPCPL P1.0 ;到1ms,P1.0取反,形成周期为2ms的方波SJMP LOOP1 ;重复循环13. 已知晶振频率为 12MHZ ,请用 T0 的工作模式 1 定时及溢出中断方式编程,实现从 P1.0 引脚输出如下方波。要求先确定定时时间并给出定时初值的计算步骤,然后写程序。.10ms.10ms1 定时时间 10ms ,设 T0 的初值为 X

26、。则 ( 2 16 X ) 1s =10 10 3 sX = 65536 10000 =55536 =D8F0H ( 5 分)2 编程 ORG 0000H ( 10 分)LJMP MAINORG 000BHLJPM CTC0ORG 0030HMAIN : MOV TMOD , #01HMOV TL0 , #0F0HMOV TH0 , #0D8HSETB EASETB ET0SETB TR0SJMP $第六章串行口1 在两个8051间用模式2进行串行通信,A机并行采集外部开关的输入,然后串行传输给B机;B机接收后并行输出控制LED发光。画出连接示意图,写出完整的程序。(共 15 分)A机程序 O

27、RG 0000HAJMP STARTORG 4100HSTART:MOV P1,#0FFHMOV SCON,#80HAGAIN1:MOV SBUF,P1JNB TI,$CLR TISJMP AGAIN1ENDB机程序 ORG 0000HAJMP STARTORG 4100HSTART:MOV SCON,#90HAGAIN1:JNB RI,$MOV P1,SBUFCLR RISJMP AGAIN1END2 请编制串行通信的数据发送程序,发送片内RAM50H5FH的16B数据,串行接口设定为方式2,采用偶校验方式。设晶振频率为6MHz。解:查询方式发送程序如下 MOV SCON,#8OH M OV

28、 PCON,#80H MOV R0,#50H MOV R7,#16HLOOP: MOV A,R0 MOV C,P MOV TB8,C MOV SBUF,A JNB T1,$ CLR T1 INC R0 DJNZ R7,LOOP RET3 编一个程序,将累加器中的一个字符从串行接口发送出去解 SOUT:MOV SCON,#40H ;设置串行接口为工作方式 MOV TMOD,#20H ;定时器T1工作于模式 MOV TL1,#0E8H; ;设置波特率为1200b/s MOV TH1,#0E8H SETB TR1 MOV SBUF,A JNB T1,$ CLB T1 RET4 编一子程序,从串行接口

29、接受一个字符解: START: MOV TMOD,#20H ;定时器T1工作于模式2 MOV TH1,#0E8H ;设置波特率为1 200b/s MOV TL1,#0E8H SETB TR1 ;启动T1 MOV SCON,#50H ;串行接口工作于方式1,充许接收 L1: JNB RI,L1 ;等待接收数据,末接收到数据,继续等待 CLR RI ;接收到数据,清RI MOV A,SBUF ;接收到数据送A RET5 设fosc11.059MHz,试编写一段程序,其功能为对串行口初始化,使之工作与方式1,波特率为1200b/s;并用查询串行口状态的方法,读出接收缓冲器的数据并回送到发送缓冲器。解

30、:START:MOV SCON,#40H ;串行接口工作于方式1MOV TMOD,#20H ;定时器T1工作于模式2MOV TH1,#0E8H ;赋定时器计数初值MOV TL1,#0E8HSETB TR1 ;启动定时器T1MOV A,SBUF ;读出接收缓冲器数据MOV SBUF,A ;启动发送过程JNB TI,$ ;等待发送完CLR TI ;清TI标志SJMP $ ;结束6 若晶振为11.0592MHz,串行口工作与方式1,波特率为4800b/s。写出用T1作为波特率发生器的方式字和计数初值。解:MOV TMOD,#20H ;定时器T1工作于模式2MOV TH1,#0FAH ;赋定时器计数初

31、值MOV TL1,#0FAH7 当89C51串行口按工作方式1进行串行数据通信时。假定波特率为1200b/s,以中断方式传送数据。请编写全双工通信程序。解:设系统时钟频率fosc=6.0MHZ。查教材表9-2可知,可取SMOD=0,T1的计数初值为F3H。程序如下: ORG 0000H AJMP MAIN ;上电,转向主程序 ORG 0023H ;串行口的中断入口地址 AJMP SERVE ;转向中断服务程序 ORG 0040H ;主程序MAIN: MOV SP,#60H ;设置堆栈指针 MOV SCON ,#50H MOV PCON ,#00HMOV TMOD,#20HMOV TH1,#0F

32、3HMOV TL1,#0F3H SETB TR1MOV R0 ,#20H ;置发送数据区首地址MOV R1 ,#40H ;置接收数据区首地址MOV R7 ,#10H ;置发送字节长度MOV R6 ,#10H ;置接收字节长度 SETB ES ;允许串行口中断 SETB EA ;CPU允许中断 MOV A ,R0 ;取第一个数据发送 MOV SBUF ,A ;发送第一个数据 SJMP $ ;等待中断SERVE:JNB RI ,SEND ;TI=1,为发送中断CLR RI MOV A ,SBUF ;读出接收缓冲区内容 MOV R1 ,A ;读入接收缓冲区DJNZ R6 ,L1 ;判断数据块发送完否

33、SJMP L2 ;数据块接收完,转L2L1: INC R1 ;修改数据区指针L2: RETI ;中断返回SEND: CLR TI ;清除发送中断标志DJNZ R7 ,L3 ;判断数据块发送完否SJMP L4 ;数据块接收完,转L4L3: MOV A ,R0 ;取数据发送MOV SBUF ,A ;发送数据INC R0 ;修改数据地址L4: RETI ;中断返回 END8 以89C51串行口按工作方式3进行串行数据通信。假定波特率为1200b/s,第9数据位作奇偶校验位,以中断方式传送数据。请编写通信程序。解:ORG 0000H AJMP MAIN ;上电,转向主程序 ORG 0023H ;串行口

34、的中断入口地址 AJMP STOP ;转向中断服务程序 ORG 0040H ;主程序MAIN: MOV SP,#60HMOV TMOD,#20HMOV TH1,#0E8HMOV TL1,#0E8H SETB TR1 MOV SCON ,#0D0H MOV PCON ,#00H MOV R0 ,#20H ;置发送数据区首地址MOV R1 ,#40H ;置接收数据区首地址 SETB ES ;允许串行口中断 SETB EA ;CPU允许中断 MOV A ,R0 MOV C, PSW.0 ;PC CPL C MOV TB8 ,C MOV SBUF ,A ;发送第一个数据 SJMP $STOP: JNB

35、 RI SOUT ;TI=1,为发送中断CLR RI MOV A ,SBUF ;读出接收缓冲区内容MOV C ,PSW.0 ;PCCPL C ;形成奇校验JC LOOP1 ;判断接收端的奇偶值,C=1转LOOP1JNB RB8 ,LOOP2 ;C=0,RB8=0,转LOOP2SJMP ERROR ;C=0,RB8=1,转出错处理LOOP1:JB RB8 ,LOOP2 ;C=1,RB8=1,转LOOP2SJMP ERROR ;C=0,RB8=1,转出错处理LOOP2: MOV R1 ,A ;将接收数据送入接收数据区 INC R1 ;修改数据区指针 RETISOUT: CLR TI ;是发送中断,

36、清除发送中断标志INC R0 ;修改数据区指针MOV A ,R0 MOV PSW.0, C ;PC CPL C MOV TB8 ,C MOV SBUF ,A ;发送第一个数据RETIERROR:第七章I/O及存储器扩展1. 该程序是信号灯控制程序,采用P1口控制8个发光二极管的亮与灭(由线路板决定,P1口输出低电平时对应的发光二极管被点亮)。 ORG 0000H AJMP MAIN ORG 000BH ;该地址是( )地址LJMP TT0 ;当出现( )时,才会执行到该指令。ORG 0030H MAIN: MOV TMOD, #01H ;执行该指令的目的( )MOV TH0,#3CH ;设置T

37、0 50ms定时初始值MOV TL0,#0B0H ;此时堆栈指针的内容是( )MOV R2, #40 ;设50ms循环40次定时2秒MOV R3, #8 ;设( )个数SETB ET0SETB EASETB TR0 ;启动( )SJMP $ ;执行该程序的目的( )TT0: MOV TH0, #3CHMOV TL0, #0B0HDJNZ R2, BACK ;不够40次(2秒)退出中断MOV R2, #40H ; LCALL LJMP ;调亮灯子程序BAC:RETI ;中断返回LAMP:CLR TR0 ;进入亮灯程序后为何关定时器( ) MOV R4,#0FEH ;设置亮灯控制字LP1:MOV

38、P1, R4 ;最先亮的灯是( )ACALL DELAY ;调亮灯延时MOV A,R4 ;此时SP内容是( )CLR C ;清进位位为参与亮灯循环RLC A ;带进位位左移循环MOV R4 , ADJNZ R3, LP1SETB TR0 RET ;亮灯子程序返回DELAY: ;延时程序省略 END ; 答:T1的中断入口 ,中断 ,设定T1的工作方式,07H,8,启动定时器T0工作,原地踏步,T0,第2位,09H2. 将8051外部扩展2K EPROM,同时扩展16K RAM作数据存储器,采用的2716是2K的EPROM芯片,6264是8K的RAM芯片,74LS373是8位锁存器。请画出连接示

39、意图。要求画出8051的数据、地址、ALE、PSEN、RD、WR信号;锁存器的数据入D、数据出Q、锁存控制G、OE;2716的A、数据O、片选CE、输出使能OE;6264的A、D、CE、OE、WE。最后写出各片的地址范围。(共 12 分)数据线8根从P1直接到2716的O、两片6264的D;地址线低8位从P0经锁存器后到各片内地址口,高8位从P2出0-2三位直接到2716的地址口,0-4五位直接到两片6264内P2.5接一片6264的CE,经非门后接另一片6264;ALE接锁存器的G,锁存器OE接地,PSEN接2716的OE,WR接6264的WE,RD接OE。2716:0-7FFH,6264:

40、0-1FFFH,2000H-3FFFH3. 8225A控制字地址为300FH,请按:A口方式0输入,B口方式1输出,C口高位输出,C口低位输入,确定8225A控制字并编初始化程序.解:控制字为 =95H初始化程序:MOV DPTR ,#300FH MOV A,#95H MOVX DPTR ,A4. 用89C51的P1口,监测某一按键开关,使每按键一次,输出一个正脉冲(脉宽随意)。编出汇编语言程序。解: ORG 0100H ABC:SETB P1.0SETB P1.7JB PI.7,$JNB P1.7,$CLR P1.0MOV R2,#0 DAY: NOPNOPDJNZ R2,DAYSJMP A

41、BC5. 编制一个循环闪烁的程序。有8个发光二极管,每次其中某个灯闪烁点亮10次后,转到下一个闪烁10次,循环不止。画出电路图。解: MOV A,#01H SHIFT: LCALL FLASHRRASJMP SHIFT FLAH: MOV R2,#0AH FLAH1: MOV P1,A LCALL DELAY MOV P,#00H LCALL DELAY DJNZ R2,FLASH1RET 6. 试编程对8155进行初始化,设A口为选通输出,B口为选通输入,C口作为控制联络口,并启动定时器/记数器按方式1工作,工作时间为10ms,定时器计数脉冲频率为单片机的时钟频率24分频,fosc=12MHz。解:算得初值5000=1388HMOV DPTR,#7F04 ;定时器低八位寄存器地址 DPTRMOV A,#88H ;低8位初值 AMOVX DPTR,A ; 低8位初值 低8位寄存器INC DPTR ;DPTR指向定时器高8位MOV A,#13H ;高8位初值 AMOVX DPTR,A ;高8位初值 高8位寄存器MOV DPTR,#7F00H ;8155命令寄存器地址 DPTRMOV A,0C5H ;命令字 AMOVX DPTR,A ;命令字 命令寄存器7. 设单片机采用8051,未扩展片外ROM,片外RAM采用一片6116,编程将

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论