欢迎来到天天文库
浏览记录
ID:27863319
大小:84.50 KB
页数:12页
时间:2018-12-06
《单片机编程之汇编语言基础-PIC单片机汇编指令.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、单片机编程之汇编语言基础-PIC单片机汇编指令 1、程序的基本格式 先介绍二条伪指令: EQU——标号赋值伪指令 ORG——地址定义伪指令 PIC16C5X在RESET后指令计算器PC被置为全“1”,所以PIC16C5X几种型号芯片的复位地址为: PIC16C54/55:1FFH PIC16C56:3FFH PIC16C57/58:7FFH 一般来说,PIC的源程序并没有要求统一的格式,大家可以根据自己的风格来编写。但这里我们推荐一种清晰明了的格式供参考。 TITLETh
2、isis……;程序标题 ;-------------------------------------- ;名称定义和变量定义 ;-------------------------------------- F0 EQU 0 RTCC EQU 1 PC EQU 2 STATUS EQU 3 FSR EQU 4 RA EQU 5 RB EQU 6 RC EQU 7 ┋ PIC16C54EQU1FFH;芯片复位地址 PIC16C56EQU3FFH
3、 PIC16C57EQU7FFH ;----------------------------------------- ORGPIC16C54GOTOMAIN ;在复位地址处转入主程序 ORG 0 ;在0000H开始存放程序 ;----------------------------------------- ;子程序区 ;----------------------------------------- DELAYMOVLW255 ┋ RETLW0 ;--------
4、---------------------------------- ;主程序区 ;------------------------------------------ MAIN MOVLWB‘00000000’ TRISRB ;RB已由伪指令定义为6,即B口 ┋ LOOP BSFRB,7CALLDELAY BCFRB,7CALLDELAY ┋ GOTOLOOP ;------------------------------------------- END ;程序
5、结束 注:MAIN标号一定要处在0页面内。 2、程序设计基础 1)设置I/O口的输入/输出方向 PIC16C5X的I/O口皆为双向可编程,即每一根I/O端线都可分别单独地由程序设置为输入或输出。这个过程由写I/O控制寄存器TRISf来实现,写入值为“1”,则为输入;写入值为“0”,则为输出。 MOVLW0FH ;00001111(0FH) 输入输出 TRIS6 ;将W中的0FH写入B口控制器, ;B口高4位为输出,低4位为输入。 MOVLW0C0H;11000000(0C0
6、H) RB4,RB5输出0RB6,RB7输出1 2)检查寄存器是否为零 如果要判断一个寄存器内容是否为零,很简单,现以寄存器F10为例: MOVF10,1 ;F10→F10,结果影响零标记状态位Z BTFSSSTATUS,Z ;F10为零则跳 GOTONZ ;Z=0即F10不为零转入标号NZ处程序 ┋ ;Z=1即F10=0处理程序 3)比较二个寄存器的大小 要比较二个寄存器的大小,可以将它们做减法运算,然后根据状态位C来判断。注意,相减的结果放入W,则不会影响二
7、寄存器原有的值。 例如F8和F9二个寄存器要比较大小: MOVF8,0 ;F8→W SUBWF9,0 ;F9—W(F8)→W BTFSCSTATUS,Z ;判断F8=F9否 GOTOF8=F9 BTFSCSTATUS,C ;C=0则跳 GOTOF9>F8 ;C=1相减结果为正,F9>F8 GOTOF9< F9 ;C=0相减结果为负,F9 ┋ 4)循环n次的程序 如果要使某段程序循环执行n次,可以用一个寄存器作计数器。下例以F10做计数器,使程序循环8次。
8、 COUNTEQU10 ;定义F10名称为COUNT(计数器) ┋ MOVLW8 MOVWFCOUNTLOOP ;循环体 LOOP ┋ DECFSZCOUNT,1 ;COUNT减1,结果为零则跳 GOTOLOOP ;结果不为零,继续循环 ┋ ;结果为零,跳出循环 5)“IF……THEN……”格式的程序 下面以“IFX=YTHENGOTONEXT”格式为例。 MOVFX,0 ;X→W SUBWFY,0 ;Y—W(X)→W BTFSCSTATUS,Z
此文档下载收益归作者所有