单片机程序编写及相关指令
(1)指令的基本格式 MCS-51单片机指令主要由标号、操作码、操作数和注释4个部分组成,其中方括号括起来的是可选部分,可有可无,视需要而定。 START: MOV A,#7FH ;将立即数送累加器A [标号] <操作码> [操作数] [注释]
(2)汇编程序的基本结构
为了使程序结构清晰明了,方便修改、维护,一般可按下面结构书写程序。
ORG 0000H ;复位入口地址 LJMP START ;转移到程序初始化部分START ORG 0003H ;外部中断0入口地址 LJMP WAIBU0 ;转移到外部中断0的服务程序WAIBU0 ORG 000BH RETI …… START: MOV A,#7FH ;初始化程序部分 …… MAIN: MOV P1,A ;主程序部分 …… LJMP MAIN ;循环执行主程序 DELAY: MOV R0,#0FFH ;子程序 …… RET WAIBU0:PUSH A ;中断服务程序 …… RETI
2.相关指令
本项目相关指令主要有:MOV、RR、RL、SETB、CLR、 CPL、LJMP、DJNZ、LCALL、RET、ORG。 (1)数据传送指令:MOV 通用格式:MOV <目的操作数>,<源操作数> 举例:MOV A,#30H ;将立即数30H送入累加器A MOV P1,#0FH ;将立即数0FH送到P1口 (2)移位指令:RR、RL 循环右移:RR A ;将A中的各位循环右移一位 循环左移:RL A ;将A中的各位循环左移一位
循环移位指令示意图
(3)置位、清零、取反指令:SETB、CLR、CPL 举例:SETB C ;将进位标志C置“1” SETB P1.0 ;将端口P1.0置“1” CLR C ;将进位标志C清零 CLR P1.0 ;将端口P1.0清零 CPL C ;位标志C取反 CPL P1.0 ;端口P1.0取反 (4)无条件转移指令:LJMP 通用格式:LJMP <十六位程序存储器地址或以标号表示的十六位地址> 举例:LJMP MAIN ;转移到标号为“MAIN”处执行 其他无条件转移指令请参看相关内容。
(5)减1非0条件转移指令:DJNZ 通用格式:DJNZ <寄存器>,<相对地址> 举例:DJNZ R0,LOOP ;先对R0中的数减1,若R0≠0,转移到LOOP处执行 ;若R0=0,则顺序执行 下面的循环程序可作为软件延时程序。 MOV R0,#0FFH ;延时程序 LOOP2: DJNZ R0,LOOP2 该程序循环次数为255次,如果延时时间不够,可以编写如下循环嵌套 程序,以增加循环次数,达到更长时间的延时。 MOV R0,#0FFH ;延时程序 LOOP2: MOV R1,#0FFH LOOP1: DJNZ R1,LOOP1 DJNZ R0,LOOP2
(6)子程序调用和返回指令:LCALL、RET 子程序调用:LCALL <子程序的地址或标号> 举例:LCALL DELAY 子程序返回:RET (7)设置目标程序起始地址伪指令ORG 伪指令,主要用来指定程序或数据的起始位置,给出一些连续存放数据的确定地址,或为中间运算结果保留一部分存储空间以及表示汇编程序结束等。 指令格式:ORG <16位地址> 指明后面程序的起始地址,它总是出现在每段程序的开始。 举例:ORG 0000H LJMP MAIN;本条指令存放在从0000H地址开始的连续单元中
四单片机c语言入门之跳转语句
C语言控制语句中,除前述两篇文章中介绍的判断语句结构和循环语句结构之外,最后一种控制语句就是跳转语句结构了。
跳转语句包括break语句、continue语句、return语句以及goto语句四种
break语句结构
break语句作用是跳出当前循环,无论有几重循环,break永远只跳出自己所在的那一层循环,break一般用法是有条件的跳出while循环,以及用来跳出switch的选择判断(参考前述判断语句文章)。
举个例子,单片机中一般采用IO口来读取按键的状态(硬件如上图),需要实现的是按键每按下一次,自定义变量seft_count值自加1,直到按键按下10次为止(前一篇文章循环结构例子一样)。除前一篇采用条件判断的方式完成算法外,也可使用while加break的方式完成需求。
Continue语句结构
循环语句里有此语句时,程序运行到此语句时,不再执行循环体里continue后面的语句而是跳到下一次循环入口处执行下一次循环判断。简单来说,contine语句只是结束一次当前循环体内部执行的语句,不会跳出循环结构。
举个例子,单片机应用需要实现的功能是按键每按下一次,自定义变量seft_count值自加1,直到按键按下10次为止,如果应用需求是按下十次后,保持按键采样状态但是自定义变量值不再增加,那实现程序可以如下
return语句结构
return是表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值(也可不带参数直接返回),由return后面的参数指定。简单来说,return就是跳出当前return所处函数。
举个例子,单片机应用需要实现的功能是按键每按下一次,自定义变量seft_count值自加1,当按键按下10次后,返回主函数执行空跑指令。
goto语句结构
goto语句也称为无条件转移语句,其一般格式如下:
goto 语句标号;
其中语句标号是按标识符规定书写的符号,放在某一语句行的前面,标号后加半角冒号“:”。语句标号起标识语句的作用,与goto句配合使用。goto语句简单说来就是粗暴的转移,需要注意的就是转移到哪里,用户可以在希望转移到的语句前面加一个语句标识就可以了。
基本结构
loop:
语句;
goto loop;
goto语句使用简单,此处就不举例了,不过需要注意的是,goto指令跳转很容易造成程序机构混乱,并且该指令在单片机应用中实质上涉及到人为强制无条件的干预程序运行地址指针,需要慎之又慎。
后续
到本章节为止,c语言控制语句已经跟大家分享完毕,下一章节将分享c语言运算相关入门知识,请大家关注。
相关问答
8051 单片机 共有多少条 指令 ?这些指令按照功能分可分为几类?分别为多少条?这些指令寻址方式有哪几种?果然这年头懂汇编的人不多了啊。8051单片机共有111条指令,按指令功能分,可分为数据传送类29条,算术运算类24条,逻辑运算类24条,位操作类12条,控制转移类2...
mcs51 指令 执行过程分为?MCS-51单片机的指令如果按功能划分可以分为五类:1,数据传送类指令:完成数据在单片机内部之间的传送。分为8位数和16位两种。除了奇偶位外,指令的执行对PSW...
51系列 单片机 编程 指令 表怎么用?使用51系列单片机编程指令表,首先需要了解指令表的结构和编码方式。指令表按照操作码进行分类,每个操作码对应不同的指令。在编程时,根据需要选择相应的指令,...
单片机 中xrl什么意思?XRL是一条单片机逻辑运算指令,执行异或运算。“异或”运算是当两个操作数不一致时结果为1,两个操作数一致是时结果为0。有六种语法:XRLA,Rn;A和Rn中的值按...
怎么让 单片机 多个引脚接收到信号做出一个 指令 ?通过设置不同的中断优先级和中断向量,可以在单片机的程序中同时使用多个外部中断,实现多个引脚的响应。在中断服务程序中根据不同的引脚标识执行相应的指令,...
单片机 的DB 指令 使用-ZOL问答DB是伪指令,定义字节命令,貌似用在数据表的比较多,你那个应该这样写ORG0060H...不是所有的单片机都可以用串口烧的STC单片机可以的推荐用官方推荐...
单片机 中CLR是什么?CLR是英文简写,实际就是clear清除的意思单片机中CLR指令其实只有两类、三种用法:第一类:字节操作:仅有将A清0一条指令,即:CLRA第二类:位操作1、CL...C...
单片机指令 voidmain(void)?指令,汇编语言中,一行一行的,才叫做指令。voidmain(void),是C语言,不是指令。学C语言,就要学很多垃圾概念;学汇编语言,就简单多了。对单片机的C语言编程...
单片机 da 指令 abh怎么算?单片机汇编言语,十进制加法运算,十进制调整指令daa,使用方法为紧跟加法指令。如mova,#38h;a=#38hadda,#27h;a=#38h+#27h=#5f...
单片机 pc是通过什么改变的?单片机PC(programcounter)寄存器是通过指令寄存器(instructionregister)中的指令地址来改变的。当单片机执行一条指令后,PC寄存器会自动增加一个值,使其...