第二部分
程序分析
一.下列程序段经汇编后,从1000H开始的各有关存储单元的内容是什么?
ORG 1000H
TAB1 EQU 1234H
TAB2 EQU 3000H
DB "MAIN"
DW TAB1,TAB2,70H
答:从1000H开始的各有关存储单元的内容(16进制)如下:
4DH,41H,49H,4EH,12H,34H,30H,00H,00H,70H
二.设(R0)=20H,(R1)=30H,(20H)=20H,(21H)=30H,(22H)=40H,(30H)=E0H,(31H)=50H,(32H)=60H。
CLR C
MOV R2, #3
LOOP: MOV A, @R0
ADDC A, @R1
MOV @R0, A
INC R0
INC R1
DJNZ R2, LOOP
SJMP $
程序执行后,(R0)= 23H
三.已知程序执行前有A=02H,SP=42H,(41H)=FFH,(42H)=FFH。下述程序执行后, A=( );SP=( );(41H)=( );(42H)=( );PC=( )。
POP DPH
POP DPL
MOV DPTR,#3000H
RL A
MOV B,A
MOVC A,@A+DPTR
PUSH Acc
MOV A,B
INC A
MOVC A,@A+DPTR
PUSH Acc
RET
ORG 3000H
DB 10H,80H,30H,80H,50H,80H
答:(A)=80H ,(SP)=40H,(41H)=50H,(42H)=80H ,(PC)=8050H
中断定时器简答题
*中断服务子程序与普通子程序有哪些相同和不同之处?
答:RETI指令在返回的同时自动清除相应的不可寻址的优先级触发器,以允许下次中断,而RET指令则没有这个操作。
除了这一点两条指令不同外,其它操作都相同。
AT89S52单片机响应外部中断的典型时间是多少?在哪些情况下,CPU将推迟对外部中断请求的响应?
答:在一个单一中断的系统里,AT89S51单片机对外部中断请求的响应时间总是在3~8个机器周期之间。
在下述三种情况下,AT89S51将推迟对外部中断请求的响应:
(1)AT89S52正在处理同级或更高优先级的中断。
(2)所查询的机器周期不是当前正在执行指令的最后一个机器周期。
(3)正在执行的指令是RETI或是访问IE或IP的指令。
如果存在上述三种情况之一,AT89S52将丢弃中断查询结果,将推迟对外部中断请求的响应。
中断响应需要满足哪些条件?
答:一个中断源的中断请求被响应,必须满足以下条件:
(1)总中断允许开关接通,即IE寄存器中的中断总允许位EA=1。
(2)该中断源发出中断请求,即该中断源对应的中断请求标志为“1”。
(3)该中断源的中断允许位=1,即该中断被允许。
(4)无同级或更高级中断正在被服务。
*定时器/计数器T1、T0的工作方式2有什么特点?适用于哪些应用场合?
答:方式2为初值自动装入的8位定时器/计数器,克服了在循环定时或循环计数应用时就存在用指令反复装入计数初值影响定时精度的问题。
*THx与TLx(x =0,1)是普通寄存器还是计数器?其内容可以随时用指令更改吗?更改后的新值是立即刷新还是等当前计数器计满后才能刷新?
答:THx与TLx(x = 0,1)是计数器,其内容可以随时用指令更改,但是更改后的新值要等当前计数器计满后才能刷新。
串口简答题(不一定会考)
在异步串行通信中,接收方是如何知道发送方开始发送数据的?
答:实质就是如何检测起始位的开始。
当接收方检测到RXD端从1到0的负跳变时就启动检测器,接收的值是3次连续采样,取其中2次相同的值,以确认是否是真正的起始位的开始,这样能较好地消除干扰引起的影响,以保证可靠无误的开始接受数据。
AT89S51单片机的串行口有几种工作方式?有几种帧格式?各种工作方式的波特率如何确定?
答:有4种工作方式:方式0、方式1、方式2、方式3;
有3种帧格式,方式2和3具有相同的帧格式;
方式0的发送和接收都以fosc/12为固定波特率,
方式1的波特率=2SMOD/32×定时器T1的溢出率
方式2的波特率=2SMOD/64×fosc
方式3的波特率=2SMOD/32×定时器T1的溢出率
假定串行口串行发送的字符格式为1个起始位、8个数据位、1个奇校验位、1个停止位,请画出传送字符“B”的帧格式。
答:字符“B”的ASCII码为“42H”
ADDA(必考)
锯齿波:
ORG 2000H ;伪指令
START: MOV R0,#0FEH ;将立即数FEH给R0
MOV A,#00H ;将立即数0给A
LOOP MOVX @R0,A ;将A(00H)送到片外地址为FEH的单元(写入数据给DAC)
INC A ;A++
SJMP LOOP ;回到 将A送到片外地址为FEH的单元
三角波:(重点掌握)
ORG 2000H
START: MOV R0,#0FEH ;将立即数FEH送给R0
MOV A,#00H ;将立即数0给A
UP : MOVX @R0,A ;将A(00H)送到片外地址为FEH的单元
INC A ;A++
JNZ UP ;JNZ为A非零则转移,A到FFH后再加一为0
DOWN: DEC A ; A--,这里A=0H再减一就到FFH了
MOVX @R0,A ;将A(00H)送到片外地址为FEH的单元
JNZ DOWN
SJMP UP
方波:
org 2000h
start: mov r0,#0feh
loop: mov a,#230
mov @r0,a
lcall delay
mov a,#10
mov @r0,a
lcall delay
ajmp loop
ADC 0809的应用 100us
查询EOC,中断EOC接一个非门到P3.2
写信号:MOVX @DPTR,A
读信号:MOVX A,@DPTR
把8个通道轮流采集一遍
MAIN: MOV R1,#DATA ;置数据区首地址
MOV DPTR,#7FF8H ;DPTR高八位是P2口传输,P2.7为0
;且P0为F8H,就是11111000,CBA为0,指向通道0
MOV R7,#08H
LOOP: MOV @DPTR,A ;启动A/D转化,与A无关,使写信号有效
延时程序:
MOV R6,#0AH;
DELAY: NOP
NOP
NOP
DJNZ R6,DELAY //100us到,采集完毕
MOV A,@DPTR; 读取转换结果
MOV @R1,A ;存储转化结果
INC DPTR ;指向下一个通道
INC R1 ;修改数据区指针
DJNZ R7,LOOP ;8个通道采集完了吗?
中断EOC接一个非门到P3.2
ORG 0000H
SJMP MAIN
ORG 0003H
SJMP INIT1
参考程序:INIT1: SETB IT1;
SETB EA
SETB EX1
MOV DPTR,#7FF8H;
MOV A,#00H
MOV @DPTR,A
...其他任务
INIT1: MOV DPTR,#7FF8H;//CBA为0,指向通道0
MOV A,@DPTR //读
MOV @R1,A //存
MOV A,#00H
MOV @DPTR,A //再次启动A/D转化
RETI
数据传输(必考)
例:将片外RAM 120H单元的内容传送到片外RAM地址为78H的单元。
MOV DPTR,#0120H
MOVX A,@DPTR
MOV R0,#78H
MOVX @R0,A
本文发布于:2024-01-31 14:27:52,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170668247429184.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |