第一章:
一、填空题
1. 1110 0EH 10011100 01100100
2. 4
3. 255 -51
4. 输入设备
5. 84
6. 630 * 8 * 1024
7. 位 字节 字 bit btype word
8. 1111 1111 00100100 11011011
9. 110 89 -115 -50
二、单选:
DBCAB BBCB
第二章:
一、填空
1.堆栈实现子程序调用(1. PC PC )
2.80C51时钟电路两部分( 反向器 )( 晶振 两只电容) 短
3.单片机两种复位操作 (加电复位) (手动复位) 复位后PC值:(0000H) SP值:07H 通用寄存器当前组为:第0
地址范围:00H~07H
4.80C51单片机一个机器周期包含 :6个机器状态 一个状态为 2个节拍 一个节拍为1个震荡脉冲周期 一个机器周期包含12个脉冲周期
5.80C51唯一用户可使用的16位寄存器是:DPTR 可以拆分为两个8位 :DPH :DPL
6.程序存储器寻址范围由PC位数决定,16位PC寻址范围 64KB
单选题
DCCAC AD
第三章:
一、填空题:
1. 1031
2. 34H 1 1 1
3. (P1.0^P1.1)^(~p1.2) 上面逻辑反
4. 1100H(AJMP 加2高位补0)
5. 2
6. 30H 71H
0A5H
0A5H
75H
0A7H
0AAH 0 1
IFH 1 1
0AAH 0 1
20H 1 0
0D5H 1 1
49H 0 0
二、单选题
CCBDCA
三、其它类型题
错 错 对
错 错 错
对 错 错
错 错 对
对 对 对
错 对 对
错 对 错
错 对
(三)其它类型题
2. ① D=(~10HνP1.0) Λ (11HνCY)
MOV C P1.0
ORL C /10H
MOV B 11H
ORL B CY
② E =ACC.2ΛP2.7νACC.1ΛP2.0
3.编写程序将RAM20H-23H单元的高4位写1,低4位写0。
分析:就是把这四个单元写入F0H。用一个DJNZ的循环。
ORG 0000H
MOV R0,#1FH;R0指向20H单元
MOV R5,#04H; 四个数
LOOP: INC R0
MOV @R0,#0F0H; 写入
DJNZ R5,LOOP; 循环4次
END
4.把m和m+1单元存有两个BCD数,将它们合并到m单元中,编写程序完成。
(设m=30H,高位在30H,低数在31H)
ORG 0000H
MOV A,30H
ANL A,#0FH ;把它的高四位清零
SWAP A
MOV 30H ,A ;高低四位调一下,放回原处
MOV A,31H
ANL A,#0FH
ORL A,30H ;合并起来
MOV 30H,A
END
5.将内部RAM中从data单元开始的10个无符号数相加,其和送sum单元多,假定相加结果小于255。编写程序完成。
(设data=30H, sun =50H)
ORG 0000H
MOV R0,#2FH ;指向前一个单元
MOV R5,#0AH ;循环10次
CLR A ;先加到A中
LOOP:INC R0
ADD A,@R0
DJNZ R5,LOOP
MOV 50H,A
END
6.假定8位二进制带符号数丰于R0中,要求编写一个求补程序,所得补码入入R1中。
ORG0000H
MOV A,R0
CPL A ;按位取反
ADD A,#01H ;+1
MOV R1,A
END
第四章:
一、填空题
1.假定A=40H,R1=23H,40H=05H。执行以下指令后A=()、R1=()、40H=():
XCH A, R1
XCHD A, @R1
25H 40H 03H
2.2.914ms
3.略
4.(A) =((30H) (A) >(30H) (A) < (30H)
5. 32.87ms
编程题
1.把长度为10H的字符串从内部RAM的输入缓冲区inbuf向位物外部RAM的输出缓冲区outbuf传送,一直进行到遇见回车或整个字符串传送完毕。试编程实现。
ORG 0030H
MOV R0,#inbuf
MOV R1,#outbuf
MOV R4,#10H
LOOP:MOV A,@R0 ; 从内部RAM取数
CJNE A,#0DH,LL ;是否为回车符CR
SJMP STOP ;是转停止传送
LL: MOVX @R1,A ;不是则传送到外部RAM
INC R0
INC R1
DJNZ R4,LL;沒传送完则循环
STOP: SJMP $
2、内部RAM从list单元开始存放一正数表,表中之数作无序排列,并以“-1”作结束标志。编程实现在表中找出最小数。
(3AH存放在运行程序时的最小的数)
ORG 0030H
MOV R0,#list
MOV A,@R0 ;取第一个正数
LOOP: INC R0 ;指向下一个正数
MOV 3AH,@R0
CJNEA,3AH,CHK ;前一个数与后一个数比较
CHK: JC LOOP1 ;前一个数小,则转
MOV A,@R0 ;前一个数大,取后一个数
LOOP1: XCH A,3AH
CJNE A,#0FFH,LOOP
XCH A,3AH ;取最小数
MOV 3BH,A
SJMP $
3.内部RAM的X,Y 单元中各存放一个带符号的数,试编程实现按如下条件进行的运算,并将结果存入Z单元中。
若X为正奇数,Z =X+Y;
若X为正偶数,Z =X∨Y;
若X为负奇数,Z =X∧Y;
若X为负偶数,Z =X⊕Y。
分析:负数:第7位为1,正数:第7位为0
奇数:第0位为1,偶数:第0位为0
ORG 0000H
MOV A,20H
CLR C
RL A
JC FS ;移到负数处处理
RR A
RR A ;第0位移到C 再判定一下是不是1
JC ZJS ;到正奇数处
MOV A,20H
ORL A,21H
MOV 22H,A
SJMP OK
ZJS: MOV A,20H
ADD A,21H
MOV 22H,A
SJMP OK
FS: MOV A,20H
CLR C
RR A
JC FJS ;第0位是1,移到正 奇数处理
MOV A,20H
XRL A,21H
MOV 22H,A
SJMP OK
FJS: MOV A,20H
ANL A,21H
MOV 22H,A
OK: END
4、把一个8位二进制数的各位用ASCII码表示之(亦即为“0”的位用30H表示,为“1”的位用31H表示)。该数存放在内部RAM中byte单元中。变换后得到的8个ASCII码存放在外部RAM以buf始的存储单元中去。
ORG 0030H
MOV R0,#byte
MOV DPTR,#buf
MOV R5,#08H
MOV A,@R0
LOOP: RLC A
MOV R7,A
JC LOOP1
MOV A,#30H
SJMP LOOP2
LOOP1: MOV A,#31H
LOOP2: MOVX @DPTR,A
MOV A,R7
INC DPTR
DJNZ R5,LOOP
5.编程实现运算式c = a2+b2 假定a、 b、 c 3个数分别存放在内部RAM的DA、DB、DC单元中,别有平方运算子程序调用。
(内部RAM的DA、DB、DC单元设为20H 21H 22H)
ORG 0000H
MOV A,20H
PUSH ACC
AJMP SQR
POP ACC
MOV 22H,A
MOV A,21H
PUSH ACC
AJMP SQR
POP ACC
ADD A,22H
MOV 22H,A
END
6、比较两个ASCII码字符串是否相等。字符串的长度在内部RAM 41H单元,第一个字符串的首地址为42H,第二个字符串的首地址为52H。如果两个字符串相等,则置内部RAM 40H单元为00H;否则置40H单元为FF。
ORG 0030H
MOV R0,#42H
MOV R1,#52H
MOV R7,41H ;字符串长度
LOOP: MOV A,@R0
MOV 30H,@R1
CJNE A,30H,LK
INC R0
INC R1
DJNZ R7,LOOP
MOV 40H ,#00H
SJMP DD
LK: MOV 40H,#0FFH
DD: SJMP DD
7.外部RAM首址为table的数据表中,有10个字节的数据。编程将每个字节的最高位无条件地置“1”。
ORG 0030H
MOV DPTR,#table
MOV R6,#10
LOOP:MOVX A,@DPTR
SETB E7H;E7H就是累加器A的最高位(ACC.7), 也可 : SETB ACC.7
MOVX @DPTR,A
INC DPTR
DJNZ R6,LOOP
3.编写程序将RAM20H-23H单元的高4位写1,低4位写0。
分析:就是把这四个单元写入F0H。用一个DJNZ的循环。
ORG 0000H
MOV R0,#1FH;R0指向20H单元
MOV R5,#04H; 四个数
LOOP: INC R0
MOV @R0,#0F0H; 写入
DJNZ R5,LOOP; 循环4次
END
4.把m和m+1单元存有两个BCD数,将它们合并到m单元中,编写程序完成。
(设m=30H,高位在30H,低数在31H)
ORG 0000H
MOV A,30H
ANL A,#0FH ;把它的高四位清零
SWAP A
MOV 30H ,A ;高低四位调一下,放回原处
MOV A,31H
ANL A,#0FH
ORL A,30H ;合并起来
MOV 30H,A
END
5.将内部RAM中从data单元开始的10个无符号数相加,其和送sum单元多,假定相加结果小于255。编写程序完成。
(设data=30H, sun =50H)
ORG0000H
MOV R0,#2FH ;指向前一个单元
MOV R5,#0AH ;循环10次
CLR A ;先加到A中
LOOP:INC R0
ADD A,@R0
DJNZ R5,LOOP
MOV 50H,A
END
6.假定8位二进制带符号数丰于R0中,要求编写一个求补程序,所得补码入入R1中。
ORG0000H
MOV A,R0
CPL A ;按位取反
ADD A,#01H ;+1
MOV R1,A
END
第四章:
一、填空题
1. 25H 40H 03H
2.2.914ms
3.略
4.(A) =((30H) (A) >(30H) (A) < (30H)
5. 32.87ms
编程题
1.把长度为10H的字符串从内部RAM的输入缓冲区inbuf向位物外部RAM的输出缓冲区outbuf传送,一直进行到遇见回车或整个字符串传送完毕。试编程实现。
ORG 0030H
MOV R0,#inbuf
MOV R1,#outbuf
MOV R4,#10H
LOOP:MOV A,@R0 ; 从内部RAM取数
CJNE A,#0DH,LL ;是否为回车符CR
SJMP STOP ;是转停止传送
LL: MOVX @R1,A ;不是则传送到外部RAM
INC R0
INC R1
DJNZ R4,LL;沒传送完则循环
STOP: SJMP $
2、内部RAM从list单元开始存放一正数表,表中之数作无序排列,并以“-1”作结束标志。编程实现在表中找出最小数。
(3AH存放在运行程序时的最小的数)
ORG 0030H
MOV R0,#list
MOV A,@R0 ;取第一个正数
LOOP: INC R0 ;指向下一个正数
MOV 3AH,@R0
CJNE A,3AH,CHK ;前一个数与后一个数比较
CHK: JC LOOP1 ;前一个数小,则转
MOV A,@R0 ;前一个数大,取后一个数
LOOP1: XCH A,3AH
CJNE A,#0FFH,LOOP
XCH A,3AH ;取最小数
MOV 3BH,A
SJMP $
3.内部RAM的X,Y 单元中各存放一个带符号的数,试编程实现按如下条件进行的运算,并将结果存入Z单元中。
若X为正奇数,Z =X+Y;
若X为正偶数,Z =X∨Y;
若X为负奇数,Z =X∧Y;
若X为负偶数,Z =X⊕Y。
分析:负数:第7位为1,正数:第7位为0
奇数:第0位为1,偶数:第0位为0
ORG 0000H
MOV A,20H
CLR C
RL A
JC FS ;移到负数处处理
RR A
RR A ;第0位移到C 再判定一下是不是1
JC ZJS ;到正奇数处
MOV A,20H
ORL A,21H
MOV 22H,A
SJMP OK
ZJS: MOV A,20H
ADD A,21H
MOV 22H,A
SJMP OK
FS: MOV A,20H
CLR C
RR A
JC FJS ;第0位是1,移到正 奇数处理
MOV A,20H
XRL A,21H
MOV 22H,A
SJMP OK
FJS: MOV A,20H
ANL A,21H
MOV 22H,A
OK: END
4、把一个8位二进制数的各位用ASCII码表示之(亦即为“0”的位用30H表示,为“1”的位用31H表示)。该数存放在内部RAM中byte单元中。变换后得到的8个ASCII码存放在外部RAM以buf始的存储单元中去。
ORG 0030H
MOV R0,#byte
MOV DPTR,#buf
MOV R5,#08H
MOV A,@R0
LOOP:RLC A
MOV R7,A
JC LOOP1
MOV A,#30H
SJMP LOOP2
LOOP1: MOV A,#31H
LOOP2: MOVX @DPTR,A
MOV A,R7
INC DPTR
DJNZ R5,LOOP
5.编程实现运算式c = a2+b2 假定a、 b、 c 3个数分别存放在内部RAM的DA、DB、DC单元中,别有平方运算子程序调用。
(内部RAM的DA、DB、DC单元设为20H 21H 22H)
ORG 0000H
MOV A,20H
PUSH ACC
AJMP SQR
POP ACC
MOV 22H,A
MOV A,21H
PUSH ACC
AJMP SQR
POP ACC
ADD A,22H
MOV 22H,A
END
6、比较两个ASCII码字符串是否相等。字符串的长度在内部RAM 41H单元,第一个字符串的首地址为42H,第二个字符串的首地址为52H。如果两个字符串相等,则置内部RAM 40H单元为00H;否则置40H单元为FF。
ORG 0030H
MOV R0,#42H
MOV R1,#52H
MOV R7,41H ;字符串长度
LOOP: MOV A,@R0
MOV 30H,@R1
CJNE A,30H,LK
INC R0
INC R1
DJNZ R7,LOOP
MOV 40H ,#00H
SJMP DD
LK: MOV 40H,#0FFH
DD: SJMP DD
7.外部RAM首址为table的数据表中,有10个字节的数据。编程将每个字节的最高位无条件地置“1”。
ORG 0030H
MOV DPTR,#table
MOV R6,#10
LOOP:MOVX A,@DPTR
SETB E7H;E7H就是累加器A的最高位(ACC.7), 也可 : SETB ACC.7
MOVX @DPTR,A
INC DPTR
DJNZ R6,LOOP
第五章
一、填空题
1. 各项任务
2. INT0 T0 INT1 T1 串口
3. PC PC ROM
4. 中断源 查询状态
5. 1000000 1000000/65536= 15.26
6. 100 ms
7. 111 101
8. T1 2 0FFH 001BH
二、单选题:
DCAADCD
单片机基础 第五章 习题
课本5。.1设单片机的晶振频率为6MHZ,使用定时器1以方式0产生500us的等宽正方波连续脉冲,并由P1.0输出。
分析:使用P1.0输出脉冲,可由定时器产生一个250us的定时,到了时间,就执行CPL P1.0就可以了。所以问题转化为产生定时。
解:(1) 计算定时器的初值:
(213-X)* T机 = T定时
代入数据得:X = 8067
由于方式0的特点(高8位,低5位),计算出TH1,TL1
得TH1 = 0FCH TL1 = 03H
(2) 计算出TMOD的初始值:
TMOD =00H
(3) 编程实现:
方法一:使用查询法。程序不断地查询TF1的值。如定时器溢出(TF1=1),则CPL P1.0
所以: MOV TMOD ,#00H
MOV TH1,#0FCH
MOV TL1,#03H
MOV IE, #00H ;不用中断的方法,关掉
SETB TR1 ;开启定时器
LOOP: JBC TF1,LOOP1
AJMP LOOP
LOOP1: MOV TH1,#0FCH
MOV TL1,#03H
CPL P1.0
AJMP LOOP
方法二:使用中断的方法。需确定寄存器:TMOD = 00H
IE =88H TCON =40H (或SETB TR1)
T1的中断向量=001BH
程序如下:
ORG 0000H
AJMP MAIN
ORG 001BH
AJMP T1_TIMER
MAIN:MOV TMOD,#00H
MOV TCON,#40H
MOV IE,#88H
MOV TCON ,#40H
MOV TH1,#0FCH
MOV TL1,#03H
Here :AJMP Here
T1_TIMER: MOV TH1,#0FCH
MOV TL1,#03H
CPL P1.0
RETI
注意:定时器定时或计数,不会影响CPU的工作。
定时方式1:与方式0没有大的区别,只有定时器是16位的。所以
定时=(2x –初值) T机
方式2:8位初值自动赋值的定时/计数器
解法一样:
(1)计算T的初始值 (2) TMOD =?
(2)程序设计
方式三:
T0:
――TL0 8位,可作定时也可作计数,与方式0,一样使用。
――TH0:8位,只能作定时,借作TR1 TF1
T1:没法中断,只能产生不断的脉冲,--全波特率
可用方式0,1,2。如要停止脉冲,要强制设方式3
第六章
一、填空题
1、 8 16 13 2
2、 高电平 低电平 高阻
3、 256 数据 4KB 程序 64KB 数据 64KB 程序
4、 16 P0 P2
5、 PSEN RD WR ALE CE ALE 6
6、 16KB 31FFH
7、 外存
8、 片选
9、 3 PSEN ALE
二、单选题
DADDC ADA
第七章
填空题
1. 数据 ALE RD WR
2. 无条件传送 查询 中断
3. 缓冲 锁存
4. 12 11
5. 高 口方式定义 C位置位/复位
6. 方式1输出 方式1输出 输出 输入
7. 10100111
单选题
DACDBB