第五讲 汇编语言程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
知识点复习-最小系统
由于PIC单片机具备上电复位的功能,设计最小系统的 时候可以直接把MCLR拉成高电平就可以了,可以不需 要而外的阻容电路。
上电
VCC
<20MHz
72ms的延时 等待VDD稳定 1024个时钟周期 等待晶振输出稳定
上电定时器
起振定时器(时钟周期 等于晶振频率的倒数)
22uF
单片机开始工作
第五讲 4. 汇编程序下载到硬件
第五讲 4. 汇编程序下载到硬件
第五讲 4. 汇编程序下载到硬件
RC2
第五讲 4. 汇编程序下载到硬件
PIC单片机外设编程方法: 初始化 设置相关寄存器 设置TRISC, 将RC2设置 为输出状态
访问相关寄存器,控制 或者读取寄存器内容
加载数值到PORTC, 控制 RC2输出高电平或者低 电平
0x01 0x02 0x03 0x04 0x05
INCLUDE ”P16F877.INC” COUNTER EQU 31H SUM EQU 30H ADDR EQU 22H ORG 0000H NOP MOVLW D'5' MOVWF COUNTER MOVLW 20H MOVWF ADDR CLRF SUM BSF STATUS,C LOOP MOVLW 01H SUBWF COUNTER,F 20H BTFSS STATUS,C GOTO STOP 21H MOVF ADDR, W 22H ADDWF SUM, F INCF ADDR, F 23H GOTO LOOP 24H STOP NOP END
要求, 1装载的初始值要能够使得循环能够进行3次,每一次循环结果,即所有 寄存器的结果要截图贴在文档里面一并答应出来。详见作业模板
类似于C语言中的 a=0; for(i=1; i≤10; i++) { a++; }
第五讲 3. 汇编程序的结构
初始化 对20H, 30H, 及W寄 存器内容进行清零
将计数值装载到 20H
类似于C语言中的 a=0; for(i=1; i≤3; i++) { a++; }
(20H)=(20H)+1 (20H)==0? No (30H)=(30H)+1;
YES
满足循环三次的计数值 等于多少? 0xFC?0xFD?
(30H)=(30H)+1;
结束
典型的循环结构
INCLUDE "P16F877A.INC" ;加载头文件 ORG 0000H ;程序从0000H开始 NOP ;0 ;空操作 CLRF 0x30 ;1 CLRF 0x20 ;2 CLRW ;3 MOVLW 0xfc; ;4 or 0xfd MOVWF 0x20; ;5 INC1 INCFSZ 0x20,1 ;6 0x30内容+1,若零则PC+2,反之则PC+1 GOTO LP1 ;7 GOTO LP2 ;8 LP1 INCF 0x30,1 ;9 GOTO INC1 ;10 LP2 NOP NOP ;12 END
第五讲 2. 常用伪指令
(6)BANKSEL 数据存储器体域选择伪指令 作用:直接选择数据存储单元所在的体域。 格式:BANKSEL nn nn为数据存储器单元的地址,对PIC16F877A来说,字长 为9位,范围0到512
注意:BANKSEL只能改变STATUS的 RP0和RP1,所以只能
用于直接寻址的情况,不适用于间接寻址的场合。
更准确地说是地址/操作数
寻址方式是什么?
补充参考书《计算机组成原理》p311 第七章
第五讲 1. 汇编语言指令格式 汇编语言是对机器语言的改进,它采用便于 人们记忆的符号化语言,即用一些符号或者 字符串来表示操作码、操作数和地址码等。
汇编语言指令格式: 标号 操作码(助记符) LP1 MOVWF 0x55H
第五讲 2. 常用伪指令
(1)ORG-定位伪指令 例程:
ORG 0000H NOP ;MPLAB 特定需要 MOVLW 20h …… …… ORG 00FFH FUNCTION1 MOVLW 20H …… …… ORG 01FFH FUNCTION2 MOVLW 20H …… ……
第五讲 2. 常用伪指令
直接寻址的基本步骤
访问121H
间接寻址的基本步骤 1,设置STATUS的IRP位 (设置第8位); 2,将低八位地址装载到 FSR(设置第0到7位); 例:BSF STATUS,IRP MOVLW 21H; MOVWF FSR; MOVF INDF,0;
1,设置STATUS 的 RP0 和RP1 位,设置第8,7位。 2,在直接寻址指令中给 第 6到0位。
第五讲 2. 常用伪指令
(6)BANKSEL 数据存储器体域选择伪指令 例:PICT4-38 比较 INCLUDE “PIC16F877.INC” ORG 0000H NOP BANKSEL 121H MOVLW 0F0H MOVWF 21H END
BCF STATUS RP1 BSF STATUS RP0
(2)EQU-赋值伪指令 作用:对一个符号名赋予一个特定的值 格式: 符号名 EQU nn 注意:符号名区分大小写 在PIC16F877A单片机中,nn字长8位,范围0-255 nn表达方式可以是十六进制,二进制或十进制等 例程: VALUE EQU 35H ADDR EQU 20H ORG 0000H NOP START MOVLW VALUE MOVWF ADDR END
第五讲 3. 汇编程序的结构
第五讲 3. 汇编程序的结构
初始化 对20H, 21H,22H,23H 及 W寄存器内容进行清零 将乘数1及乘数2分别装 载到20H和21H
输入是什么? 输出是什么?
YES
将乘数2装载到W寄存器
(20H)=(20H)-1 (20H)==0? No (W)=(21H)+(W)
操作码 操作数地址
35H 35H W寄存器
0 20H 35H 35H
20h 20H
FSR
0 20H
数据传送方向
W寄存器
知识点复习 寻址方式
直接寻址的基本步骤 MOVWF 20H;
如果是121H呢?
间接寻址的基本步骤 MOVLW 20H; MOVWF FSR; MOVWF INDF,1;
知识点复习 寻址方式
第五讲 1. 汇编语言指令格式
操作数的表达方式: 二进制: B’0110 0100’ 十进制: D’100’ 八进制: Q’144’ 十六进制:0x64 或64H
推荐使用
第五讲 2. 常用伪指令
伪指令:用于对编译器的控制、定位、输入/输出 的非正式指令。 与指令的区别:编译过程中不产生机器码 (1)ORG-定位伪指令 作用:定义了紧跟其后的指令机器码的真实存放地址 格式:ORG nnnn nnnn的范围:0 到 8192
第五讲 4. 汇编程序下载到硬件
下载之前一定要先看硬件电路图,并做好如下准备工作 1,用万用表检查电路 连接是否正常,是否不同线路之间存在短路。 2,用万用表检查电源 供电电压是否正常?极性有没有弄反? 3,连接电源和电路
4,检查器件是否工作正常 例如:第一次实验中,采用杜邦线连接控制蜂鸣器 的IO口引脚和VDD。测试蜂鸣器是否鸣叫
(5)LIST-列表选项伪指令 作用:设置汇编参数,可设置的参数达10余种。 最常用的两种: P=<单片机型号>,例如: LIST P=16F877 R=<默认的数值>,例如: LIST R=BIN; 二进制 LIST R=DEC; 十进制
例程: INCLUDE “P16F877A.INC” LIST R=DEC ORG 0000H NOP MOVLW 44 END
例:BSF STATUS, RP0 BCF STATUS, RP1 MOVF 21H,0
INCLUDE "P16F877.INC" COUNTER EQU 31H SUM EQU 30H ORG 0000H NOP MOVLW D'5' MOVWF COUNTER MOVLW 20H MOVWF FSR CLRF SUM BSF STATUS,C LOOP MOVLW 01H SUBWF COUNTER,F BTFSS STATUS,C GOTO STOP MOVF INDF, W ADDWF SUM, F INCF FSR, F GOTO LOOP STOP NOP END
来自百度文库
第五讲 2. 常用伪指令
(7)PAGESEL 程序存储器体域选择伪指令
第五讲 3. 汇编程序的结构
编程的步骤:
1问题解读 2设计流程 图 3编写程序
4调试
第五讲 3. 汇编程序的结构
第四讲作业:模仿实例PICT4-34 编写如下功能汇编程序。
对通用寄存器 0x20H 装载初始值, 并利用INCFSZ 对0x20H进行加1, 若 (0x20H)=0, 则跳出循环结束程序, 若(0x20H)≠0, 则对0x30H的内容+1,并继续循环,直到0x20H的值变为零。
微机原理与单片机技术 第五讲 汇编语言程序设计
黄之峰 广东工业大学 自动化学院
本讲内容
1. 汇编语言指令格式 2. 常用伪指令 3. 汇编程序的结构和常用子程序设计
第五讲 1. 汇编语言指令格式 知识点复习
机器语言是由一条条语句构成的,每一条语句又能准 确表达某种语义。例如,他可以命令机器做某种操作, 指出参与操作的数或者信息在什么地方等。计算机就 是连续执行每一条机器语句而实现全自动工作的。每 一条机器语言称之为机器指令。全部的机器指令的集 合称之为机器的指令系统。 指令由操作码和地址码两部分组成。
第五讲 2. 常用伪指令
(3)END-程序结束伪指令 作用:通知编译器停止对源程序的编译,一个程序有且 只要一条END
(4)INCLUDE-文件调用伪指令 格式:INCLUDE”文件名” 例程: INCLUDE”P16F877A.INC” ORG 0000H NOP ……
第五讲 2. 常用伪指令
第五讲 3. 汇编程序的结构
第四讲 习题 课本 P 66 页,
11, 请编写乘法程序。两个乘数分别存放 在寄存器20H和21H,计算结果的低8位存 放在寄存器22H,高8位存放在寄存器23H 基本思路,用循环做加法的方式来实现
INCLUDE "P16F877A.INC" ORG 0000H NOP CLRF 20H CLRF 21H CLRF 22H CLRF 23H CLRW ;清零 MOVLW 12H ;将12H放到W寄存器 MOVWF 20H ;将W寄存器的值放到寄存器20H MOVLW 14H ;将14H放到W寄存器 MOVWF 21H ;将W寄存器的值放到寄存器21H DEC1 DECFSZ 20H,1 ;将寄存器20H的值减1,不为0时继续执行下一条指令,反之,跳转 GOTO LP1 GOTO LP2 LP1 ADDWF 21H,0 ;两寄存器的值相加,并将结果放回W寄存器 MOVWF 22H ;解释见上,即寄存器22H存放的是低8位的结果 BTFSS STATUS,0 ;判断是否有进位,有则跳转,无则继续执行下一条指令 GOTO DEC1 GOTO DEC2 DEC2 INCF 23H,1 GOTO DEC1 LP2 NOP END
(W)→(22H)
是否发生进位? YES END (23H)=(23H)+1
NO
知识点复习
• 直接寻址。
数据传送方向 • 间接寻址
例: 初始条件(W)=35H (20H)=00H (FSR)=20H MOVWF INDF;
操作码 操作数地址的存放地址
例: 初始条件 (W)=35H (20H)=0 MOVWF 20H;
第五讲 4. 汇编程序下载到硬件
寄存器名称 TRISC 地址 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 0x87 RC7 方 向 0x07 RC7 RC6 方 向 RC6 RC5 方 向 RC5 RC4 方 向 RC4 RC3 方 向 RC3 RC2 方 向 RC2 RC1 方 向 RC1 RC0 方 向 RC0
操作数1,操作数2
;注释
;将W寄存器的值放入0x55H中
第五讲 1. 汇编语言指令格式
标号(非指令必须项,在程序中被引用(如跳转时) 才需要) 作用: 程序在汇编是被赋予FLASH程序存储器地址 的具体值,即,代表指令的地址 命名规则:字母数字或下划线组成,开头必须为字 母或下划线。例如:LOOP1,_HERE,HERE,DEC1 书写格式: FINDASCII ADDWF PCL,F ;910 或标号放到单独一行: FINDASCII ADDWF PCL,F ;910