单片机中sjmp是什么_单片机sjmp是什么意思 - CSDN
  • 正确区分LJMP、AJMP、SJMP、JMP指令MCS-51的控制转移类指令,共17条,分为无条件转移指令、条件转移指令、子程序调用和返回指令、空操作指令等四类。无条件转移指令(共4条)LJMP addr16 ; PC〈—— addr16AJMP ...


    正确区分LJMP、AJMP、SJMP、JMP指令

    MCS-51的控制转移类指令,共17条,分为无条件转移指令、条件转移指令、子程序调用和返回指令、空操作指令等四类。

    无条件转移指令(共4条)
    LJMP addr16   ; PC〈—— addr16
    AJMP addr11   ; PC〈—— PC+2 , PC10-0〈—— addr11
    SJMP rel      ; PC〈—— PC+2 ,   PC  〈—— PC+rel
    JMP  @A+DPTR  ; PC〈—— A+DPTR  

    第一条指令称为长转移指令(Long Jump);
    第二条指令叫作绝对转移指令(Absolute Jump);
    第三条指令称作短转移指令(Short Jump);
    第四条指令是变址寻址转移指令(散转指令)。

    显然,每条指令均以改变程序计数器PC(Program Counter)中的内容为宗旨。

    (1)长转移指令(64KB范围内转移指令)
    长转移指令的功能是:把指令码中的目标地址addr16装入程序计数器PC,使机器执行下一条指令时无条件转移到addr16处执行程序,不影响任何标志。由于addr16是一个16位二进制地址(地址范围为0000H—FFFFH),因此长转移指令一条可以在64KB范围内转移的指令。为了使程序设计方便易编,addr16常采用标号地址(如:LOOP、LOOP1、MAIN、START、DONE、NEXT1……)表示,只有在上机执行前才被汇编(或代真)为16位二进制地址。
    长转移指令为三字节,双周期指令。
    上机试试吧!很直观的!  For Example: LJMP F886H
    注意:
    在下载的这个8051DEBUG软件中,不支持标号,且程序状态字PSW(Program State Word)中的D0位,即奇偶标志位P,与正确的正好相反,这一点是错误的,用的时候留意一下。

    只要记好:累加器ACC中1的个数为奇数,则P=1;否则P=0。

    (2)绝对转移指令(2KB范围内的转移指令)
    绝对转移指令是一条双字节双周期指令,11位地址addr11(a10—a0)在指令中的分布是: 
    a10 a9 a8 0 0 0 1|a7 a6 a5 a4 a3 a2 a1 a0,其中,00001B是操作码。在程序设计中,11位地址也可以用符号表示,但在上机执行前必须按照上述指令格式加以代真。
    绝对转移指令执行时分为两步:
    第一步是取指令操作,程序计数器PC中内容被加1两次;
    第二步是把PC加2后的高5为地址PC15—PC11和指令代码中低11位构成目标转移地址:PC15—PC11   a10  a9   a8   a7   a6   a5   a4   a3   a2   a1   a0

    其中,a10—a0的地址范围是全“0”——全“1”。因此,绝对转移指令可以在2KB范围内向前或向后跳转。
    如果把单片机64KB寻址区分成32页(每页2KB),则PC15—PC11(00000B—11111B)称为页面地址(即:0页—31页),a10—a0称为页内地址,但应注意:AJMP指令的目标转移地址不是和AJMP指令地址在同一个2KB区域,而是应和AJMP指令取出后的PC地址(即:PC+2)在同一个2KB区域。例如:若AJMP指令地址为2FFEH,则PC+2=3000H,故目标转移地址必在3000H—37FFH这2KB区域中。
    例如:MGH2001:AJMP addr11,
    其中,MGH2001为AJMP addr11指令的标号地址,由该指令在程序存储器中的位置确定,addr11为11位地址,试分析该指令执行后的情况以及指令码的确定方法。
    解:设MGH2001=3100H,addr11=10110100101B,则根据上述指令码格式可得绝对转移指令的格式码为:1 0 1| 0 0 0 0 1|1 0 1 0 0 1 0 1|(a10 a9 a8|操作码|a7—a0|)
    即:A1A5H。该指令执行后:
               PC15——PC11  a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
            PC= 0 0 1 1 0     1   0  1  1  0  1  0  0  1  0  1 B =35A5H
      即:程序转移到35A5H处执行。

    (3)短转移指令(-126—+129范围内的转移指令)
    短转移指令的功能是先使程序计数器PC加1两次(即:取出指令码),然后把加2后的地址和rel相加作为目标转移地址。因此,短转移指令是一条相对转移指令,是一条双字节双周期指令,指令码格式为:80H rel(操作码  地址偏移量),这里,80H是SJMP指令的操作码;rel是地址偏移量,在程序中也常采用符号地址,上机运行前才被代真成二进制形式。
    遇到具体问题时,头脑中一定要清楚一个关系式:目标转移地址=源地址+2+rel

    (4)变址寻址转移指令(只能在256个存储器单元内转移)
    这是一条单字节双周期无条件转移指令。
    在指令执行之前,用户应预先把目标转移地址的基地址送入DPTR,目标转移地址对基地址的偏移量放在累加器A中。在指令执行时,MCS-51单片机把DPTR中基地址和累加器A中地址偏移量相加,以形成目标转移地址送入程序计数器PC中。
    通常,DPTR中基地址是一个确定的值,常常是一张转移指令表的起始地址,累加器A中之值为表的偏移量地址,机器通过变址寻址转移指令便可实现程序的分支转移








    跳转的范围不一样,可以说是到达的远近距离不一样。存储空间占用不一样。 
    AJMP 的范围是11位地址,也就是2K的空间内,占用存储空间2个字节,执行周期24个时钟周期。 
    LJMP 的范围是16位地址,也就是64K的空间内,占用存储空间3个字节,执行周期24个时钟周期。 
    SJMP 的范围是8位地址,也就是256BIT的空间内,占用存储空间2个字节,执行周期24个时钟周期。 
    JMP一般配合DPTR使用,存储空间1个字节,执行周期24个时钟周期。一般用于多分枝选择的时候使用,比如按键处理。 
    ACALL,LCALL和以上说明类似,是调用指令,ACALL占用存储空间2个字节,执行周期24个时钟周期。LCALL占用存储空间3个字节,执行周期24个时钟周期。 
    展开全文
  • 单片机面试问题集

    万次阅读 多人点赞 2018-03-23 17:12:48
     单片机单片机的最小系统?内部的主要结构?答:最小系统:电源、晶振(为系统提供基本的时钟信号)、复位电路;内部结构:ROM/RAM、计时器、中断、I/O串并行口、总线扩展控制。RAM和ROM的区别?答:ROM(只读...
    

     

    单片机

    1. 单片机的最小系统?内部的主要结构?

      答:最小系统:电源、晶振(为系统提供基本的时钟信号)、复位电路;内部结构:ROM/RAM、计时器、中断、I/O串并行口、总线扩展控制。

    2. RAMROM的区别?

      答:ROM(只读存储器):它的信息一次写入后只能被读出,而不能被操作者修改或者删除。一般用于存放固定的程序或数据表格。但是,“只读”这个概念有时候可以被一些新特性的器件颠覆。

      RAM(随机存储器):它就是我们平时说的内存,主要用来存放各种现场的输入/输出数据、中间计算结果,以及与外部存储器交换信息,或者作堆栈(特点:先进后出,后进先出)用。它的存储单元根据具体需要可以读出或者改写。

      两者区别:RAM只能用于暂时存放程序与数据。一旦电源关闭或发生断电,RAM中的数据就会丢失。而ROM中的数据在电源关闭或者断电后仍然会保留下来。

      简而言之:相同点它们都是用来存储数据的

                不同点存储数据的方式与数据能不能在二次加工不同

    3. 单片机I/O口有什么作用?I/0口的驱动能力?上拉电阻与下拉电阻的作用?

      答:I/O口最主要的功能用来与外部器件实现数据信息的交互、速度匹配、数据传送方式和增强单片机的负载能力。它在两者之间扮演桥梁的作用,单片机拥有着串行与并行接口。每个种类的单片机的不同并行口也有着各自不同的功能。

      单片机输出低电平时,将允许外部器件,向单片机引脚内灌入电流,这个电流,称为“灌电流”,外部电路称为“灌电流负载”。

          单片机输出高电平时,则允许外部器件,从单片机的引脚拉出电流,这个电流,称为“拉电流”,外部电路称为“拉电流负载”。

      单片机输出驱动能力的问题:每个单个的引脚,输出低电平的时候,允许外部电路,向引脚灌入的最大电流为 10 mA;每个 8 位的接口(P1P2 以及 P3),允许向引脚灌入的总电流最大为 15 mA,而 P0 的能力强一些,允许向引脚灌入的最大总电流为26 mA;全部的四个接口所允许的灌电流之和,最大为 71 mA。而当这些引脚“输出高电平”的时候,单片机的“拉电流”能力呢?可以说是太差了,竟然不到 1 mA

      结论就是:单片机输出低电平的时候,驱动能力尚可,而输出高电平的时候,就没有输出电流的能力。

      综上所述:灌电流负载,是合理的;而“拉电流负载”和“上拉电阻”会产生很大的无效电流,并且功耗大。

      设计单片机的负载电路,应该采用“灌电流负载”的电路形式,以避免无谓的电流消耗。

      在数字电路中,只有二种状态,要么是高电平,要么是低电平,在通电初期,这些输出状态是不确定的,为了使电路确定状态,必需使用上拉电阻或下拉电阻,使一个原来不确定电平变高的叫上拉电阻,否则就是下拉电阻,上拉电阻就是从电源上接一只电阻到这个状态口上就可以了,(就是把高的电压加到这个点上去,这个点的电位就高了)下拉电阻的接法,从这个状态口接一只电阻到负极(或数字接地),因电路形式与类别不同,当输入端有信号,这种变化会反应到输出口,从输出口得到了一个状态,本来应该完成任务了,但这会儿输入口已没信号了,可输出端还是这个状态(这个人习惯不好,开门后总是不关门,加一只弹簧,(电阻)让它自己关门,)这时候也要用到上下拉电阻,这里有复位的作用。

    4. 常见的时钟电路有哪些?为什么要使用PLL

    答:先了解一下什么是时钟电路?

    时钟电路就是产生像时钟一样准确运动的振荡电路,任何工作都按时间顺序。用于产生这个时间的电路就是时钟电路。

       组成:晶体振荡器、晶震控制芯片和电容组成。

    现在流行的串行时钟电路有:DS1302DS1307PCF8485

    它们的特点:接口简单、价格低廉、使用方便。

    DS1302:具有涓细电流充电能力的电路,主要特点:采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768KHz晶振。

    PLLPhaseLocked Loop:锁相环电路。用来统一整合时脉讯号,使高频器件正常工作。如:内存的存取资料等。PLL用于振荡器中的反馈技术。许多电子设备要正常工作,通常需要外部的输入信号与内部的振荡信号同步。一般的晶振由于工艺与成本原因,做不到很高的频率,而在需要高频应用时,有相应的器件VCO,实现转成高频,但不稳定,故利用锁相环路就可以实现稳定且高频的时脉冲讯号。

    什么是时脉:指同步电路中时钟的基础频率,它以(若千次周期每秒)来度量,单位是(Hz

    总之:PLL可以同步频率,相位正交。倍频、变频。

    1. 单片机的寻址方式有哪些?

      答:80C51有七种寻址方式:

    1、立即寻址,寻址空间为ROM

    2、直接寻址,寻址空间为片内RAM的低128B和特殊功能寄存器;

    3、寄存器寻址,寻址空间为ABDPTRCY、通用工作寄存器等;

    4、寄存器间接寻址,片内RAM128B、片外RAM

    5、相对寻址,寻址空间为ROM

    6、变址寻址,寻址空间为ROM

    7、位寻址,寻址空间为片内RAM128B的位寻址区的128个位,其字节地址为20H~2FH;以及部分可以位寻址的特殊功能寄存器。

     

    参考AT89C51单片机能直接认识和执行的机器指令有255条,有7种寻址方式,即立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。

     

    1. 直接寻址:

    指令中直接给出参与操作的数据的地址,该地址一般用direct表示。

    汇编指令:MOV A,direct

    该指令的功能是将片内RAM地址direct单元中的内容(参与操作的数据)传送到累加器A中,双字节指令。

     

    2. 立即寻址:

    指令中直接给出参与操作的数据,称立即数,用data表示。在汇编语言中,为标明立即数,为data加前缀”#”。立即数可以是8位和16位二进制数,分别用#data#data16表示。

    汇编语言指令:MOV A,#data

    该指令将立即数data传送到累加器A中,双字节指令。

     

    3. 寄存器寻址:

    参与操作的数据存放在寄存器中,汇编指令中直接以寄存器名来表示参与操作的数据地址,寄存器包括工作寄存器R0R7、累加器AAB、数据指针DPTR和位运算寄存器C

    汇编语言指令:MOV A,Rn ;n=0~7

    该指令将Rn中的内容传送到累加器A中,单字节指令。

     

    4. 寄存器间接寻址:

    寄存器间接寻址为二次寻址,第一次寻址得到寄存器的内容为(Ri)(DPTR),第二次寻址是将第一次寻址得到的寄存器内容作为地址,并在其中存、取参与操作的数据。汇编语言中,寄存器前缀@是寄存器间接寻址的标志,有@Ri@DPTR等。

    汇编语言指令:MOV A,@Ri ;i=01

    该指令是将Ri中的内容作为地址,再将该地址中的内容传送到累加器A中,单字节指令。

     

    5. 变址寻址:

    间接寻址由两个寄存器提供。若由APC提供,在汇编语言指令中寻址地址表示为@A+PC;若由ADPTR提供,在汇编语言指令中寻址地址为@A+DPTR。其中,PCDPTR被称为基址寄存器,A被称为变址寄存器,基址与变址相加为16位无符号加法。若变址寄存器A中内容加基址寄存器DPTR(PC)中内容时,低8位有进位,则该进位直接加到高位,不影响进位标志。因变址寻址指令多用于查表,故常称为查表指令。

    汇编语言指令:MOVC A,@A+DPTR

    该指令将DPTR中的内容加上A中的内容作为地址,再将该地址中的内容传送到累加器A中,单字节指令。

     

    6. 相对寻址:

    相对寻址是以相对寻址指令的下一条指令的程序计数器PC的内容为基值,加上指令机器代码中的“相对地址”,形成新的PC值(要转移的指令地址)的寻址方式。指令机器代码中“相对地址”指的是用一个带符号的8位二进制补码表示的偏移字节数,其取值范围为-128+127,负数表示向后转移,正数表示向前转移。

    (PC)表示该指令在ROM中的首地址,该指令字节数为2,执行时分两步操作:(PC)(PC)+2(PC)(PC)+相对地址。第一步完成后,PC中的值为该指令的下一条指令的首地址;第二步完成后,PC中的内容(PC)为转移的目标地址。所以,转移的目标地址范围是该相对寻址指令的下一条指令首址加上-128~—+127字节的地址。

    汇编语言指令:SJMP rel

    汇编语言相对寻址指令中的”rel”往往是一个标号地址,表示ROM中某转移目标地址。汇编软件对该汇编语言指令进行汇编时,自动算出“相对地址”并填入机器代码中,应将”rel”理解为“带有相对意义的转移目标地址”。

    Rel=(PC)+相对寻址指令字节数+相对地址

    其中,(PC)为该指令所在ROM中的首地址。

     

    7. 位寻址:

    参与操作的数据为“位”,而不是字节,是对片内数据存储器RAMSFR中可位寻址单元的位进行操作的寻址方式。

    汇编语言指令:ANL C,bit

    该指令将bit(位地址)中的内容(01)与C中的内容进行与操作,再将结果传送到PSW中的进位标志C中。

    1. 什么是时钟周期?机器周期?指令周期?它们之间的关系?

      答:1时钟周期又叫做振荡周期;单片机内部时钟电路产生(或外部时钟电路送入)的信号周期,单片机的时序信号是以时钟周期信号为基础而形成的,在它的基础上形成了机器周期、指令周期和各种时序信号。定义为时钟脉冲的倒数(可以这样理解:时钟周期就是单片机外接晶振的倒数,例如:12M的晶振,它的时钟周期就是1/12us),是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。

      2、计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一个阶段完成一项工作。例如:取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一项基本操作所需要的时间成为机器周期。一般情况,一个机器周期由若干个S周期(状态周期)组成。机器周期是单片机的基本操作周期,每个机器周期包含S1S2、……S66个状态,每个状态包含两拍P1P2,每个拍为一个时钟周期(振荡周期)。因此,一个机器周期包含12个时钟周期。依次可表示为S1P1S1P2S2P1S2P2……、S6P1S6P2

      3指令周期:计算机从取一条指令开始,到执行完该指令所需要的时间称为指令周期。不同的指令,指令长度不同,指令周期也不一样。但指令周期以机器周期为单位,指令不同,所需的机器指令也不同。

      51单片机指令根据指令长度与执行周期分为:

      1 单字节单周期指令

      2 单字节双周期指令

      3 双字节单周期指令

      4 双字节双周期指令

      5 三字节双周期指令

      6 一字节四周期指令

      总结:时钟周期是最小单位,机器周期需要1个或者多个时钟周期,指令周期需要1个或者多个机器周期;机器周期是指完成一个基本操作的时间。指令周期是CPU的关键指标,指取出并执行一条指令的时间。一般以机器周期为单位,分单指令执行周期、双指令执行周期等。机器周期是完成一个基本操作的时间单元。时钟周期是CPU的晶振的工作频率的倒数。

    2. 单片机有哪些接口,各模块有哪些特性及应用环境?

      答:接口电路——用于衔接外设与总线,实现存储空间扩展、I/O口线扩展、类型转换(电平转换、串并转换、A/D转换)、功能模块、通信扩展、总线扩展等。

      外围设备——工作设备,连接在接口电路上,主要有输出设备和输入设备。

    看门狗相关问题:

    1. 看门狗的原理?

      答:工作原理:在系统运行以后就启动看门狗计数器,此时看门狗就开始自动计时,如果达到一定的时间还不去给它进行清零,看门狗计数器就会溢出从而引起看门狗中断,造成系统的复位。

      为什么会溢出呢?

         因为看门狗是一个计数器,而计数器位数有限。能够装的数值也就有限(比如8位的最多装256个数,16位的最多装65536个数),从开启看门狗那刻起,它就开始不停的数机器周期,数一个机器周期就计数器加1,加到计数器盛不下了(这就是溢出)就产生一个复位信号,重启系统。

    2. 看门狗分为软件看门狗和硬件看门狗,在什么情况下软件看门狗失效?

      答:硬件看门狗是利用一个定时器电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时器清零,因此程序正常工作时,定时器总不能溢出,也就不能产生复位信号。如果程序出现故障,不在定时周期内复位看门狗,就使得看门狗定时器溢出产生复位信号并重启系统。

          软件看门狗原理上一样,只是将硬件电路上的定时器用处理器的内部定时器代替,这样可以简化硬件电路设计,但是在可靠性方面不如硬件定时器。

      1、系统内部定时器自身发生故障看门狗就会失效(当然可以通过双定时器相互监视,成本高);

      2、中断系统故障导致定时器中断失效。

      3、整个程序死机。主程序出现异常。

    3. 什么时候喂狗?怎么喂狗?喂狗的注意事项?

      答:在实际的单片机应用系统中,到底选用哪种型号的看门狗,采用何种喂狗方式和看门狗连接方式以及在编程中喂狗命令应该放在程序中什么位置,这要根据现场干扰源的特点、已采用的干扰措施、单片机硬件资源和软件结构特点以及对单片机系统的可靠性等具体情况而定。

    4. 看门狗一般应用到程序的那些位置?

      答: 一些重要的程序,必须让它一直跑着;而且还要时时关心它的状态——不能让它出现死锁现象。(当然,如果一个主程序会出现死锁,肯定是设计或者编程上的失误。首要做的事是Debug。)但如果时间紧迫可以用软件看门狗,暂时应急。

      喂狗命令放置位置:

      1. 定时中断服务子程序中;

      2. 主程序中.

    复位相关问题:

    1. 复位时单片机有什么动作?

      答:主要做的就是初始化每个寄存器,包括最重要的PC指针,不包括RAM,然后单片机从复位地址开始执行程序。

      必须使RST引脚(9)加上持续两个机器周期(即24个振荡周期)的高电平。单片机就执行复位操作。如果RST持续为高电平,单片机就处于循环复位状态。

    2. 单片机有哪些复位源,什么情况下会导致各个复位源

      答:

      6个复位源

      TM4C123GH6PM微控制器有6个复位源:

      1)上电复位(POR);

      2)外部复位输入引脚有效(RST);

      3)掉电检测可以用于由以下任一事件引起:①  低于BOR0,触发值是BOR0 最高电压值;②  低于BOR1,触发值是BOR1的最高  电压值。

      4)软件启动复位(利用软件复位寄存器);

      5)违反看门狗复位条件;

      6MOSC故障。

       

      STM8S共有9个复位源:

      NRST引脚产生的外部复位

      上电复位(POR)

      掉电复位(BOR)

      独立看门狗复位

      窗口看门狗复位

      软件复位

      SWIM复位

      非法操作码复位

      EMS复位:当一些关键的寄存器被破坏或错误加载时产生的复位

      所有的复位源最终都作用于NRST管脚,并在复位过程中保持低电平。复位入口向量在内存映射中位于固定的地址6000h 

    3. 复位的两种启动方式?

      答:1、上电复位:要求接通电源后,自动实现复位操作。

          2、按钮复位:要求接通电源后,单片机自动复位,并且在单片机运行期间,使用开关也可以实现复位。

    4. 复位存在哪些问题?

      答:采用上电复位:复位信号上电过程中有掉电现象,可能会造成逻辑方面的错误导致相关芯片复位时间不够、二次复位等、从而不能够正常工作起来。原因:产生的复位信号给了几个芯片用,导致这个复位信号的负载压力比较大,驱动能力不够从而往下调电,此现象常常出现在RC复位上。

      复位信号上电前有毛刺与复位信号上电时有毛刺,可能会造成逻辑方面的错误导致相关芯片复位时间不够。方案:加大上拉电阻的阻值。

    5. 复位电路有哪些?那种比较好?

      答:单片机复位电路主要有四种类型:

      (1)微分型复位电路:

      (2)积分型复位电路:

      (3)比较器型复位电路:

      比较器型复位电路的基本原理。上电复位时,由于组成了一个RC低通网络,所以比较器的正相输入端的电压比负相端输入电压延迟一定时间.而比较器的负相端网络的时间常数远远小于正相端RC网络的时间常数,因此在正端电压还没有超过负端电压时,比较器输出低电平,经反相器后产生高电平.复位脉冲的宽度主要取决于正常电压上升的速度.由于负端电压放电回路时间常数较大,因此对电源电压的波动不敏感.但是容易产生以下二种不利现象:

      1)电源二次开关间隔太短时,复位不可靠:

      2)当电源电压中有浪涌现象时,可能在浪涌消失后不能产生复位脉冲。

      为此,将改进比较器重定电路,可以利用数字逻辑的方法和比较器配合,设计的比较器重定电路。此电路稍加改进即可作为上电复位和看门狗复位电路共同复位的电路,大大提高了复位的可靠性。

      (4)看门狗型复位电路.

      看门狗型复位电路主要利用CPU正常工作时,定时复位计数器,使得计数器的值不超过某一设定的值;CPU不能正常工作时,由于计数器不能被复位,因此其计数会超过某一值,从而产生复位脉冲,使得CPU恢复正常工作状态。此复位电路的可靠性主要取决于软件设计,即将定时向复位电路发出脉冲的程序放在何处是最优的设计。一般设计,将此段程序放在定时器中断服务子程序中。然而,有时这种设计仍然会引起程序走飞或工作不正常。原因主要是:当程序"走飞"发生时,定时器初始化以及开中断之后的话,这种"走飞"情况就有可能不能由Watchdog复位电路校正回来.因为定时器中断一真在产生,即使程序不正常,Watchdog也能被正常复位.为此提出定时器加预设的设计方法.即在初始化时压入堆栈一个地址,在此地址内执行的是一条关中断和一条死循环语句.在所有不被程序代码占用的地址尽可能地用子程序返回指令RET代替.这样,当程序走飞后,其进入陷阱的可能性将大大增加.而一旦进入陷阱,定时器停止工作并且关闭中断,从而使Watchdog复位电路会产生一个复位脉冲将CPU复位.当然这种技术用于实时性较强的控制或处理软件中有一定的困难。

      由此可见,四种复位电路中,看门狗型复位电路较其他三中复位电路更加适合。

    堆栈相关问题:

    1. 堆栈的原理?过程怎么操作?

      答:单片机RAM中,常常会指定一个专门的区域来存放某些特别的数据,它遵循先进后出、后进先出的原则。这个RAM区就是堆栈。堆栈是一种数据结构(数据项按序排列:堆,顺序随意。栈,后进先出)。使用一个称作堆栈指针的专用寄存器指示前的操作位置,堆栈指针总是指向栈顶。

          操作过程:

      1 堆栈的建立(初始化)

      2 参数入栈(push

      3 参数出栈(pop(后进先出)

    2. 堆栈应用在什么地方?存在什么问题?怎么解决?

      答:在80C51单片机中,堆栈在子程序调用和中断时会把断点地址自动进栈和出栈。进栈和出栈的指令(PUSHPOP)操作可用于保护现场和恢复现场。由于子程序调用和中断都允许嵌套,并可以多级嵌套,而现场的保护也往往使用堆栈,所以一定要注意给堆栈以一定的深度,以免造成堆栈内容的破坏而引起程序执行的“跑飞”。

       

      堆栈指针SP80C51中存放当前的堆栈栈顶所指存储单元地址的一个8位寄存器。80C51单片机的堆栈是向上生成的,即进栈时SP的内容是增加的;出栈时SP的内容是减少的。

      系统复位后。80C51SP内容为07H。若不重新定义,则以07H为栈底,压栈的内容从08H单元开始存放。但工作寄存器R0R74组,占有内部RAM地址为00H1FH,位寻址区占有内部RAM地址为20H2FH。若程序中使用了工作寄存器13组或位寻址区,则必须通过软件对SP的内容重新定义,使堆栈区设定在片内数据RAM区中的某一区域内(30H)堆栈深度不能超过片内RAM空间。

       

    3. 学习堆栈的作用?

      答:在片内RAM中,常常要指定一个专门的区域来存放某些特别的数据,它遵循顺序存取和后进先出(LIFO/FILO)的原则,这个RAM区叫堆栈。

      1.子程序调用和中断服务时CPU自动将当前PC值压栈保存,返回时自动将PC值弹栈。

      2.保护现场/恢复现场

      3.数据传输

       

      也就是说,堆栈是进入中断的时候用到的,单片机一旦遇到中断请求,就会去处理中断,处理完后再回来处理主程序,这样就涉及到了一个问题,单片机要保存中断之前的信息,以便处理完后能够回到主程序中,单片机会在响应中断前,把单片机现在的指针地址(也就是处理完要返回的地址),以及一些必要的数据压入堆栈(没有这些数据,单片机处理完中断后就无法确定主程序的状态)。

       

    中断相关问题:

    1. 中断的响应过程?优先级?

      答:1、响应过程:

      1)根据响应的中断源的中断优先级,使相应的优先级状态触发器置1

      2 执行硬件中断服务子程序调用,并把当前程序计数器PC的内容压入堆栈,保护断点,寻找中断源。

      3 清除相应的中断请求标志位(串行口中断请求标志RITI除外);

      4 把被响应的中断源所对应的中断服务程序的入口地址(中断矢量)送入PC,从而转入相应的中断服务程序。

      5 中断返回,程序返回断点处进行执行。

      2、优先级:中断的优先级有两个:查询优先级与执行优先级

      查询优先级:查询优先级是不可以更改和设置的

      1)系统默认的优先级(逻辑上):

      外部中断0 > 定时器中断0 > 外部中断1 > 定时器中断1 > 串行中断

      2)由IP寄存器来决定优先级。当IP对应位置为1时,该中断级别提高。同为1是按默认级别

    2. 中断嵌套的好处与坏处?

      答:中断嵌套:CPU在处理级别较低的中断过程中,出现了级别较高的中断请求。CPU停止执行低级别中断,执行高级别的中断处理程序后,再接着执行低级别的未被处理完的中断程序。

      使用中断嵌套可以使高优先级别的中断得到及时的响应和处理。

      1 CPU与外部设备并行工作

      2 能够处理例外事件

      3 实现实时处理

      4 实现人机联系

      5 实现用户程序与操作系统的联系

      6 实现多道程序并行执行

      7 在多处理机系统中,实现处理机之间的联系

      坏处:高级别的中断一直持续的话会影响低级别中断的处理。

    3. 中断向量表的理解

      答:中断源的识别标志,可用来形成相应的中断服务程序的入口地址或存放中断服务程序的首地址称为中断向量。把所有的中断向量集中起来,按中断类型号从小到大的顺序存放到存储器的某一区域内,这个存放中断向量的存储区叫做中断向量表,即中断服务程序入口地址表。

    4. 中断在单片机中起到什么作用?

      答:中断能实现快速的CPU与慢速的外设同步工作,实现数据传送、故障检测与处理、人机联系、多机系统、多道程序分时操作、实时信息处理等。

     

    其它

    1. 什么是临界段,哪些情况下会存在临界段的问题,如何进行临界段保护。

      答:1.临界段代码,也叫临界区,是指那些必须完整连续运行,不可被打断的代码段。

      2.读取或者修改变量(特别是用于任务间通信的全局变量)的代码,一般来说这是最常见的临界代码。

      ②调用公共函数的代码,特别是不可重入的函数,如果多个任务都访问这个函数,结果是可想而知的。总之,对于临界段要做到执行时间越短越好,否则会影响系统的实时性。

      3.中断处理程序和任务都会访问的临界段代码,需要使用关中断的方法加以保护;仅由任务访问的临界段代码,可以通过给调度器上锁的方法来保护。

    2. 什么是可重入型函数,使用时需要注意哪些问题

      答:可重入函数

    1. 不为连续的调用持有静态数据。

    2. 不返回指向静态数据的指针;所有数据都由函数的调用者提供。

    3. 使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据。

    4. 如果必须访问全局变量,记住利用互斥信号量来保护全局变量。

      绝不调用任何不可重入函数。

       

      注意事项:

      1 :编写可重入函数时,应注意局部变量的使用(如编写C/C++ 语言的可重入函数时,应使用auto 即缺省态局部变量或寄存器变量)

      说明:编写C/C++语言的可重入函数时,不应使用static局部变量,否则必须经过特殊处理,才能使函数具有可重入性。

      2 :编写可重入函数时,若使用全局变量,则应通过关中断、信号量(即P V 操作)等手段对其加以保护

      说明:若对所使用的全局变量不加以保护,则此函数就不具有可重入性,即当多个进程调用此函数时,很有可能使有关全局变量变为不可知状态。

    1. 专用词汇解释:

      VCCC=circuit 表示电路的意思, 即接入电路的电压;

      VDDD=device 表示器件的意思, 即器件   内部的工作电压;

      对于数字电路来说,VCC是电路的供电电压,VDD是芯片的工作电压(通常Vcc>Vdd),VSS是接地点;有些IC既有VDD引脚又有VCC引脚,说明这种器件自身带有电压转换功能。

      VEE:发射极电源电压, Emitter Voltage, 一般用于 ECL 电路的负电源电压.

      VSSS=series 表示公共连接的意思,通常是指电路公共接地端电压。

      VPP:不同芯片对Vpp的定义稍有不同,比如电压峰峰值,单片机中Vpp多数定义为编程电压

      在场效应管(或COMS器件)中,VDD为漏极,VSS为源极,VDDVSS指的是元件引脚,而不表示供电电压。一般来说VCC=模拟电源,VDD=数字电源,VSS=数字地,VEE=负电源

       

       

    展开全文
  • 单片机指令的机器码

    2013-10-09 16:58:16
    转载于:http://qishangpan.blog.163.com/blog/static/932108120082219249960/ 助记符 代码 说明 MOV A,Rn E8~EF 寄存器A MOV A,direct

    转载于:http://qishangpan.blog.163.com/blog/static/932108120082219249960/

    助记符                  代码                     说明

    MOV    A,Rn              E8~EF                    寄存器A
    MOV    A,direct          E5 dircet                直接字节送A
    MOV    A,@Ri             ER~E7                    间接RAM送A
    MOV    A,#data           74 data                  立即数送A
    MOV    Rn,A              F8~FF                    A送寄存器
    MOV    Rn,dircet         A8~AF dircet             直接字节送寄存器   
    MOV    Rn,#data          78~7F data               立即数送寄存器
    MOV    dircet,A          F5 dircet                A送直接字节
    MOV    dircet,Rn         88~8F dircet             寄存器送直接字节
    MOV    dircet1,dircet2   85 dircet1 dircet2       直接字节送直接字节
    MOV    dircet,@Ro        86~87                    间接RAM送直接字节
    MOV    dircet,#data      75 dircet data           立即数送直接字节
    MOV    @Ri,A             F6~F7                    A送间接RAM
    MOV    @Ri,#data         76~77 data               直接字节送间接RAM
    MOV    @Ri,#data         76~77 data               立即数送间接RAM
    MOV    DPTR,#data16      90 data 15~8             16位常数送数据指针   
                            data7~0               
    MOVC   A,@A+DPTR         93                       由((A)+(DPTR))寻址的程序存贮
                                                    器字节选A
    MOVC   A,@A+PC           83                       由((A)+(PC));寻址的程序存贮器字节送A
    MOVX   A,@Ri             E2~E3                    送外部数据(8位地址)送A
    MOVX   A,@DPTR           E0                       送外部数据(16位地址)送A
    MOVX   @Ri,A             F2~F3                    A送外部数据(8位地址)
    MOVX   @DPTR,A           F0                       A送外部数据(16位地址)
    PUSH   dircet            C0 dircet                直接字节进栈,SP加1     
    POP    dircet            D0 dircet                直接字节退栈,SP减1
    XCH    A,Rn              C8~CF                    交换A和寄存器  
    XCH    A,dircet          C5 dircet                交换A和直接字节
    XCH    A,@Ri             C6~C7                    交换A和间接RAM                    
    XCH    A,@Ri             D6~D7                    交换A和间接RAM的低位
    SWAP   A                 C4               


    算术操作                                        (A的二个半字节交换)
    ADD    A,Rn              28~2F                     寄存器加到A
    ADD    A,dircet          25 dircet                 直接字节加到A
    ADD    A,@Ri             26~27                     间接RAM加到A
    ADD    A,#data           24data                    立即数加到A
    ADD    A,Rn              38~3F                     寄存器和进位位加到A
    ADD    A,dircet          35dircet                  直接字节和进位位加到A
    ADD    A,@Ri             36~37                     间接字节和进位位加到A
    ADD    A,data            34 data                   立即数和进位位加到A
    ADD    A,Rn              98~9F                     A减去寄存器和进位位
    ADD    A,dircet          95 dircet                 A减去直接字节和进位位
    ADD    A,@Ri             36~37                     间接RAM和进位位加到A
    ADD    A,data            34 data                   立即数和进位位加到A
    SUBB   A,Rn              98~9F                     A减去寄存器和进位位
    SUBB   A,dircet          95 dircet                 A减去直接字节和进位位
    SUBB   A,@Ri             96~97                     A减去间接RAM和进位位
    SUBB   A,#data           94 data                   A减去立即数和进位位
    INC    A                 04                        A加1
    INC    Rn                08~0F                     寄存器加1
    INC    dircet            05 dircet                 直接字节加1
    INC    @Ri               06~07                     间接RAM加1
    DEC    A                 14                        A减1
    DEC    Rn                18~1F                     寄存器减1
    DEC    dircet            15 dircet                 直接字节减1
    DEC    @Ri               16~17                     间接RAM减1
    INC    DPTR              A3                        数据指针加1
    MUL    AB                A4                        A乘以B
    DIV    AB                84                        A除以B
    DA     A                 D4                        A的十进制加法调整


    逻辑操作
    ANL    A,Rn              58~5F                     寄存器“与”到A
    ANL    A,dircet          55 dircet                 直接字节“与”到A
    ANL    A,@Ri             56~57                     间接RAm“与”到A
    ANL    A,#data           54 data                   立即数“与”到A
    ANL    dircet A          52 dircet                 A“与”到直接字节
    ANL    dircet,#data      53 dircet data            立即数“与”到直接字节  
    ORL    A,Rn              48~4F                     寄存器“或”到A
    ORL    A,dircet          45 dircet                 直接字节“或”到A
    ORL    A,@Ri             46~47                     间接RAM“或”到A
    ORL    A,#data           44 data                   立即数“或”到A
    ORL    dircet,A          42 dircet                 A“或”到直接字节
    ORL    dircet,#data      43 dircet data            立即数“或”到直接字节
    XRL    A,Rn              68~6F                     寄存器“异或”到A
    XRL    A,dircet          65 dircet                 直接字节“异或”到A
    XRL    A,@Ri             66~67                     间接RAM“异或”到A
    XRL    A,#data           64 data                   立即数“异或”到A
    XRL    dircet A          62 dircet                 A“异或”到直接字节
    XRL    dircet,#data      63 dircet data            立即数“异或”到直接字节
    CLR    A                 E4                        清零
    CPL    A                 F4                        A取反
    RL     A                 23                        A左环移
    RLC    A                 33                        A通过进位左环移
    RR     A                 03                        A右环移
    RRC    A                 13                        A通过进位右环移


    控制程序转移
    ACALL addr 11           *1 addr(a7~a0)                绝对子程序调用
    LCALL addr 16           12 addr(15~8)                 长子程序调用
                            addr(7~0)                    
    RET                     22                            子程序调用返回
    RETI   addr 11           32                            中断调用返回
    AJMP   addr 11           △1 addr(a7~a6)               绝对转移
    LJMP   addr 16           02addr(15~8)                  长转移
                            addr(7~0)                    
    SJMP   rel               80 rel                        短转移,相对转移
    JMP    @A+DPTR           73                            相对于DPTR间接转移
    JZ     rel               60 rel                        A为零转移
    JNZ    rel               70 rel                        A为零转移
    CJNE   A,dircet,rel      B5 dircet rel                 直接字节与A比较,不等则转移
    CJNE   A,#data,rel       B4 data rel                   立即数与A比较,不等则转移
    CJNE   A,Rn,#data,rel    B8~BF data rel                立即数与寄存器比较,不等则转移
    CJNE   @Ri,#data,rel     B6~B7 data rel                立即数与间接RAM比较,不等则转移
    DJNZ   Rn,rel            D8~DF rel                     寄存器减1,不为零则转移
    DJNZ   dircet,rel        B5 dircet rel                 直接字节减1,不为零则转移
    NOP                     00                            空操作
    *=a10a9a8l               
    △=a10a9a80               


    布尔变量操作
    CLR    C                 C3                            清零进位
    CLR    bit               C2                            清零直接位
    SETB   C                 D3                            置位进位
    SETB   bit               D2                            置位直接位
    CPL    C                 B3                            进位取反
    CPL    bit               B2                            直接位取反
    ANL    C,bit             82 dit                        直接数“与”到进位
    ANL    C,/bit            B0                            直接位的反“与”到进位
    ORL    C,bit             72 bit                        直接位“或”到进位
    ORL    C,/bit            A0 bit                        直接位的反“或”到进位
    MOV    C,bit             A2 bit                        直接位送进位
    MOV    bit,C             92 bit                        进位送直接位
    JC     rel               40 rel                        进位位为1转移
    JNC    rel               50 rel                        进位位为0转移
    JB     bit,rel           20 bit rel                    直接位为1相对转移
    JNB    bit,rel           30 bit rel                    直接位为0相对转移
    JBC    bit,rel           10 bit rel                    直接位为1相对转移,然后清零该位     

    展开全文
  • 单片机课后习题

    千次阅读 2014-03-30 23:21:37
    第一章: 一、填空题  1. 1110 0EH 10011100 01100100  2. 4  3. 255 -51  4. 输入设备  5. 84  6. 630 * 8 * 1024  7. 位 字节 字 bit btype word  8.... 9....

    第一章:

    一、填空题

     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

      

    展开全文
  • 单片机 SJMP

    千次阅读 2014-05-08 14:07:09
    51单片机指令。 功能:短转移(Short Jump) 格式:SJMP rel ; 作用: PC  PC+2 , PC  PC+rel 短转移指令(-126—+129范围内的转移指令)  短转移指令的功能是先使程序计数器PC加1两次...
  • 51单片机之控制转移指令SJMP、LJMP等

    千次阅读 2020-04-22 09:44:57
    文章目录前言一、无条件转移指令LJMP addr16AJMP addr11SJMP relJMP @A + DPTR关于SJMP、AJMP、LJMP的选择二、条件转移指令JZ rel 前言 控制指令是将程序跳转到某个指定的地址,在顺序执行 控制指令是通过修改PC的...
  • 单片机期末考试题目及答案详解

    热门讨论 2020-07-30 23:33:37
    1.MCS—51单片机引脚信号,信号名称带上划线的表示该信号 或 有效。 2.通过堆栈操作实现子程序调用,首先要把 的内容入栈,以进行断点保护。调用返回时再进行出栈操作,把保护的断点送回 。 3.某程序初始化...
  • 单片机中常见英文缩写(51为例)

    千次阅读 2017-10-26 21:11:34
    单片机 英文缩写
  • 单片机

    千次阅读 多人点赞 2019-12-29 18:08:55
    单片机就是一个小的计算机,不过他没有计算机那么好,方便的输入输出设备,计算机的输入设备就是鼠标,键盘等,方便的很,输出设备就是显示器,将输出非常清晰的显示在屏幕上。但是单片机的输入输出都是他的引脚,...
  • 正确区分LJMP、AJMP、SJMP、JMP指令 MCS-51的控制转移类指令,共17条,分为无条件转移指令、条件转移指令、子程序调用和返回指令、空操作指令等四类。 无条件转移指令(共4条) LJMP addr16 ; PC〈—— ...
  • 单片机应用技术考试试题(五) (本试题分笔试题和操作题两部分。共100分,考试时间120分钟。) 第一部分 笔试题 (本部分共有4大题,总分60分,考试时间60分钟,闭卷) 一、填空题(每空1分,共20分) 1、8031单片机...
  • 单片机学习知识点全攻略

    千次阅读 2017-11-08 21:26:59
     什么是单片机 一台能够工作的计算机要有这样几个部份构成:CPU(进行运算、控制)、RAM(数据存储)、ROM(程序存储)、输入/输出设备(例如:串行口、并行输出口等)。在个人计算机上这些部份被分成若干块芯片,...
  • 延时与中断出错,是单片机新手在单片机开发应用过程,经常会遇到的问题,本文汇总整理了包含了MCS-51系列单片机、MSP430单片机、C51单片机、8051F的单片机、avr单片机、STC89C52、PIC单片机…..在内的各种单片机...
  • 单片机中无符号和有符号变量使用

    千次阅读 2013-01-15 12:41:30
    最近单片机课讲到了定时计数器,在C语言定时计数器的初值可以采用这种方式(假设计数10000次)TH0=(65536-10000)/256;TL0=(65536-10000)%6;这是通用的方法,65536-10000=55536=0xD8F0;赋值后TH0=0xD8,TL0=...
  • 51单片机资源扩展:扩展片外RAM

    千次阅读 2014-12-20 19:58:36
    51单片机资源扩展:从片内ROM跳转到片外ROM 一文扩展了单片机的程序存储器,4KB存储空间提升到64KB。其实,4K的代码空间还凑合,但是51自带的256B数据存储空间使用起来还真紧张,其中留给用户的连128B都不到,所以...
  • 51单片机汇编

    千次阅读 2013-07-18 16:32:29
    一个单片机所需执行指令的集合即为单片机的指令系统。单片机使用的机器语言、汇编语言及高级语言,但不管使用是何种语言,最终还是要“翻译”成为机器码,单片机才能执行之。现在有很多半导体厂商都推出了自己的...
  • 2006-05-13 22:32:25 摘要:需要显示的汉字较多时,单片机系统的汉字编码非常繁琐。本文介绍一种直接利用PC机的汉字内码作为单片机系统的汉字编码,以简化系统的设计。关键词:单片机 液晶显示器 29F040...
  • 源于一年前想自己动手给51写个OS,编译选Large模式,调试时整个流程都跑的好好的,可是烧写到片上后得不到预期的效果,后来查书才知道51单片机片上只有4KRom,如果没有扩展片外Rom,当访问4K以外的程序空间,程序...
  • 51单片机

    2020-06-11 20:19:17
    51单片机程序仿真!!! 设计包含一个矩阵式键盘电路和动态显示电路的单片机应用系统,通过根据按下不同的数字按键(0~9),在数码管上显示出自己学号的后8位。 各位大神帮忙挑挑错,或者问题太大了可以帮忙写一个新...
  • 单片机原理及应用》复习提纲

    千次阅读 多人点赞 2015-12-14 10:44:44
    单片机原理及应用》复习提纲 单片机应用系统的典型结构图   单片机应用系统核心硬件技术包括: 1.时序 2.中断 3.地址译码   单片机应用系统核心软件技术包括: 1.寻址...
1 2 3 4 5 ... 20
收藏数 877
精华内容 350
关键字:

单片机中sjmp是什么