资源描述
单片机的特点和应用 1)高集成度,体积小,高可靠性 2)控制功能强 (3)低电压,低功耗,便于生产便携式产品 (4)易扩展 (5)优异的性能价格比 。应用领域 单片机已成为计算机发展和应用的一个重要方面。另一方面,单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。1.89C51单片机内包含哪些主要逻辑功能部件?答:80C51系列单片机在片内集成了以下主要逻辑功能部件: (l)CPU(中央处理器):8位(2)片内RAM:128B (3)特殊功能寄存器:21个 (4)程序存储器:4KB (5)并行I/O口:8位,4个(6)串行接口:全双工,1个(7)定时器/计数器:16位,2个(8)片内时钟电路:1个。89C51的EA端有何用途?答:/EA端接高电平时,CPU只访问片内flash Rom并执行内部程序,存储器。/EA端接低电平时,CPU只访问外部ROM,并执行片外程序存储器中的指令。/EA端保持高电平时,CPU执行内部存储器中的指令。 89C51的存储器分哪几个空间?如何区别不同空间的寻址?答:ROM(片内ROM和片外ROM统一编址)(使用MOVC)(数据传送指令)(16bits地址)(64KB) 片外RAM(MOVX)(16bits地址)(64KB) 片内RAM(MOV)(8bits地址)(256B) 简述89C51片内RAM的空间分配。答:片内RAM有256B 低128B是真正的RAM区 高128B是SFR(特殊功能寄存器)区 简述布尔处理存储器的空间分配,片内RAM中包含哪些可位寻址单元。答:片内RAM区从00H~FFH(256B) 其中20H~2FH(字节地址)是位寻址区 对应的位地址是00H~7FH 如何简捷地判断89C51正在工作?答:用示波器观察8051的XTAL2端是否有脉冲信号输出(判断震荡电路工作是否正常?) ALE(地址锁存允许)(Address Latch Enable)输出是fosc的6分频 用示波器观察ALE是否有脉冲输出(判断 8051芯片的好坏?) 观察PSEN(判断8051能够到EPROM 或ROM中读取指令码?)因为/PSEN接外部EPROM(ROM)的/OE端子 OE=Output Enable(输出允许) 89C51 P0口用作通用I/O口输入时,若通过TTL“OC”门输入数据,应注意什么?为什么?答:要接上拉电阻,也要先置1;单片机I/O口电流太小,驱动能力弱,接上拉电阻保证电流做输入时应先置高电平然后读数。 89C51 P0~P3口结构有何不同?用作通用I/O口输入数据时,应注意什么?答:P0口内部没有上拉电阻,可以用做16位地址的低8位;P3有第二功能;P2口可以用做16位地址的高8位;需要上拉电阻。OC门电路无法输出高低电平,只有靠上拉电阻才能实现。 89C51单片机的EA信号有何功能?在使用8031时,EA信号引脚应如何处理?答:(1)80C51单片机的EA信号的功能 EA为片外程序存储器访问允许信号,低电平有效;在编程时,其上施加21V的编程电压 EA引脚接高电平时,程序从片内程序存储器开始执行,即访问片内存储器;EA引脚接低电平时,迫使系统全部执行片外程序存储器程序。(2)在使用80C31时,EA信号引脚的处理方法。因为80C31没有片内的程序存储器,所以在使用它时必定要有外部的程序存储器,EA 信号引脚应接低电平。内部RAM低128字节单元划分为哪3个主要部分?各部分主要功能是什么?答:片内RAM低128单元的划分及主要功能:(l)工作寄存器组(00H~lFH) 这是一个用寄存器直接寻址的区域,内部数据RAM区的0~31(00H~lFH),共32个单元。它是4个通用工作寄存器组,每个组包含8个8位寄存器,编号为R0~R7。 (2)位寻址区(20H~2FH) 从内部数据RAM区的32~47(20H~2FH)的16个字节单元,共包含128位,是可位寻址的RAM区。这16个字节单元,既可进行字节寻址,又可实现位寻址。(3)字节寻址区(30H~7FH)从内部数据RAM区的48~127(30H~7FH),共80个字节单元,可以采用间接字节寻址的方法访问。 使单片机复位有几种方法?复位后机器的初始状态如何?答:(1)单片机复位方法有:上电自动复位、按键电平复位和外部脉冲三种方式(2)复位后机器的初始状态,即各寄存器的状态:PC之外,复位操作还对其他一些特殊功能寄存器有影响。 开机复位后,CPU使用的是哪组工作寄存器?它们的地址是么?CPU如何确定和改变当前工作寄存器组?答:一般开机复位后都是选择第一组通用工作寄存器作为工作寄存器的,一共有4组,分别为0.1.2.3连续位于00h到1FH地址,然后在机器中有个程序状态字PSW,它的第四和第三位RS1,RS0是用来选择工作寄存器组的,可能不同机器地址稍有不同。他们俩的值和寄存器组的关系:
RS1/RS0 0/0 0/1 1/0 1/1
使用的工作寄存器 0 1 2 3
地址 00-07 08-0F 10-17 18-1F
写程序的时候就是通过定义程序状态字来选择使用不同的寄存器组。也可以直接对RS1和RS0赋值。 位地址7CH与字节地址7CH如何区别?位地址7CH具体在片内RAM中的什么位置?答:用不同的寻址方式来加以区分,即访问128个位地址用位寻址方式,访问低128字节单元用字节寻址和间接寻址。具体地址为2F的第五位,即为7C。 89C51有几种低功耗方式?如何实现?答:空闲方式和掉电方式。 空闲方式和掉电方式是通过对SFR中的PCON(地址87H)相应位置1而启动的。当CPU执行完置IDL=1(PCON.1)的指令后,系统进入空闲工作方式。这时,内部时钟不向CPU提供,而只供给中断、串行口、定时器部分。CPU的内部状态维持,即包括堆栈指针SP、程序计数器PC、程序状态字PSW、累加器ACC所有的内容保持不变,端口状态也保持不变。ALE和PSEN保持逻辑高电平。当CPU执行一条置PCON.1位(PD)为1的指令后,系统进入掉电工作方式。在这种工作方式下,内部振荡器停止工作。由于没有振荡时钟,因此,所有的功能部件都停止工作。但内部RAM区和特殊功能寄存器的内容被保留,而端口的输出状态值都保存在对应的SFR中,ALE和PSEN都为低电平。 汇编指令格式 操作码 [目的操作数][,源操作数]寻址方式与空间
寻址方式
寻址空间
立即数寻址
程序存储器ROM
直接寻址
片内RAM低128B、特殊功能寄存器
寄存器寻址
工作寄存器R0-R7、A、B、C、DPTR
寄存器间接寻址
片内RAM低128B、片外RAM
变址寻址
程序存储器(@A+PC,@A+DPTR)
相对寻址
程序存储器256B范围(PC+偏移量)
位寻址
片内RAM的20H-2FH字节地址、部分SFR
10、访问SFR使用直接寻址,位寻址,寄存器寻址方式.访问片外RAM单元只能采用寄存器间接寻址(用MOVX指令).访问片内RAM单元低128字节:直接寻址,位寻址,寄存器间接寻址,寄存器寻址(R0~R7),高128字节:直接寻址,位寻址,寄存器寻址.访问片内外程序存储器采用变址寻址(用MOVC指令).十进制调整的原因与方法?压缩BCD码在进行加法运算时应逢十进一,而计算机只将其当作十六进制数处理,此时得到的结果不正确。用DA A指令调整(加06H,60H,66H)。试编写程序,查找在内部RAM的20H~50H单元中出现0H的次数,并将查找的结果存入51H单元 MOV R2,#31H ;数据块长度→R2
MOV R0,#20H ;数据块首地址→R0
LOOP:MOV A,@R0 ;待查找的数据→A
JNZ L1 ;不为0,转L1
INC 51H ;为0,00H个数增1 L1:INC R0 ;地址增1,指向下一个待查数据 DJNZ R2,LOOP ;数据块长度减1,不等于0,继续查找
RET
30、 MOV R2,#04H ;字节长度→R2
MOV R0,#30H ;一个加数首地址→R0
MOV R1,#40H ;另一个加数首地址→R1
CLR C ;清进位位
LOOP:MOV A,@R0 ;取一个加数
ADDC A,@R1 ;两个加数带进位位相加
DA A ;十进制调整
MOV @R0,A ;存放结果
INC R0 ;指向下一个字节
INC R1 ;
DJNZ R2,LOOP ;数据块长度减1,不等于0,继续查找
RET
36、MOV R0,#40H ;40H→R0
MOV A,@R0 ;98H→A
INC R0 ;41H→R0
ADD A,@R0 ;98H+(41H)=47H→A
INC R0
MOV @R0,A ;结果存入42H单元
CLR A ;清A
ADDC A,#0 ;进位位存入A
INC R0
MOV @R0,A ;进位位存入43H
功能:将40H,41H单元中的内容相加结果放在42H单元,进位放在43H单元,(R0)=43H,(A)=1,(40H)=98H,(41H)=AFH,(42H)=47H,(43H)=01H
37 MOV A,61H ;F2H→A
MOV B,#02H ;02H→B
MUL AB ;F2H×O2H=E4H→A
ADD A,62H ;积的低8位加上CCH→A
MOV 63H,A ;结果送62H
CLR A ;清A
ADDC A,B ;积的高8位加进位位→A
MOV 64H,A ;结果送64H
功能:将61H单元的内容乘2,低8位再加上62H单元的内容放入63H,将结果的高8位放在64H单元。(A)=02H,(B)=01H,(61H)=F2H,(62H)=CCH,(63H)=B0H,(64H)=02H
什么是中断和中断系统?其主要功能是什么?答:当CPU正在处理某件事情的时候,外部发生的某一件事件请求CPU迅速去处理,于是,CPU暂时中止当前的工作,转去处理所发生的事件,中断服务处理完该事件以后,再回到原来被终止的地方,继续原来的工作。这种过程称为中断,实现这种功能的部件称为中断系统。功能:(1 使计算机具有实时处理能力,能对外界异步发生的事件作出及时的处理(2完全消除了CPU在查询方式中的等待现象,大大提高了CPU的工作效率(3)实现实时控制。查询顺序:外部中断0→定时器0中断→外部中断1→定时器1中断→串行接口中断。说明外部中断请求的查询和响应过程。答:当CPU执行主程序第K条指令,外设向CPU发出中断请求,CPU接到中断请求信号并在本条指令执行完后,中断主程序的执行并保存断点地址,然后转去响应中断。CPU在每个S5P2期间顺序采样每个中断源,CPU在下一个机器周期S6期间按优先级顺序查询中断标志,如果查询到某个中断标志为1,将在接下来的机器周期S1期间按优先级进行中断处理,中断系统通过硬件自动将相应的中断矢量地址装入PC,以便进入相应的中断服务程序。中断服务完毕后,CPU返回到主程序第K+1条指令继续执行。在89C51内存中,应如何安排程序区?答:主程序一般从0030H开始,主程序后一般是子程序及中断服务程序。在这个大家还要清除各个中断的中断矢量地址。89C51单片机外部中断源有几种触发中断请求的方法?如何实现中断请求?答:有两种方式:电平触发和边沿触发。电平触发方式:CPU在每个机器周期的S5P2期间采样外部中断引脚的输入电平。若为低电平,使IE1(IE0)置“1”,申请中断;若为高电平,则IE1(IE0)清零。边沿触发方式:CPU在每个机器周期S5P2期间采样外部中断请求引脚的输入电平。如果在相继的两个机器周期采样过程中,一个机器周期采样到外部中断请求为高电平,接着下一个机器周期采样到外部中断请求为低电平,则使IE1(IE0)置“1”申请中断;否则,IE1(IE0)置0。单片机内部定时方式产生频率为100KHZ等宽矩形波,假定单片机的晶振频率为12MHZ,请编程实现。答: T0低5位:1BH
T0高8位:FFH
MOV TMOD,#00H ;设置定时器T0工作于模式0
MOV TL0,#1BH ;设置5ms定时初值
MOV TH0,#0FFH
SETB TR0 ;启动T0
LOOP:JBC TF0,L1;查询到定时时间到?时间到转L1
SJMP LOOP ;时间未到转LOOP,继续查询
L1:MOV TL0,#1BH;重新置入定时初值
MOV TH0,#0FFH
CPL P1.0 ;输出取反,形成等宽矩形波
SJMP LOOP ;重复循环
89C51内部设有几个定时器/计数器?它们是由哪些特殊功能寄存器组成?答:89C51单片机内有两个16位定时器/计数器,即T0和T1。
T0由两个8位特殊功能寄存器TH0和TL0组成;T1由TH1和TL1组成。当T0用作模式3时,由于TR1已被T0占用,如何控制T1的开启和关闭?答:用T1控制位C/T切换定时器或计数器工作方式就可以使T1运行。定时器T1无工作模式3,将T1设置为工作模式3,就会使T1立即停止计数,关闭。以定时器/计数器1进行外部时间计数,每计数1000个脉冲后,定时器/计数器1转为定时工作方式,定时10ms后又转为计数方式,如此循环不止。假定 为6WHZ,用模式1编程。
解:T1为定时器时初值:
T1为计数器时初值:
所以:
L1:MOV TMOD,#50H ;设置T1为计数方式且工作模式为1
MOV TH1,#0FCH ;置入计数初值
MOV TL1,#18H
SETB TR1 ;启动T1计数器
LOOP1:JBC TF1,L2 ;查询计数溢出?有溢出(计数满1000个)转L2
SJMP LOOP1 ;无溢出转LOOP1,继续查询
L2:CLR TR1 ;关闭T1
MOV TMOD,#10H ;设置T1为定时方式且工作与模式1
MOV TH1,#0ECH ;置入定时10ms初值
MOV TL1,#78H
SETB TR1 ;启动T1定时
LOOP2:JBC TF1,L1;查询10ms时间到?时间到,转L1
SJMP LOOP2 ;时间未到,转LOOP2,继续查询
使用一个定时器,如何通过软硬件结合方法实现较长时间的定时答:设定好定时器的定时时间,采用中断方式用软件设置计数次数,进行溢出次数累计,从而得到较长的时间。已知89C51单片机的fosc=6MHz, 请利用T0和P1.0输出矩形波。矩形波高电平宽50μs,低电平宽300μs。
解:T0采用模式2作为50μs定时时的初值:
所以 作300μs定时时的初值:
MOV TMOD,#02H ;设置定时器T0工作于模式2
L2:CLR P1.0 ;P1.0输出低电平
MOV TH0,#6AH ;置入定时300μs初值
MOV TL0,#6AH
SETB TR0 ;启动T0
LOOP1:JBC TF0,L1;查询300μs时间到?时间到,转L1
SJMP LOOP1 ;时间未到,转LOOP1,继续查询
L1:SETB P1.0 ;P1.0输出高电平
CLR TR0 ;关闭T0
MOV TH0,#0E7H ;置入定时300μs初值
MOV TL0,# 0E7H
SETB TR0 ; 启动T0
LOOP2:JBC TF0,L2 ;查询50μs时间到?时间到,转L2
SJMP LOOP2 ;时间未到,转LOOP2,继续查询
已知89C51单片机的fosc=12MHz, 用T1定时。试编程由P1.0和P1.1引脚分别输出周期为 2ms和500μs的方波。解:采用模式0作 定时初值: MOV R2,#04H ;R2为“250μs”计数器,置入初值4
CLR P1.0 ;P1.0输出低电平
CLR P1.1 ;P1.1输出低电平
MOV TMOD,#00H
L2:MOV TH1,#0F8H ;置入定时250μs初值
MOV TL1,#06H
SETB TR1 ;启动T1
LOOP:JBC TF1,L1 ;查询250μs时间到?时间到,转L1
SJMP LOOP ;时间未到,转LOOP,继续查询
L1:CPL P1.1;P1.1输出取反,形成周期为500μs
CLR TR1 ;关闭T1
DJNZ R2,L2;“250μs”计数器减1,到1ms吗?未到转L2
CPL P1.0 ;P1.0输出取反,形成周期为2ms方波
MOV R2,#04H ;重置“250μs”计数器初值4
LJMP L2 ;重复循环
15、单片机8031的时钟频率为6MHz,若要求定时值分别为0.1ms,1ms,10ms,定时器0工作在模式0、模式1和模式2时,其定时器初值各应是多少?
解:
(1) 0.1ms
模式0:
T0低5位01110B=0EH
T0高8位:11111110B=FEH
模式1:
模式2:
(2) 1ms
模式0:
T0低5位01100B=0CH
T0高8位:11110000B=F0H
模式1:
模式2:
在此情况下最长定时为512μs,无法一次实现定时1ms,可用0.1ms循环10次
(3) 10ms
模式0:
T0低5位11000B=18H
T0高8位:01100011B=63H
模式1:
模式2:在此情况下最长定时为512μs,无法一次实现定时10ms,可用0.1ms循环100次
16、89C51单片机的定时器在何种设置下可提供三个8位计数器定时器?这时,定时器1可作为串行口波特率发生器。若波特率按9600b/s,4800b/s,2400b/s,1200b/s,600b/s,100b/s来考虑,则此时可选用的波特率是多少(允许存在一定误差)?设fosc=12MHz。
解:当T0为模式3,T1为模式2时,可提供3个8位定时器。
可选100b/s
、试编制一段程序,功能为:当P1.2引脚的电平上跳时,对P1.1的输入脉冲进行计数;当P1.2引脚的电平下跳时,停止计数,并将计数值写入R6,R7。
解:
MOV TMOD,#05H ;T0为计数方式且工作于模式1
JNB P1.2,$ ;等待P1.2引脚电平上跳
MOV TH0,#00H ; P1.2电平上跳,置入计数初值
MOV TL0,#00H
SETB TR0 ;启动T0
JB P1.2,$ ;等待P1.2引脚电平下跳
CLR TR0 ;电平下跳,关闭T0
MOV R7,TH0 ;计数初值写入R7,R6
MOV R6,TL0
6、89C51中SCON的SM2,TB8,RB8有何作用?答:89c51SCON的SM2是多机通信控制位,主要用于方式2和方式3.若置SM2=1,则允许多机通信。TB8是发送数据的第9位,在方式2或方式3中,根据发送数据的需要由软件置位或复位。它在许多通信协议中可用作奇偶校验位;在多机通信中作为发送地址帧或数据帧的标志位。RB8是接收数据的第9位,在方式2或方式3中接收到的第9位数据放在RB8位。它或是约定的奇偶校验位,或是约定的地址/数据标示位。设fosc=11.059MHz,试编写一段程序,其功能为对串行口初始化,使之工作与方式1,波特率为1200b/s;并用查询串行口状态的方法,读出接收缓冲器的数据并回送到发送缓冲器。
START:MOV SCON,#40H ;串行接口工作于方式1
MOV TMOD,#20H ;定时器T1工作于模式2
MOV TH1,#0E8H ;赋定时器计数初值
MOV TL1,#0E8H
SETB TR1 ;启动定时器T1
MOV A,SBUF ;读出接收缓冲器数据
MOV SBUF,A ;启动发送过程
JNB TI,$ ;等待发送完
CLR TI ;清TI标志
SJMP $ ;结束
8、若晶振为11.0592MHz,串行口工作与方式1,波特率为4800b/s。写出用T1作为波特率发生器的方式字和计数初值。
MOV TMOD,#20H ;定时器T1工作于模式2
MOV TH1,#0FAH ;赋定时器计数初值
MOV TL1,#0FAH
9、为什么定时器T1用作串行口波特率发生器时,常选用工作模式2?若已知系统时钟频率和通信用的波特率,如何计算其初值?答:因为工作模式2是自动重装初值定时器,编程时无需重装时间参数(计数初值),比较使用。若选用工作模式0或工作模式1,当定时器T1溢出时,需在中断服务程序中重装初值。1.微处理器,RAM,ROM,以及I/O口,定时器,构成的微型计算机称为单片机。.指令寄存器(IR)保存当前正在执行的一条指令;指令译码器(ID)对操作码进行译码。程序计数器(PC)指示出将要执行的下一条指令地址,由两个8位计数器PCH及PCL组成。2.80C31片内没有程序存储器,80C51内部设有4KB的掩膜ROM程序存储器,87C51是将80C51片内的ROM换成EPROM,89C51则换成4KB的闪存FLASHROM,51增强型的程序存储器容量是普通型的2倍。89C51的组成:一个8位的80C51的微处理器,片内256字节数据存储器RAM/SFR用来存放可以读/写的数据,片内4KB程序存储器FLASHROM用存放程序、数据、表格,4个8位并行I/O端口P0-P3,两个16位的定时器/计数器,5个中断源、两个中断个优先级的中断控制系统, 一个全双工UART的串行口I/O口,片内振荡器和时钟产生电路,休闲方式和掉电方式。689C51片内程序存储器容量为4KB,地址从0000-0FFFH开始,存放程序和表格常数,片外最多可扩展64KBROM地址1000-FFFFH,片内外统一编址。单片机的内部存储空间分为数据存储器和程序存储器。7.内部数据存储器:共256字节单元,包括低128个单元和高128个单元。低128字节又分成3个区域:工作寄存器区(00H~1FH),位寻址区(20H~2FH)和用户RAM区(30H~7FH)存放中间结果,数据暂存及数据缓冲。高128字节是供给特殊功能寄存器(SFR)使用的,因此称之为特殊功能寄存器区(80H~FFH),访问它只能用直接寻址。内部程序存储器:在8031片内无程序存储器,8051片内具有4KB掩模ROM,8751片内具有4KBEPROM。8. 引脚是片内外程序存储器的选择信号。当 端保持高电平时,访问内部程序存储器,但在PC(程序计数器)值超过0FFFH(对于8051/8751/80C51)或1FFFH(对于8052)时,将自动转向访问外部程序存储器。当 端保持低电平时,不管是否有内部程序存储器,则只访问外部程序存储器。由于8031片内没有程序存储器,所以在使用8031时, 引脚必须接低电平。9.RST复位信号输入端,高电平有效。保持两个机器周期(24个时钟振荡周期)的高电平有效,完成复位,复位后,CPU和系统都处于一个确定的初始状态,在这种状态下,所有的专用寄存器都被赋予默认值,除SP=07H,P0~P3口为FFH外,其余寄存器均为0。10.ALE/ :ALE输出正脉冲,频率为振荡周期的1/6,CPU访问片外存储器时,ALE输出信号作为锁存低8位地址的控制信号,看芯片好坏可以用示波器看ALE端是否有脉冲信号输出。PSEN程序存储允许输出信号端,也可以检查芯片好坏,有效即能读出片外ROM的指令,引脚信号RD/WR有效时可读/写片外RAM或片外I/O接口。10.P0作为输出口时,必须外接上拉电阻才能有高电平输出,作为输入口时,必须先向锁存器写“1”;作为普通I/O口使用或低8位地址/数据总线使用。P1口有上拉电阻,对FLASHROM编程和校验是P1接收低八位地址;只用作普通I/O口使用。P2口比P1口多了一个转换控制开关;作为普通I/O口使用或高8位地址线使用时访问外部程序存储器和16位地址的外部数据存储器。P3口比P1口增加了与非门和缓冲器;具有准双向I/O功能和第二功能。P0,P1,P2,P3准双向口。上述4个端口在作为输入口使用时,应注意必须先向端口写“1”。普林斯顿结构:一个地址对应唯一的存储单元,用同类访问指令。哈佛结构:程序存储器和数据存储器分开的结构。CPU访问片内外ROM用MOVC,访问片外RAM用MOVX,访问片内RAM用MOV.
RS1
RS0
当前寄存器组
片内RAM地址
0
0
第0组工作寄存器
00H~07H
0
1
第1组工作寄存器
08H~0FH
1
0
第2组工作寄存器
10H~17H
1
1
第3组工作寄存器
18H~1FH
SP总是初始化到内部RAM地址07H,堆栈的操作;PUSH、POP。DPTR是数据指针寄存器,是一个16位寄存器,用来存放16位存储器的地址,以便对64KB片外RAM作间接寻址。DPTR由高位字节DPH和低位字节DPL组成。
复位操作有:电自动,按键手动,看门狗。
15.空闲方式是CPU停止工作而RAM,定时器/计数器,串行口及中断系统都工作。掉电一切功能都暂停,保存RAM中内容。退出空闲方式;硬件将PCON.0清0,硬件复位。当CPU执行PCON.1为1,系统进入掉电方式。推出掉电只有硬件复位。
16.保留的存储单元
存储单元
保留目的
0000H~0002H
复位后初始化引导程序地址
0003H~000AH
外部中断0
000BH~0012H
定时器0溢出中断
0013H~001AH
外部中断1
001BH~0022H
定时器1溢出中断
0023H~002AH
串行端口中断
002BH
定时器2中断
18.AJMP和SJMP的区别有: (1) 跳转范围不同。 AJMP addr1 ;短跳转范围:2KB 。SJMP rel ;相对跳转范围:-128~+127 (2) 指令长度不同。(3) 指令构成不同。AJMP、LJMP后跟的是绝对地址,而SJMP后跟的是相对地址。 不能用AJMP指令代替程序中的SJMP指令,因为如果改变的话,程序跳转到的新PC值指向的地址会不同,导致程序出现错误。在89c51片内RAM中30H)=38H,38H=40H,40H=48H,48H=90H。情分析下面各是什么指令,说明源操作数的寻址方式以及按顺序执行每条指令后的结果?
MOV A,40H ;直接寻址 (40H)→A
MOV R0,A ;寄存器寻址 (A)→R0
MOV P1,#0F0H ;立即数寻址 0F0→P1
MOV @R0,30H ;直接寻址 (30H) →(R0)
MOV DPTR,#3848H ;立即数寻址 3848H→DPTR
MOV 40H,38H ;直接寻址 (38H) →40H
MOV R0,30H ;直接寻址 (30H) →R0
MOV P0,R0 ;寄存器寻址 ( R0 )→P0
MOV 18H,#30H ;立即数寻址 30H→18H
MOV A,@R0 ;寄存器间接寻址 ((R0)) →A MOV P2,P1 ;直接寻址 (P1)→P2
最后结果:(R0)=38H,(A)=40H,(P0)=38H,(P1)=(P2)=0F0H,(DPTR)=3848H,(18H)=30H,(30H)=38H,(38H)=40H,(40H)=40H,(48H)=38H注意:→左边是内容,右边是单元
已知R3和R4中存放有一个16位的二进制数,高位在R3中,地位在R4中,请编程将其求补,并存回原处。 MOV A,R3 ;取该数高8位→A
ANL A,#80H ;取出该数符号判断
JZ L1 ;是正数,转L1
MOV A,R4 ;是负数,将该数低8位→A
CPL A ;低8位取反
ADD A,#01H ;加1
MOV R4,A ;低8位取反加1后→R4
MOV A,R3 ;将该数高8位→A
CPL A ;高8位取反
ADDC A,#00H;加上低8位加1时可能产生的进位
MOV R3,A ;高8位取反加1后→R3
L1: RET
已知30H和31H中村有一个16位的二进制数,高位在前,低位在后,请编程将他们乘以2,在存回原单元中。
CLR C ;清进位位C
MOV A,31H ;取该数低8位→A
RLC A ;带进位位左移1位
MOV 31H,A ;结果存回31H
MOV A,30H ;取该数高8位→A
RLC A ;带进位位左移1位
MOV 30H,A ;结果存回30H
展开阅读全文