单片微型计算机原理与接口技术字符串截取指令
1、题目:80C51单片微机芯片引脚第二功能有哪些?
答:80C51单片机的P0、P2和P3引脚都具有第二功能。
第一功能第二变异功能
P0.0~P0.7 地址总线A0~A7/数据总线D0~D7
P2.0~P2.7 地址总线A8~A15
P3.0 RXD(串行输入)
P3.1 TXD(串行输入)
P3.2 INTO(外部中断0)
P3.3 INT1(外部中断1)
P3.4 TO(定时器/计数器0的外部输入)
P3.5 T1(定时器/计数器0的外部输出)
P3.6 WR(外部数据存储器或I/O的写选通)
P3.7 RD(外部数据存储器或I/O的读选通)
2、题目:80C51存储器在结构上有何特点?在物理上和逻辑上各有哪几种地址空间?访问片内RAM和片外RAM的指令格式有何区别?
答:80C51单片机采用哈佛(Har-yard)结构,即将程序存储器和数据存储器截然分开,分别进行寻址。不仅在片内驻留一定容量的程序存储器和数据存储器及众多的特殊功能寄存器,而且还具有较强的外部存储器扩展能力,扩展的程序存储器和数据存储器寻址范围都可达到64KB。
1.在物理上设有4个存储器空间
片内程序存储器
片外程序存储器
片内数据存储器
片外数据存储器
2.在逻辑上设有3个存储器地址空间
片内、片外统一的64KB程序存储器地址空间
片内256字节(80C52为384字节)数据存储器地址空间
片内数据存储器空间在物理上又包含两部分:
-对于80C51型单片机,0~127字节为片内数据存储器空间;128~255字节为特殊功
能寄存器(SFR)空间(实际仅占用了20多个字节)
-对于80C52型单片机,0~127字节为片内数据存储器空间; 128~255字节共128
个字节是数据存储器和特殊功能寄存器地址重叠空间。
片外64KB的数据存储器地址空间。
在访问3个不同的逻辑空间时,应采用不同形式的指令,以产生不同存储空间的选通信号。访问片内RA
M采用MOV指令,访问片外RAM则一定要采用MOVX指令,因为MOVX指令会产生控制信号RD或WR,用来访问片外RAM。访问程序存储器地址空间,则应采用MOVC指令。
3、题目:80C51片内RAM低128单元划分为哪4个主要部分?各部分主要功能是什么?答:80C51片内RAM的低128个存储单元划分为4个主要部分:
寄存器区。共4组寄存器,每组8个存储单元,各组以R0~R7作为单元编号。常用于
保存操作数及中间结果等。R0~R7也称为“通用工作寄存器”,占用00H~1FH共32个单元地址。
位寻址区。单元地址为20H~2FH,既可作为一般RAM单元使用,按字节进行操作,也可对单元中的每一位进行位操作。因此,称为“位寻址区”。寻址区共有16个RAM单元,共计128位,位地址为00H~7FH。
用户RAM区。在内部RAM低128单元中,出去前面两个区,剩下80个单元,单元地址为30H~7FH。在用户RAM区内可以设置堆栈区。
堆栈区及堆栈指示器SP。其具体功能有两个:保护断点和保护现场。在80C51单片微机中,堆栈在子程序调用和中断时会把断点地址自动进栈和出栈,还有对堆栈的进栈和出栈的指令(PUSH、POP)操作,用于保护现场和恢复现场。
4、题目:已知(R1)=20H,(20H)=AAH,请写出执行完下列程序段后A的内容。
MOV A,#55H
ANL A,#0FFH
ORL 20H,A
XRL A,@R1
CPL    A
答:MOV A,#55H ;(A)=55H
ANL A,#OFFH ;(A)=55H
ORL 20H,A;(20H)=FFH
XRL A,@R1 ;(A)=AAH
CPL A;(A)=55H
执行完程序后,A的内容为55H。
5、题目:阅读下列程序,说明其功能。
MOV P0,#30H
MOV A,@R0
RL    A
MOV R1,A
RL    A
RL    A
ADD A,R1
MOV @RO,A
答:MOV P0,#30H ;(RO)=30H
MOV A,@R0 ;取数
RL A;(A)×2
MOV R1,A;
RL A;(A)×4
RL A;(A)×8
ADD A,R1 ;(A)×10
MOV @RO,A;存数
6、题目:把长度为10H的字符串从内部RAM的输入缓冲区inbuf向设在外部RAM的输出缓冲区outbuf进行传送,一直进行到遇见回车字符“CR”结束传送或整个字符串传送完毕。
加上必要伪指令,并加以注释。
答:ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:MOV R7,#10H ;数据长度
MOV R0,#INBUF ;源数据首地址
MOV DPTR,#OUTBUF ;目的数据首地址
LOOP:MOV A,@R0 ;把源数据的值赋给A
CJNE A,#0DH,LOOP1 ;判断是否为“CR”(ASCII码值为0DH)
SJMP END1 ;是“CR”,则结束传送LOOP1:MOVX @DPTR,A;把A的值赋给目的数据
INC R0 ;源数据下一个地址值
INC DPTR ;目的数据下一个地址值
DJNZ R7,LOOP ;判断数据传送是否完毕END1:SJMP END1
END
7、题目:比较两个ASCII码字符串是否相等。字符串的长度在内部RAM的20H单元,第一个字符串的首地址在30H中,第二个字符串的首地址在50H中。如果两个字符串相等,则置用户标志F0为0;否则置用户标志F0为1。加上必要的伪指令,并加以注释。(注:每个ASCII码字符串为一个字节,如ASCII码“A”表示为41H)
答:字符串中每一个字符都可以用一个ASCII码表示。只要有一个字符不相同,就可以判断字符串不相等。
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:MOV R0,#30H ;第一个字符串的首地址
MOV R1,#50H ;第二个字符串的首地址LOOP:MOV A,@R0 ;第一个字符串的字符值赋给A MOV B,@R1 ;第二个字符串的字符值赋给B
CJNE A,B,NEXT ;两个字符值比较
INC R0
INC R1
DJNZ 20H,LOOP ;判断字符串是否比较完
CLR F0 ;字符串相等,则F0位清0
SJMP $
NEXT:SETB F0 ;字符串不等,则F0位置1 SJMP $
END
例如:(20H)=03H,(30H)=41H,(31H)=42H,(32H)=43H,(50H)=41H,(51H)=42H,(52H)=43H。两个字符串均为“ABC”
执行结果:F0=0
8、从内部RAM的31H单元开始存放一组8位带符号数,字节个数在30H中。请编写程序
统计出其中正数、零和负数的数目,并把统计结果分别存入20H、21H和22H三个单元中。加上必要的伪指令,并加以注释。
答:程序如下:
LENGTH EQU 30H ;数据长度
DA TA_ADR EQU 31H ;数据首地址
POS_NUM EQU 20H ;正数个数
ZERO_NUM EQU 21H ;0个数
NEG_NUM EQU 22H ;负数个数
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:MOV POS_NUM,#0 ;计数单元初始化为0 MOV ZERO_NUM,#0
MOV NEG_NUM,#0
MOV R1,#LENGTH ;数据长度
MOV R0,#DA TA_ADR ;数据首地址LOOP:MOV A,@R0
JB ACC.7,INC_NEG ;符号位为1,该数为负数,跳转加1
CJNE A,#0,INC_POS
INC ZERO_NUM ;该数为0,0个数加1
AJMP LOOP1
INC_NEG:INC NEG_NUM ;负数个数加1
AJMP LOOP1
INC_POS:INC POS_NUM ;该数为正数,正数个数加1
LOOP1:INC R0 ;判断统计是否结束
DJNZ R1,LOOP
END
例如:已知(30H)=08H,31H单元起存放数据为00H,80H,7EH,6DH,2FH,34H,EDH,FFH。
执行结果:(20H)=04H,(21H)=01H,(22H)=03H。
9、根据8100H单元中的值X,决定P1口引脚输出为:
2X X﹥0
P1={80H        X=0(-128D≤X≤63D)
X变反X﹤0
答:程序如下:
ORG      000H
SJMP      BEGIN
ORG      0030H
BEGIN:  MOV      DPTR, #8100H
MOVX      A,@DPTR
MOV      R2,A
JB        ACC.7,SMALLER        ;有符号数<0
SJMP      UNSIGNED              ;无符号数≥0
SMALLER  DEC      A                    ;X<0,输出-X(先减1,再取反)
CPL      A
MOV      P1,A
SJMP      OK
UNSIGNED:CJNE      A,#00H,BIGGER        ;不等于0即大于0
MOV      P1,#80H              ;X等于0,输出80H
SJMP      OK
BIGGER:  CLR      C                    ;X大于0,输出A×2
RLC      A                    ;A×2
MOV      P1,A
OK:      SJMP      $
END
例如:输入55H,P1口引脚输出AAH;输入00H,P1口引脚输出80H;输入F1(-15的补码),P1口引脚输出0FH。
10、在80C51单片微机系统中,已知时钟频率为6MHz,选用定时器T0方式3,请编程使P1.0和P1.1引脚上分别输出周期为2ms和400us的方波。加上必要的伪指令,并对源程序加以注释。
答:机器周期为2μs,定时分别为2ms和400μs。
计算:400μs定时,400μs=(2—TC)×2μs,TC=38H。
程序如下:
ORG      0000H
0000 0130        AJMP      MAIN
ORG      000BH        ;定时器TO中断矢量
000B 2100        AJMP      TIME
MAIN:
0030 7805        MOV      R0,#05H
0032 758903      MOV      TMOD,#03H    ;TO方式3,定时器中断
0035 758A38      MOV      TL0,#38H      ;TL0定时400μs
0038 D28C        SETB      TR0          ;开启定时器TL0
003A C28E        CLR      TR1
003C D2A9        SETB      ET0          ;开定时器TL0中断
003E D2AF        SETB      EA
0040 80FE        SJMP      $            ;中断等待
ORG      0100H
TIME:
0100 758A38      MOV      TL0,#38H      ;TL0定时400μs
0103 B291        CPL      P1.1          ;400μs定时到,P1.1输出变反
0105 D804        DJNZ      R0,RETURN
0107 7805        MOV      R0,#05H
0109 B290        CPL      P1.0          ;400μs×5=2ms到,P1.0输出变反
RETURN:
010B 32          RETI
END

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。