1、(C)CPU中用于存放地址的寄存器称为地址寄存器(D)地址总线上传送的只能是地址信息8、MCS-51外扩一个8255时,需占用(D) 个端口地址(A)1个 (B)2个 (C)3个 (D)4个9、用MCS-51串行口扩展并行I/O口时,串行口工作方式应选择(A)(A)方式0 (B)方式1 (C)方式2 (D)方式310、某种存储器芯片是8KB*4/片,那么它的地址线根数是( C(A) 11根 (B)12根 (C)13根 (D)14根11、以下哪一条指令的写法是错误的( C )。A、MOV DPTR,#3F98H B、MOV R0,#0FEH C、MOV 50H,#0FC3DH D、INC R01
2、2、以下哪一条指令的写法是错误的( D )。A、INC DPTR B、MOV R0,#0FEH C、DEC A D、PUSH A13、以下哪一条指令的写法是错误的( B )。A、MOVC A,A+DPTR B、MOV R0,#FEH C、CPL A D、PUSH ACC二判断题:1、 当89C51的EA引脚接低电平时,CPU只能访问片外ROM,而不管片内是否有程序存储器。 (T)2、 当89C51的EA引脚接高电平时,CPU只能访问片内的4KB空间。 (F)3、 MCS-51系列单片机直接读端口和读端口锁存器的结果永远是相同的。4、 是读端口还是读锁存器是用指令来区别的。5、 在89C51的片
3、内RAM区中,位地址和部分字节地址是冲突的。6、 中断的矢量地址位于RAM区中。7、 在89C51中,当CPU访问片内、外ROM区时用MOVC指令,访问片外RAM区时用MOVX指令,访问片内RAM区时用MOV指令。8、 工作寄存器区不允许做普通的RAM单元来使用。9、 工作寄存器组是通过置位PSW中的RS0和RS1来切换的。10、 特殊功能寄存器可以当作普通的RAM单元来使用。11、 访问128个位地址用位寻址方式,访问低128字节单元用直接或间接寻址方式。12、 堆栈指针SP的内容可指向片内00H7 (F)H的任何RAM单元,系统复位后,SP初始化为00H。13、 DPTR只能当作一个16位
4、的特殊功能寄存器来使用。14、 程序计数器PC是一个可以寻址的特殊功能寄存器。15、 单片机89C51复位后,其PC指针初始化为0000H,使单片机从该地址单元开始执行程序。16、 单片机系统上电后,其内部RAM的值是不确定的。17、在51系列单片机的指令系统中,其加法、减法、乘法和除法必须有累加器A的参与才能完成。(T)18、并行通信的优点是传送速度高,缺点是所需传送线较多,远距离通信不方便。19、串行通信的优点是只需一对传送线,成本低,适于远距离通信,缺点是传送速度较低。20、在异步通信的帧格式中,数据位是低位在前高位在后的排列方式。21、是非题:异步通信中,波特率是指每秒传送二进制代码的
5、位数,单位是b/s。22、在89C51的串行通信中,串行口的发送和接收都是对特殊功能寄存器SBUF进行读/写而实现的。23、在单片机89C51中,串行通信方式1和方式3的波特率是固定不变的。F24、在单片机89C51中,读和写的SBUF在物理上是独立的,但地址是相同的。25、单片机89C51一般使用非整数的晶振是为了获得精确的波特率。26、单片机89C51和PC机的通信中,使用芯片MAX232是为了进行电平转换。三程序分析题:1 ORG 8000H (P56) MOV A, #30H MOVC A, A+PC ORG 8030H DB ABCDEFGHI 执行结果 (A)= D.2 设MOVC
6、指令所在地址(PC)=1FF0H,则偏移量=2000H-(1FF0H+1)=0FH。相应的程序如下:MOV A,#09H ;(A)09HADD A,#0FH ;用加法指令进行地址调整MOVC A,A+PC ;(A)(A)+(PC)+1)执行结果为:(PC)=1FF1H,(A)=51H。3 ORG 1004H MOV A, #10H MOV DPTR, #7000H MOVC A, A+DPTR ORG 7010H DB 02,04,06,08执行结果:(A)=02, PC=100AH. 4设(R1)=20H,(20H)=AAH,则下面程序执行完后A的内容是多少。 MOV A, #55H ANL
7、 A, #0FFH ORL 20H, A XRL A, R1 CPL A(A)=00H5 写出程序功能 ORG 0000H MAIN: MOV DPTR, #TAB MOV R1, #06H LP: MOVX A, DPTR MOV P1, A LCALL DELAY 0.5S INC DPTR DJNZ R1, LP AJMP MAINTAB: DB 01H, 03H, 02H, 06H, 04H, 05HDELAY 0.5S:. RET END程序功能: 将TAB中的6个数据输出到P1口,且每输出一个数延时0.5s。6、以给出的指令操作码为依据,请判断MCS51单片机的下列各条指令的书写格
8、式是否有错误,如有请说明错误原因。1MUL RoRl 乘法指令应使用A、B寄存器操作2MOV A,R7 间接寄存器使用R7有误,间址寄存器只能使用R0、R13MOV A, #3000H 8位累加器A不能接受16位数据4MOVC A+DPTR,A MOVC指令为对程序存储区操作指令,累加器的内容不可通过变址方式送入程序存储器,两操作数写反了。5UMP #1000H 长转移指令中的操作数为16位转移地址,不能用立即数的形式来表达。四 程序设计题1、 T0工作于方式0,要求在P1.0引脚上产生周期为2ms的方波输出(fosc=6MHZ)ORG 0000H AJMP MAIN ORG 000BH AJ
9、MP INQP ORG 0030HMAIN: MOV TMOD, #00H MOV TH0, #0F0H MOV TL0, #0CH SETB TR0 ;启动T0 SETB ET0 ;允许T0中断 SETB EA ;开放CPU中断 AJMP $ ;定时中断等待 ORG 4000H ;中断服务程序INQP: MOV TH0, #0F0H ;重写定时常数 CPL P1.0 ;P1.0变反输出 RETI2 设fosc=12MHz,T0工作于方式1,产生50ms定时中断,TF0为高级中断源。试编写主程序中的初试化程序和中断服务程序,使P1.0产生周期为1秒的方波。(P110)MAIN:MOV SP,
10、#EFH MOV TH0, #3CH MOV TL0, #0B0H MOV TMOD , #1 MOV IP, #2 MOV IE, #82H SETB TR0 MOV 30H, #0AHPTF0:ORL TL0, #0B0H; DJNZ 30H, PTF0R CPL P1.0PTF0R:RETI用查询法: MOV 30H, #0AH MOV TH0, #3CH MOV TL0, #0B0H MOV TMOD, #1L2: JBC TF0, L1 SJMP L2L1:DJNZ 30H, L23 用定时器1在方式2 计数,要求每计满100次,将P1.0端取反。 MOV TMOD, #60H ;
11、设置T1为方式2计数 MOV TH1, #9CH ;赋初值 MOV TL1, #9CH SETB TR1DE: JBC TF1, RE ;查询计数溢出 AJMP DERE: CPL P1.04 用定时器T0,分别产生两个方波,一个周期为200s,另一个周期为400 s,该单片机同时使用串行口,用定时器/计数器作为波特率发生器。(fosc =9.216MHZ)。 ORG 000BH ;TL0中断入口 AJMP ITL0 ORG 001BH ;TH0中断入口 AJMP ITH0 ORG 0100HMOV SP, #60H MOV TMOD, #23H MOV TL0, #0B3H MOV TH0,
12、 #66H MOV TL1,#data ;data是根据波特率 ;要求设置的常数(初值) MOV TH1,#data 启动TL0初值 SETB TR1 ;启动TH0初值 SETB ET0 ;允许TL0中断 SETB ET1 ;允许TH0中断 SETB EA ;CPU中断开放 AJMP $ ORG 0200HITL0:MOV TL0, #0B3H CPL P1.0 ;输出方波200s ITH0:MOV TH0, #66H CPL P1.1 ;输出方波400s 5、利用T0门控位测试INT0引脚上出现的正脉冲的宽度,将所测得值高位存入片内71H单元,低位存入片内70H单元。(fosc=12MHz)
13、测试时,应在/INT0为低电平时,设TR0为1;当/INT0变高时,启动计数;当/INT0再变低时,停止计数。该计数值即被测正脉冲宽度。MOV TMOD , #09H;T0定时器方式,GATE=1MOV TL0, #00HMOV TH0, #00HMOV R0, #70HJB P3.2, $ ;等待P3.2变低SETB TR0 ;启动T0准备工作JNB P3.2, $ ;等待P3.2变高等待P3.2再次变低CLR TR0 ;停止计数MOV R0, TL0 ;存放计数低字节INC R0MOV R0, TH0 ;存放计数高字节SJMP $ 6 编写程序,功能为对串行口初始化为方式1输入/输出,fo
14、sc=11.0592MHZ,波特率为9600,先在串行口上输出字符串“MCS-51”,接着读串行口上输入的字符,又将该字符从串行口上输出。 MOV TMOD, #20H MOV TH1, #0FDH MOV TL1, #0FDH SETB TR1 MOV SCON, #52H MOV R4, #0 MOV DPTR, #TSABLP1: MOV A, R4 MOVC A, A+DPTR JZ LP6LP3: BC TI, LP2 SJMP LP3LP2: MOV SBUF, A INC R4 SJMP LP1LP6: JBC RI, LP5 SJMP LP6LP5: MOV A, SBUFLP
15、8: JBC TI, LP7 SJMP LP8LP7: MOV SBUF, ATSAB: DB MCS-51 DB 0AH,0DH,0 7、89C52串行口按双工方式进行数据收发,要求波特率为1200,串口工作在方式1。编写有关的通信程序。设发送数据区的首地址为20H,接收数据区的首地址为40H,fosc为11.0592MHz。主程序 MOV TMOD ,#20H ;T1设为模式2 MOV TL1 , #0E8H ; MOV TH1 ,#0E8H ; SETB TR1 ;启动定时器1 MOV SCON ,#50H ;设置为方式1,REN=1 MOV R0 ,#20H ;发送数据区首址 MOV
16、R1 ,#40H ;接收数据区首址 ACALL SOUT ;先输出一个字符 SETB ES SETB EA ORG 0023H ;串行口中断入口 AJMP SBR1 ;转至中断服务程序 ORG 0100H SBR1: JNB RI ,SEND ;TI=1,为发送中断 ACALL SIN ;RI=1,为接收中断 SJMP NEXT ;转至统一的出口SEND:调用发送子程序NEXT: RETI ;中断返回发送子程序SOUT: CLR TI MOV A ,R0 ;取发送数据到A INC R0 ;修改发送数据指针 MOV SBUF ,A ;发送 RET ;返回接收子程序 SIN: CLR RI MOV A ,SBUF ;读出接收缓冲区内容 MOV R1 ,A ;读入接收缓冲区 INC R1 ;修改接收数据指针 RET