pic单片机编程串烧,pic单片机汇编语言讲解下篇
看到这篇文章的朋友,想必大家对pic单片机均具备一定兴趣,或对pic单片机具备一定使用需求。前文中,小编曾对pic单片机汇编语言进行过部分讲解。本文中,将对pic单片机的清零等指令加以讲解,以帮助大家更好掌握pic单片机编程。
一、清零指令
1.寄存器清零指令
实例:CLRW;寄存器W被清零
说明:该条指令很简单,其中W为PIC单片机的工作寄存器,相当于MCS-51系列单片机中的累加器A,CLR是英语Clear的缩写字母。
2.看门狗定时器清零指令。
实例:CLRWDT;看门狗定时器清零(若已赋值,同时清预分频器)
说明:WDT是英语Watchdog Timer的缩写字母。CLR见上述说明。注意该两条指令无操作数。
3.寄存器f清零指令。指令格式:CLRF f
实例:CLRF TMRO;对TMRO清零
说明:在PIC系列8位单片机中,常用符号F(或f)代表片内的各种寄程器和F的序号地址。F取值按PIC系列不同型号而不同,一般为Ox00~Ox1F/7F/FF。TMRO代表定时器/计数器TMRO,所以CLRF对寄程器清零,采用了直接寻址方式直接给出要访问的寄存器TMRO。
4.位清零指令。指令格式 BCF f,b
实例:BCF REG1,2;把寄存器REG1的D2位清零
说明:BCF是英语Bit Clear F的缩写。指令格式中的F,同上说明;符号b是表示PIC片内某个8位数据寄存器F的位号(或位地址),所以b的取值为0~7或D0~D7。实例中REG是Register的缩写。实例中的2代表指令格式中的b=2即寄存器REG1的D2位。
通过上述四条清零指令格式和实例,可以说明,学习PIC系列8位单片机的指令时应首先了解指令的助记符意义(功能),再有就是它的表达方式。初学者没有必要死记指令,重要是理解和实践。
二、面向字节、常数与控制操作的指令
1.传送立即数至工作寄存器W指令
指令格式:MOVLW k;k表示常数、立即数和标号
说明:MOVLW是Move Literal to w的缩写
实例:MOVL 0x1E;常数30送W
2.I/O口控制寄存器TRIS设置指令
指令格式;TRIS f
说明;TRIS f是Load TRIS Register的缩写。其功能是把工作寄存器W的内容送入I/O口控制寄存器f。当W=0时,置对应I/O口为输出;W=1,置I/O口为输入。
实例:MOVLW 0x00 ;把00H送入W
TRIS RA ;置PIC RA口为输出
MOVLW 0xFF ;把FFH送入W
TRIS RB ;置PIC RB口为输入
说明:这是PIC汇编语言中常用的几条指令,即设置某个I/O口(这里是RA口和RB口)为输入或输出的语句。可见,识读指令时,一应充分理解语句格式的功能,二应前后联系阅读。
3.W寄存器内容送寄存器f(W内容保持不变)指令
指令格式:MOVWF f
说明:MOVWF是Move W to f的缩写
实例:MOVLW 0x0B;送0BH送W
MOVWF 6 ;送W内容到RB口
说明:第一条指令0x0B(常数11)送工作寄存器W,第二条指令,把W内容常数11送到寄存器F6中,查表F6即为RB口,所以PORT_B(B口)=0BH=D11
4.寄存器f传送指令
指令格式:MOVF f,d
说明:MOVF是Move f的缩写。F代表PIC中的某个寄存器。指令中的d规定:d=0时,f内容送W;d=1时,f内容送寄存器。
实例:MOVF 6,0 ;RB口内容送W
MOVWF 8 ;RB口内容送f8
说明:第一条指令中的6代表寄存器f=6,查寄存器表f=6为RB口;0代表d=0,代表选择的目标为寄存器W。第二条指令中的8代表寄存器f=8。所以两条指令结果是把RB口的内容送f8。至于f8内容是多少?还应在汇编语言开始时附加指令,这里从略。
5.空操作指令
指令格式:NOP
说明:NOP是英语No OperaTIon的缩写。NOP无操作数,所以称为空操作。执行NOP指令只使程序计数器PC加1,所以占用一个机器周期。
实例:MOVLW 0xOF;送OFH到W
MOVWF PORT_B ;W内容写入B口
NOP ;空操作
MOVF PORT_B,W ;读操作
说明:该三条指令是一种对I/O口的B口连续操作的实例,其目的达到写入B口的内容要读出时,应保证写、读之间有个稳定时间,因此加入了空操作指令NOP。
6.无条件跳转指令
指令格式:GOTO k
说明:执行该条指令时,将指令转移到指定的地址(跳转)。指令中的k,常与程序中的标号联系起来。
实例:见第9条指令中
7.寄存器内容减1,结果为零的间跳指令
指令格式:DECFSZ f,d
说明:DECFSZ是英语Decrement f,Skip of not 0的缩写。符号f,d代表的意义,前述已作说明。该条指令是指寄存器的内容减1存入W(d=0)或f(d=1)中。若指令执行结果减1不为零,指令顺序执行;为零时,就间跳下一条指令后再执行(等效顺序执行一条空指令NOP),实际指令中,当d=1时,该项常被略去。
8.寄存器内容加1,结果为零间跳指令
指令格式:INCFSZ f,d
说明:INCFSZ是英语Increment f,Skip of 0的缩写。该条指令与上一条(7)指令差别仅在于“1”上,即执行这条指令时,寄存器f内容加1,若结果不为零,则指令顺序执行;为零则指令间跳执行。执行这条指令的其它逻辑关系与上条相同。
9.子程序返回指令
指令格式:RETLW k
说明:RETLW是Return Literal to W的缩写。该指令代表子程序返回,返回前先把8位立即数送W。
以上便是小编此次想和大家分享的内容,希望大家喜欢。
单片机入门-要从汇编开始
简介
单片机 是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器、显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等功能集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。单片机的发展先后经历了4位、8位、16位和32位等阶段。8位单片机由于功能强,被广泛用于工业控制、智能接口、仪器仪表等各个领域,8位单片机在中、小规模应用场合仍占主流地位,代表了单片机的发展方向,在单片机应用领域发挥着越来越大的作用。
51单片机
单片机的开发主要包括CPU开发、程序开发、 存储器开发、计算机开发及C语言程序开发,同时得到开发能够保证单片机在十分复杂的计算机与控制环境中可以正常有序的进行。程序开发嵌入式系统的合理应用得到了大力推广,对程序进行开发时要求能够自动执行各种指令,这样可以快速准确地采集外部数据,提高单片机的应用效率。
为啥选汇编入门
很多电子爱好者都想学习单片机这门技术,初学者入门从底层硬件入手基于汇编和c两种语言,详细的介绍了单片机的原理,指令,寄存器,以及接口等,后面还为你准备了一些小的设计。都是从单片机最基本的东西讲起,相信你一定能看懂,并且学会单片机这门有意思的技术,有什么问题可在文章后面的评论留言。
初学单片机汇编有利于深入结构的了解,但是真正工作的时候,用的是C语言;汇编语言一般只在处理器启动的时候用一下,或C语言插入汇编的调用,之后就全是C语言,汇编移植性太差,但是它的效率高,时间精度能控制好。一般汇编都不需要你自己写,拿来用就行,主要还是C语言。可以肯定的告诉 你,99%用C语言。
51单片机开发板
现在单片机的编程大多 是C语言完成
但有时代码中必须嵌入汇编语言解决某些特定的问题
对于程序调试 汇编语言更是不可或缺。
直接使用汇编指令编写单片机程序,对硬件的控制更加直接,可以直接操作物理地址,寄存器,端口等;其它更高级的语言(如:C语言)对硬件的控制是依赖于类库来实现的。并且,对于一些对程序大小和运行速度有非常严苛要求的项目而言,都必须使用汇编指令。C语言只是为了方便编写,与机器打交道的其实都是2进制得代码,汇编语言就是这些代码好记忆的名称和规则,只是比C语言难理解些。
单片机
单片机最小系统
包括电源电路 、时钟晶振电路 、复位电路 。
时钟晶振电路、复位电路
程序存储器中有七个特设的地址,其功能分别是用于:0000H 复位时ROM的地址;0003H 外部中断0入口地址;000BH 定时器计数器0溢出中断入口地址;0013H 外部中断1入口地址;001BH 定时器计数器1溢出中断入口地址;0023H串行口中断入口地址;002BH 定时/计数器2溢出中断入口地址。
0000H地址是单片机复位时的PC地址,从0000H开始执行程序。
其他6个地址是单片机相应不同的中断时,所跳向对应的入口地址。
该表也叫中断向量表或称中断向量,在写程序时,这些地址不要占用。使用时一般在这6个地址写跳转指令,如AJMP,LMJP等等。
单片机汇编指令
为解决某些特定的问题代码中必须嵌入汇编语言以代替C语言完成的单片机的编程,汇编语言对于程序调试是不可或缺的。它包括:算术操作类指令,布尔变量操作类指令,逻辑操作数指令,控制转移类指令。
常用单片机汇编指令:
1 .MOV A,Rn 寄存器内容送入累加器
2 .MOV A,direct 直接地址单元中的数据送入累加器
3 .MOV A,@Ri (i=0,1)间接RAM 中的数据送入累加器
4 .MOV A,#data 立即数送入累加器
5 .MOV Rn,A 累加器内容送入寄存器
6 .MOV Rn,direct 直接地址单元中的数据送入寄存器
7 .MOV Rn,#data 立即数送入寄存器
8 .MOV direct,A 累加器内容送入直接地址单元
9 .MOV direct,Rn 寄存器内容送入直接地址单元
布尔变量操作类指令:
1. CLR C 清进位位
2 .CLR bit 清直接地址位
3 .SETB C 置进位位
4 .SETB bit 置直接地址位
控制转移类指令
1. ACALL addr11 绝对(短)调用子程序
2 .LCALL addr16 长调用子程序
3 .RET 子程序返回
4 .RETI 中断返回
5 .AJMP addr11 绝对(短)转移
6 .LJMP addr16 长转移
7 .SJMP rel 相对转移
8 .JMP @A+DPTR 相对于DPTR 的间接转移
9. JZ rel 累加器为零转移
10. JNZ rel 累加器非零转移
11. CJNE A,direct,rel 累加器与直接地址单元比较,不相等则转移
12 .CJNE A,#data,rel 累加器与立即数比较,不相等则转移
13 .CJNE Rn,#data,rel 寄存器与立即数比较,不相等则转移
14 .CJNE @Ri,#data,rel 间接RAM 单元与立即数比较,不相等则转移
15 .DJNZ Rn,rel 寄存器减1,非零转移
16 .DJNZ direct,rel 直接地址单元减1,非零转移
17 .NOP 空操作
闪烁灯汇编代码
流程图
闪烁灯汇编代码:
ORG 0000H ;初始地址
LJMP A0A0 ;跳转至I/O初始化
ORG 002BH
A0A0:MOV P0,#0FFH ;P0口初始化
MOV P1,#0FFH ;P1口初始化
MOV P2,#0FFH ;P2口初始化
MOV P3,#0FFH ;P3口初始化
A0A1:SETB P1.5 ;P1.5置1(高电平)
LCALL DELA0 ;调用延时
CLR P1.5 ;P1.5清0(低电平)
LCALL DELA0 ;调用延时
LJMP A0A1 ;跳转至开头循环
DELA0:MOV 68H,#5 ;延时
DELA1:MOV 67H,#248
DELA2:MOV 66H,#250
DJNZ 66H,$
DJNZ 67H,DELA2
DJNZ 68H,DELA1
RET
END
闪烁灯电路_亮
闪烁灯电路_灭
相关问答
单片机 用C 语言 编程很好学,为什么还要用 汇编 呢?现在一般单片机都支持C语言和晦涩难懂的汇编语言,在许多介绍单片机应用技术的教材中有相当一部分是用汇编语言编写的这说明汇编语言在学习单片机和编写单片机程...
c51 单片机汇编语言 ,八个小灯,依次亮灯,间隔0.5s,最后一个点亮后,全部灭掉,请教大神怎么编程?;如果你的灯在p1端口的话,你试试我的程序ORG0000HSTART:MOVP1,#7EHACALLDELAYMOVP1,#0BDHACALLDELAYMOVP1,#0DBH...
为什么大学 单片机 都讲 汇编语言 ?对单片机而言,汇编语言有以下优势:1.汇编语言的执行效率高,比C语言的执行效率都高。2.用汇编语言可以锻炼以机器指令编码的能力,可以以最优化的方式编写代码...
如果我想能看懂 单片机 的程序,需要怎样学习 语言 ?非常感谢你发来的邀请,我很高兴回答你的问题!现在单片机编程语言主要有两种,一种是汇编语言、一种是C语言。汇编语言要求要对单片机内部结构有要熟悉,由于其...
单片机 用 汇编语言 编写用一个控制器控制8个LED灯亮?ORG0000HLJMPMAINORG000BHLJMPT0ISRORG0030HMAIN:MOVTMOD,#01HMOVTH0,#HIGH(65536-50000)MOVTL0,#LOW(65536...
51 单片机汇编语言 的ifelse如何实现?51单片机汇编语言的ifele语句实现如下:if语句由关键字“if”开始,后面跟随一个逻辑表达式。if语句根据该逻辑表达式的值来决定哪些语句会被执行。if语句可以...
单片机汇编语言 的PCL PCH是什么意思?PCL和PCH是单片机程序中的两个重要寄存器,分别代表程序计数器和程序计数器高字节。PCL是程序计数器的低字节,用于存储下一条指令的地址,而PCH则是程序计数器的...
STC 单片机 能用 汇编 写程序吗?指令和C51有什么区别?当然可以用和汇编语言写。其实STC就是51内核的单片机。指令系统当然和c51单片机兼容的。不过有的STC的外设比标准的C51丰富,比如有的STC有P4口,普通的C51就没...
单片机 C51的 汇编语言 编程[回答]pragma只是用于之间潜入asm代码,不是变了相的混合编程技术,它不能直接调用其他文件(注意是文件)中的函数。真正意义上的多模块编程,每个模块之间都...
单片机 C51的 汇编语言 编程pragma只是用于之间潜入asm代码,不是变了相的混合编程技术,它不能直接调用其他文件(注意是文件)中的函数。真正意义上的多模块编程,每个模块之间都...