注释。
解:SETB IT0 ;将TCON中“外部中断信号请求方式位IT0”(8AH)置1,
即:设为下降沿触发方式。
SETB EX0 ;将IE中“外部中断0中断允许位EX0”(AAH)置1,
即:设外部中断源INT0为允许中断。
CLR PX0 ;将IP“外部中断0优先级设定位PX0”(BAH)置0,
即:设外部中断源INT0为低优先级中断源。
SETB EA ;将IE“中断允许总控制位EA”(AFH)置1,
即:将中断允许总控制位开启,让上面的各项设置
全部生效。
3、采用6MHz的晶振,定时1ms,用定时器方式0时的初值应为多少?(请给出计算过程) 解:∵采用6MHZ晶振
∴机器周期为2us
(213-X)×2×10-6=1×10-3
∴X=7692(D)=1E0CH=1 1110 0000 1100(B), 化成方式0要求格式为 1111 0000 1100 B 即0F00CH
综上可知:TLX=0CH, THX=0F0H 4、分析下列程序的功能
PUSH ACC
PUSH B POP ACC POP B
解:该程序的功能是通过累加器ACC与寄存器B数据交换。
5.MCS-51外扩的程序存储器和数据存储器可以有相同的地址空间,
但不会发生数据冲突,为什么? 答:不发生数据冲突的原因是:
MCS-51中访问程序存储器和数据存储器的指令不一样。 选通信号不同,前者为PSEN,后者为WR与RD。
程序存储器访问指令为movc A,@DPTR; movc A,@A+pc。
数据存储器访问指令为:movx A,@DPTR; movx A,@Ri; movx @DPTR,A。
6.下面查表程序中有一个数据表,一个数3在R0中,运行下面查表程序后R1的值。
地址 源程序
ORG 0000H
0000H:MOV A, R0
0001H:MOV DPTR, #TAB 0004H:MOVC A, @A+DPTR 0005H:MOV R1, A 0006H:SJMP $
0008H:TAB:DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
END
7.写出MCS-51的所有中断源,并说明说明哪些中断源在响应中断时,由硬件自动清除,哪些中断源必须用软件清除,为什么? 答:外部中断INTO
定时器/计数器中断T0 外部中断INT1
定时器/计数器中断T1
串行口中断 其中串行口中断TI与RI必须用软件清“0”,因为串口中断的输出中断为TI,输入中断为RI, 必须用软件清“0”。 8.MCS-51采用12MHz的晶振,定时1ms,如用定时器方式1时的初值(16进制数)应为多少?(写出计算过程)
解:采用12MHZ的晶振,Tcy=1/fosc×12=1/12×10-6×12=1us 采用定时器方式1(为16位) 定时1ms 设初值为X,则:(216-X)×1×10-6=1×10-3 则=>X=64536将其转换成二进的为:1111110000011000 再将其转化为16进制数为:FC18 初值为TXH=FCH TXL=18H
9.写出8051单片机中5个中断源的名称和对应的中断服务程序入口地址。
10.写出8051单片机4个并行接口P0口、P1口、P2口和P3口各自
的功能(5分)
11、按下列要求写出相应的指令。
①将外部RAM 5000H内容送内部寄存器R2中。 ② 交换内部RAM 30H和31H中的内容。
22、利用定时器T0产生定时脉冲。每隔2ms产生宽度为2个机器周期的正脉冲,由P1.0输出此定时序列脉冲信号(设时钟频率为6MHZ)。 解:首先求出定时器T0初值。由于时钟频率为6MHZ,所以,机器周期为2μs。
因为:t=(213-T0初值)? 机器周期
所以,当t=2ms时,则:(213-T0初值)? 2?10-6=2?10-3 解得:T0初值=7096=11011101 11000B,其中将高8位11011101 B=DDH赋给TH0,低5位11000B=18H赋给TL0。 方法一:
采用查询工作方式,编程如下: ORG 0000H AJMP MAIN ORG 0100H MAIN: CLR P1.0
MOV TMOD , #00H ;设定T0的工作方式 MOV TH0 , #0DDH ;给定时器T0送初值
MOV TL0 , #18H
SETB TR0 ;启动T0工作
LOOP: JNB TF0 , $ ;$为当前指令指针地址 CLR TF0
SETB P1.0 ;产生2μs正脉冲 CLR P1.0
MOV TH0 , #0DDH ;重装载TH0和TL0 MOV TL0 , #18H SJMP LOOP END 方法二:
采用中断工作方式,编程如下: ORG 0000H AJMP MAIN ORG 000BH AJMP T0INT ORG 0100H MAIN: CLR P1.0
MOV TH0 , #0DDH ;给定时器T0送初值
MOV TL0 , #18H
MOV IE , #82H ;允许T0中断 SETB TR0 ;启动T0 SJMP $ 中断服务程序:

