(1)程序、数据。
(2)试编写一个程序(例如将05H和06H拼为56H),设原始数据放在片外数据区2001H、2002H单元中,按顺序拼装后的单字节数放入2002H单元。
解:本题主要考察了对外部存储器的读、写操作,读者只要记住正确使用MOVX指令就可以了。编程思路:首先读取2001H的值,保存在寄存器A中,将寄存器A的高4位和低4位互换,再屏蔽掉低4位然后将寄存器A的值保存到30H中,然后再读取2002H的值,保存在寄存器A中,屏蔽掉高4位,然后将寄存器A的值与30H进行或运算,将运算后的结果保存在2002H中。
ORG 0000H
MAIN: MOV DPTR,#2001H ;设置数据指针的初值
MOVX A,@DPTR ;读取2001H的值
SWAP A
ANL A,#0F0H ;屏蔽掉低4位
MOV 30H,A ;保存A
INC DPTR ;指针指向下一个
MOVX A,@DPTR ;读取2002H的值
ANL A,#0FH ;屏蔽掉高4位
ORL A,30H ;进行拼装
MOVX @DPTR,A ;保存到2002H
END
(3)80H。
(4)编写程序,将外部数据存储器中的4000H~40FFH单元全部清零。
解:本题主要考察了对外部数据块的写操作,编程时只要注意循环次数和MOVX指令的使用就可以了。
ORG 0000H
MAIN: MOV A,#0 ;送预置数给A
MOV R0,#0FFH ;设置循环次数
MOV DPTR,#4000H ;设置数据指针的初值
LOOP: MOVX @DPTR,A ;当前单元清零
INC DPTR ;指向下一个单元
DJNZ R0,LOOP ;是否结束
END
(5)在MCS-51单片机系统中,外接程序存储器和数据存储器共16位地址线和8位数据线,为何不会发生冲突?
解:因为控制信号线的不同。
外扩的RAM芯片既能读出又能写入,所以通常都有读/写控制引脚,记为 和。外扩RAM的读、写控制引脚分别与MCS-51的和引脚相连。
外扩的EPROM在正常使用中只能读出,不能写入,故EPROM芯片没有写入控制引脚,只有读出引脚,记为,该引脚与MCS-51单片机的相连。
(6)解:本题的答案是3,4。
(7)片选。
(8)16。
(9)程序,数据。
(10)2KB,14。
分析:通过总结所学知识,我们得到以下几个信息,2KB的存储器需要11根地址线,地址为0000H~07FFH;4KB的存储器需要12根地址线,地址为0000H~0FFFH;8KB的存储器需要13根地址线,地址为0000H~1FFFH;16KB的存储器需要14根地址线,地址为0000H~3FFFH;32KB的存储器需要15根地址线,地址为0000H~7FFFH;64KB的存储器需要16根地址线,地址为0000H~FFFFH(以上存储器的首地址均默认为0000H)。
(11)9FFF。
分析:由上题总结得出,32KB RAM存储器的大小为0000H~7FFFH,所以只要在后面加上2000H即得到正确答案。
(12)现有8031单片机、74LS373锁存器、一片2764EPROM和两片6116RAM,请使用它们组成一个单片机系统,要求:
① 画出硬件电路连线图,并标注主要引脚。
② 指出该应用系统程序存储器空间和数据存储器空间各自的地址范围。
解:① 电路图如图A-1所示。
② 2764的地址为C000H~DFFFH。
第一个6116的地址为A000H~A7FFH。
第二个6116的地址为6000H~67FFH。
事实上,由于采用的是线选法,导致了地址不连续,地址空间利用不充分。建议在实际工作中要具体情况具体分析,在两种地址分配中选一种较好的来应用。
(1)编写出外部中断1为跳沿触发的中断初始化程序。
答:
SETB IT1
SETB EX1
SETB EA
(2)D。
(3)ACD。
(4)中断服务子程序返回指令RETI和普通子程序返回指令RET有什么区别?
答:RETI指令在返回的同时清除相应的优先级触发器,以允许下次中断。
(5)某系统有3个外部中断源1、2、3,当某一中断源变为低电平时,便要求CPU进行处理,它们的优先处理次序由高到低依次为3、2、1,中断处理程序的入口地址分别为1000H、1100H、1200H。试编写主程序及中断服务程序(转至相应的中断处理程序的入口即可)。
答:若仅在/INT0引脚接3个外部中断源,则编写程序如下:
ORG0000H
LJMP MAIN
ORG0003H
LJMP INT_EX0
ORG0030H
MAIN: CLR IT0 ;采用低电平有效中断
SETB EX0 ;允许外部中断0
SETB EA
; 插入用户程序
WAIT: MOVPCON,#01H ;单片机进入休眠方式等待中断
NOP
LJMP WAIT
;以下为外部中断0服务子程序
INT_EX0:JNB P1.0,NEXT1 ;判断是不是1号中断
LJMP INT_IR1 ;跳转到1号中断处理程序
NEXT1: JNB P1.1,NEXT2 ;判断是不是2号中断
LJMP INT_IR2 ;跳转到2号中断处理程序
NEXT2: LJMP INT_IR3 ;跳转到3号中断处理程序
ORG1000H
INT_IR1:
;插入相应中断处理程序
RETI ;中断返回
ORG1100H
INT_IR2:
;插入相应中断处理程序
RETI ;中断返回
ORG1200H
INT_IR3:
;插入相应中断处理程序
RETI ;中断返回