


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PIC单片机汇编语言基础1、程序的基本格式先介绍二条伪指令:EQU标号赋值伪指令OR-一地址定义伪指令PIC16C5X在RESET后指令计算器PC被置为全“1”,所以PIC16C5XJI种型号芯片的复位地址为:PIC16C54/55:1FFHPIC16C56:3FFHPIC16C57/58:7FFH一般来说,PIC的源程序并没有要求统一的格式,大家可以根据白己的风格来编写。但这里我们推荐一种清晰明了的格式供参考。TITLEThisis;程序标题;名称定义和变量定义;F0EQU0RTCCEQU1PCEQU2STATUSEQU3RAEQU5RBEQU6RCEQU7111IPIC16C54EQU1F
2、FH;芯片复位地址PIC16C56EQU3FFHPIC16C57EQU7FFH;ORGPIC16C54GOTOMAIN;在复位地址处转入主程序ORG0;在0000H开始存放程序;;子程序区;DELAYMOVLW255111IRETLW0;;主程序区;MAINMOVLWB00000000'LOOPBSFRB7CALLDELAYBCFRB7CALLDELAY1:GOTOLOOP;END;程序结束注:MAIN标号一定要处在0页面内。2、程序设计基础1)设置I/O口的输入/输出方向PIC16C5X勺I/O口皆为双向可编程,即每一根I/O端线都可分别单独地由程序设置为输入或输出。这个过程由写I/
3、O控制寄存器TRISf来实现,写入值为“1”,则为输入;写入值为“0”,则为输出。MOVLW0FH;00001111(0FH输入输出TRIS6;将所的0FH写入B口控制器,;B口高4位为输出,低4位为输入。MOVLW0C0H11000000(0C0H2)检查寄存器是否为零如果要判断一个寄存器内容是否为零,很简单,现以寄存器F10为例:MOVF101;F10-F10,结果影响零标记状态位ZBTFSSSTATUSZ;F10为零则跳GOTONZ;Z=0即F10不为零转入标号NZ处程序;Z=1即F10=0处理程序3)比较二个寄存器的大小要比较二个寄存器的大小,可以将它们做减法运算,然后根据状态位C来判
4、断。注意,相减的结果放入W则不会影响二寄存器原有的值。例如F8和F9二个寄存器要比较大小:MOVF8,0SUBWF90F9W(F8)WBTFSCSTATUSZ;判断F8=F9否GOTOF8=F9BTFSCSTATUSC;C=0则跳GOTCF9>F8;C=1相减结果为正,F9>F8GOTOF9<F9;C=0相减结果为负,F9<F84)循环n次的程序如果要使某段程序循环执行n次,可以用一个寄存器作计数器。下例以F10做计数器,使程序循环8次。COUNTEQU10;定义F10名称为COUNT计数器)MOVLW8MOVWFCOUNTLOOPLOOPDECFSZCOUNT1;CO
5、UN减1,结果为零则跳GOTOLOOP;结果不为零,继续循环;结果为零,跳出循环“IFTHEN”格式的程序卜面以“IFX=YTHENGOTONEXT格式为例。MOVFX0SUBWF丫0;YW(X)WBTFSCSTATUSZGOTONEXT;X=Y跳到NEXT执行。6)“fornexT格式的程序aFOR-NEXT程序使循环在某个范围内进行。下例是“FORX=0TO5”格式的程序。F10放X的初值,F11放X的终值。STARTEQU10DAENDEQU11MOVLW0MOVWFSTART;0START(F10)MOVLW5MOVWFDAEND;5DAENIDF11)LOOPINCFSTART;1;
6、STAR旭加1MOVFSTART0SUBWFDAEND0;START=DAEND(X=5否)BTFSSSTATUSZGOTOLOOP;Xv5,继续循环;X=5,结束循环7)“DOWHILEEND格式的程序“DOWHIL-END程序是在符合条件下执行循环。下例是“DOWHILEX=1格式的程序。F10放X的值。XEQU10MOVLW1MOVWFX;1-X(F10),作为初值LOOPMOVLW1SUBWFX0BTFSSSTATUISZ;X=1否?GOTOLOOP;X=1继续循环8)查表程序查表是程序中经常用到的一种操作。下例是将十进制09转换成7段LED数字显示值。若以B口的RBARB6来驱动LE
7、D的ag线段,则有如下关系:设LED为共阳,则09数字对应的线段值如下表:1 十进数线段值十进数线段值0C0H592HC9H682HA4H7F8HB0H880H99H990HPIC的查表程序可以利用子程序带值返回的特点来实现。具体是在主程序中先取表数据地址放入vv接着调用子程序,子程序的第一条指令将W置入PG则程序跳到数据地址的地方,再由“RETLW指令将数据放入v返回到主程序。MOVLWTABLEMOVWF10111IMOVLW1段值ADDWF10,1CALLCONVERTMOVWF6LED111ICONVERTMOVWFRETLW0C0HRETLW0F9H卜面程序以F10放表头地址。;表头
8、地址-F10;1W准备取“1”的线;F10+W:“1”的数据地址;线段值置到B口,点亮;WPCTABLE;“0”线段值;“1”线段值RETLW90H“READ-DATARESTORE格式程序READ-DAT/A程序是每次读取数据表的一个数据,然后将数据指针加1,准备取下一个数据。下例程序中以F10为数据表起始地址,F11做数据指针。POINTEREQU11;定义F11名称为POINTERMOVLWDATAMOVWF10;数据表头地址-F10CLRFPOINTER;数据指针清零MOVFPOINTER0ADDWF100;W=F10+POINTERINCFPOINTER1;指针加1CALLCONVE
9、RT;调子程序,取表格数据CONVERTMOVWF2;数据地址-PCDATARETLW20H;数据RETLW15H;数据如果要执行“RESTORe,只要执行一条“CLRFPOINTER即可。10)延时程序如果延时时间较短,可以让程序简单地连续执行几条空操作指令“NOP。如果延时时间长,可以用循环来实现。下例以F10计算,使循环重复执行100次。MOVLWD100'MOVWF10LOOPDECFSZ101;F101F10,结果为零则跳GOTOLOOP111I延时程序中计算指令执行的时间和即为延时时间。如果使用4MHz振荡,则每个指令周期为1VS。所以单周期指令时间为1VS,双周期指令时间
10、为2pS。在上例的LOOP®环延时时间即为:(1+2)*100+2=302(VS)。在循环中插入空操作指令即可延长延时时间:MOVLWD100MOVWF10LOOPNOPNOPNOPDECFSZ101GOTOLOOP延时时间=(i+i+i+i+2*100+2=602(头S)用几个循环嵌套的方式可以大大延长延时时间。下例用2个循环来做延时:MOVLWD100MOVWF10LOOPMOVLWD16MOVWF11LOOP1DECFSZ11,1GOTOLOOP1DECFSZ10,1GOTOLOOP111I延时时间=1+1+1+1+(1+2)*16-1+1+2*100-1=5201(诉S)11
11、)RTCC计数器的使用RTCC是一个脉冲计数器,它的计数脉冲有二个来源,一个是从RTCC引脚输入的外部信号,一个是内部的指令时钟信号。可以用程序来选择其中一个信号源作为输入。RTCC可被程序用作计时之用;程序读取RTCCW存器值以计算时间。当RTCC乍为内部计时器使用时需将RTC革脚接VD或VSS以减少干扰和耗电流。下例程序以RTCC做延时:RTCCEQU1CLRFRTCC;RTCC青0MOVLW07HOPTION;选择预设倍数1:256RTCCLOOPMOVLW255;RTCC+数终值SUBWFRTCC0BTFSSSTATUSZ;RTCC=255GOTOLOOP111I这个延时程序中,每过2
12、56个指令周期RTCCW存器增1(分频比=1:256),设芯片使用4MH赤荡,则:延时时间=256*256=65536(S)RTCC是白振式的,在它计数时,程序可以去做别的事情,只要隔一段时间去读取它,检测它的计数值即可。12)寄存器体(BANK的寻址对于PIC16C54/55/56,寄存器有32个,只有一个体(BANK,故不存在体寻址问题,对于PIC16C57/58来说,寄存器则有80个,分为4个体(BANK0-BANK3在对F4(FS0的说明中可知,F4的bit6和bit5是寄存器体寻址位,其对应关系如下:Bit6Bit5BANK物理地址00BANK010十1FH1BANK130十3FH0
13、BANK250十5FH11BANK370H7FH当芯片上电RESE后,F4的bit6,bit5是随机的,非上电的RESET则保持原先状态不变。下面的例子对BANK仰BANK2勺30H及50H寄存器写入数据。例1.(设目前体选为BANK0BSF4,5;置位bit5=1,选择BANK1MOVLWDATAMOVWF10H;DAT230HBCF4,5BSF4,6;bit6=1,bit5=0选择BANK2MOVWF10H;DATA>50H从上例中我们看到,对某一体(BANK中的寄存器进行读写,首先要先对F4中的体寻址位进行操作。实际应用中一般上电复位后先清F4的bit6和bit5为0,使之指向BA
14、NK0以后再根据需要使其指向相应的体。注意,在例子中对30H寄存器(BANK1和50H寄存器(BANK2写数时,用的指令“MOVW1IDH'中寄存器地址写的都是“10H',而不是读者预期的“MOVWF30岳日“MOVWF5。H,为什么?让我们回顾一下指令表。在PIC16C5X的所有有关寄存器的指令码中,寄存寻址位都只占5个位:fffff,只能寻址32个(00"1FH寄存器。所以要选址80个寄存器,还要再用二位体选址位PA1和PAQ当我们设置好体寻址位PA1和PA0,使之指向一个BANK那么指令“MOVWITOH'就是将W为容置入这个BAN时的相应寄存器内(10
15、H,30H,50H,或70H。有些设计者第一次接触体选址的概念,难免理解上有出入,下面是一个例子:例2:(设目前体选为BANK0MOVLW55HMOVWF30H;欲把55h30H寄存器MOVLW66HMOVWF50H;欲把66h50H寄存器以为“MOVWF30L定能把W置入30H,“MOVWF5。L定能把W置入50H,这是错误的。因为这两条指令的实际效果是“MOVWF10H',原因上面已经说明过了。所以例2这段程序最后结果是F10H=66H而真正的F30H和F50H并没有被操作到。建议:为使体选址的程序清晰明了,建议多用名称定义符来写程序,则不易混淆。例3:假设在程序中用到BANK0B
16、ANK1BANK2的几个寄存器如下:BANK0地址BANK1地址BANK2地址BANK3地址EQU10HBANK0;BANK1;BANK2;DATA>F30H;DATA>F50HBEQU10HCEQU10H111IFSREQU4Bit6EQU6Bit5EQU5DATAEQU55H111IMOVLWDATAMOVWFABSFFSR,Bit5MOVWFBBCFFSR,Bit5BSFFSR,Bit6MOVWFC程序这样书写,相信体选址就不容易错了13) 程序跨页面跳转和调用下面介绍PIC16C5洲程序存储区的页面概念和F3寄存器中的页面选址位PA1和PA0两位应用的实例。(1) “GOT
17、O跨页面例:设目前程序在0页面(PAGE0,欲用“GOTO跳转到1页面的某个地方KEY(PAGEJ。(2) STATUSEQU3PA1EQU6PA0EQU5111IBSFSTATUSPA0;PA0=1,选择PAGES面GOTOKEY;跨页跳转到1页面的KEY111IKEYNOP;1页面的程序111I“CALI:跨页面例:设目前程序在0页面(PAGE0,现在要调用一一放在1页面(PAGE的子程序DELAY111IBSFSTATUSPA0;PA0=1选择PAGE侦面CALLDELAY;跨页调用BCFSTATUSPA0;恢复0页面地址111IDELAYNOP;1页面的子程序111I注意:程序为跨页CALL而设了页面地址,从子程序返回后一定要恢复原来的页面地址。(3)程序跨页跳转和调用的编写读者看到这里,一定要问:我写源程序(.ASM)时,并不去注意每条指令的存放地址,我怎么知道这个GOTO要跨页面的,那个CALL是需跨页面的?的确,开始写源程序时并知道何时会发生跨页面跳转或调用,不过当你将源程序汇编时,就会白动给出。当汇编结果显示出:XXX(地址)“GOTOoutofRange"XXX(地址)“CALLoutofRange"这表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 塔城职业技术学院《数字化建筑设计概论》2023-2024学年第二学期期末试卷
- 吉林体育学院《钢琴即兴伴奏(3)》2023-2024学年第一学期期末试卷
- 山东省青岛市崂山区青岛第二中学2025年高考模拟语文试题试卷含解析
- 浙江警察学院《预防医学新》2023-2024学年第二学期期末试卷
- 承德医学院《文学创作与实践》2023-2024学年第二学期期末试卷
- 安徽省六安二中、霍邱一中、金寨一中2025年招生全国统一考试复习检测试题(一)生物试题含解析
- 新疆农业大学《航天测控技术》2023-2024学年第二学期期末试卷
- 山西经贸职业学院《大学体育三》2023-2024学年第二学期期末试卷
- 广州华立科技职业学院《文化项目管理》2023-2024学年第一学期期末试卷
- 苏州市职业大学《公共空间室内设计》2023-2024学年第二学期期末试卷
- 《虚拟化与云计算技术应用实践项目化教程》 课件 项目4 VIRT-MANAGER创建和管理虚拟机
- 高频电灼仪产品技术要求深圳半岛医疗
- 龙门吊买卖合同
- Neo4j中文使用手册以及例子
- 交通设计课程设计
- 课件3:波束成形
- 04第四章(氢氧同位素)
- 人工智能基础与应用课件
- 固定资产盘点管理规定完整版
- 江苏扬州市梅岭小学二年级数学下册期末复习卷(一)及答案
- 妊娠、分娩和产褥期疾病病人的护理
评论
0/150
提交评论