亲,郭老师说的是在写大型程序时尽量在中断中写的程序不要超过它的中断时间,那样的话中断程序还没有运行完就结束了。你没有认真听讲,你走思了老弟,多看几遍视频,在看看郭老师的书
呵呵,对单片机比较熟悉,我来回答一下。
1)选 B.PSW
2)选 C.P2
3)选 C.方式2
4)选 A.在片内RAM
5)选 A.-3.6V~-25V,我们书上是说-3V~-15V为逻辑1
7)不太懂什么意思,没写明白
11)有5个中断源
13)不知道
17)8051片内RAM有128字节,地址范围为00H-7FH。其中,低32个单元用作工作寄存器。20H-2FH这16个单元是位寻址区。后面80个单元是通用数据缓冲区。
18)ROM即只读存储器,是一种写入信息后不易改变的存储器。断电后,ROM中的信息不会丢失。分类:掩膜ROM,用户程序由芯片生产厂写入;EPROM,用户程序通过写入装置写入,通过紫外线照射擦除;FlashROM,用户程序可以电写入或擦除。
19)定时时间与装的初值、工作方式、晶振频率有关。
下面的题目回答起来好难,而且我编程一般用C语言,很少用汇编,就不太熟了。
第一题:
(20H)=20H,(21H)=91H,(22H)=A0H,(23H)=01H
Cy=0, A=0A0H, R0=23H, R1=28H
至于第二题吗,你们老师可真变态,好好的SUBB不让用,要用CJNE
程序如下:
;BLOCK为地址起始位
;LEN为数据数量位
;MINI为最小数据
整个编程的思路是这样的:
先设一个基准数,从最大的0FF设起,再把这些数据与基准数比较是否一致,如果一致,则先把这个数(也就是基准数)存起来,这一行就不用再往下比较了。然后把基准数减一,再执行上面的程序,如果亦有相同的,则把现在的基准数存起来,覆盖原来存的数据。就这样一直减,减到0后,停止,存起来的最后一个基准数就是最小值。
MOV R0, #BLOCK ;将地址起始位置存入R0中
MOV R1, #MINI ;将最后结果存储地址存入R1中
MOV R2, LEN ;数据数量
MOV R3, #0FFH ;比较的基准数
LOOP:
MOV A, @R0 ;读入数据
CJNE A, 03H, NEXTLOOP ;和基准数相比较,不等于则转移
MOV A, @R0 ;等于基准数了,先存起来,如果将基准数减小后,再没有和基准数相等的了,那么这个数就是最小的。
MOV @R1, A
CLR C
MOV A, R3 ;如果基准数已经减到00H了,那么,就不用再减一比较了,因为已经从0FF开始至00结束,全比较过了
JZ WAIT
SUBB A, #01H ;基准数减1
MOV R3, A
MOV R0, #BLOCK
MOV R1, #MINI
MOV R2, LEN
LJMP LOOP
NEXTLOOP:
INC R0
DJNZ R2, LOOP
WAIT:
LJMP $
按你的修改,再修改结果
(20H)=20H,(21H)=91H,(22H)=0D0H,(23H)=00H
Cy=0, A=0D0H, R0=22H, R1=28H
单片机的最后一题的介绍就聊到这里吧,感谢您花时间阅读,谢谢。
本文标签:单片机的最后一题