新编单片机第4章80C51的汇编语言程序的设计精选文档PPT课件

合集下载

第4章 80C51单片机汇编语言程序设计(新)

第4章 80C51单片机汇编语言程序设计(新)

DW BR1 ;BRTAB+2、BRTA+3

精选版课件ppt
25
初始化部分
循环结构
对于循环次数计数器、地址指针赋初值,对于使用到 的寄存器或者存储单元赋初值,为循环作准备。
循环体部分
为下一次循环创造条件:修改循环次数计数器、地址 指针,避免死循环。
循环的判断与控制:判断循环次数计数器,或者检查 判断循环条件。
熟悉单片机汇编程序常用的伪指令 了解汇编语言程序的格式
精选版课件ppt
2
汇编语言源程序的编辑和汇编
精选版课件ppt
3
机器编辑→交叉汇编→串行传送
*.ASM
地址 8000
8002
机器码
标号 助记符指令
7820
SORT: MOV R0,#20H
7F07
MOV
精选版课件ppt
4
编辑、汇编
编辑:
JC NEXT3
;x<5,则转NEXT3
CJNE A,#10,NEXT2 ;与10比较
JNC NEXT4
; x>10,则转NEXT4
MOV R0,#0
;5≤x ≤10,y=0
SJMP NEXT5
MOV R0,A
DEC R0
;x<5,y=x-1
SJMP NEXT5
MOV R0,A
INC R0
;x>10,y=x+1
x-1(x<5)
Y=
0(5≤x ≤ 10)
x+1(x>10)
要根据x的大小来决定y值,在判断x<5和y>10时,采用CJNE和JC 以及CJNE和JNC指令进行判断。
精选版课件ppt
19
NEXT1: NEXT2:

第4章 80C51单片机汇编语言程序设计

第4章 80C51单片机汇编语言程序设计

Chapter 4 Program Design of Assemble Language主讲教师:黄英Contents:4.1 Introduction of Assemble Language (2)4.1.1 Features (2)4.1.2 Format (2)4.2 Basic structures (2)4.2.1 Sequential program (2)4.2.2 Branching program (2)4.2.2.1 Single branching program (2)4.2.2.2. Multi-branching program (3)1.By using some CJNE instructions (3)2.By using “address table” (4)3.By using “jump instruction table” (4)4.By using stack operation (5)4.2.3 Circular Structure (5)4.3 Delay time Program (6)4.3.1 Single-cycle delay time program (6)4.3.2 Long delay time program (Multi-cycle) (6)4.3.3 Adjusting delay time range (6)4.3.4 Get different timing with basic delay program (6)4.4 Pseudoinstruction (7)4.5 How to edit and assemble the source program (7)4.1 Introduction of Assemble Language4.1.1 Features1. P roduces the optimized program.2. P rogrammer must be familiar with hardware. 3. M anage and control hardware directly . 4. N ot universal, can ’t be transplanted.4.1.2 Format (Detailed information: P77)[<Label>]: <opcode> [<operand>]; [<note>]4.2 Basic structures3 types:✧ Sequential Structure ✧ Branching Structure ✧ Circular Structure4.2.1 Sequential programFor example: 3-byte unsigned constants addition4.2.2 Branching program4.2.2.1 Single branching program·Using jump instructions :P67-68: JZ, JNZ, CJNE, DJNZ (条件转移指令) P73-74: JC, JNC, JB, JNB, JBC (位控制转移指令)Assumed that: 50H~52H cells of internal RAM have three augends respectively (beginning with high bytes ), 53H~55H cells of internal RAM have three addends respectively (beginning with high bytes ).Requirement: Design a program to put the additionresult into 50H~52H cells (beginning with high bytes ), and the carry bit into 20H bit of bit addressable area .MOV R0, #52H MOV R1, #55H ① MOV A, @R0ADD A, @R1 MOV @R0, A DEC R0 DEC R1② MOV A, @R0 ADDC A, @R1MOV @R0, ADECR0 (50H/51H/52H )= 11H/22H/33H DEC R1 (53H/54H/55H )= 77H/88H/99H ③ MOV A, @R0ADDC A, @R1 112233H MOV @R0, A + 778899H CLR AADDC A, #00H ? ④ MOV R0, #20H ?MOV @R0, A ?For example: Compare the valuesSTAR T: CLR C; clear the carry bitMOV DPTR, #ST1 ; set the data pointer MOV X A, @DPTRMOV R2, A ; put the 1stconstant into R2INC DPTR MOV X A, @DPTR ; put the 2st constant into ASUBB A, R2 ; A = A – R2= 2st - 1stJNC BIG1 ; if no carry, then the 2st constant is bigger . XCH A, R2 ; else 1st constant is bigger , and put into A BIG0: INC DPTR ; let DPTR points to the result cell. MOVX @DPTR, A ; save the bigger constant. RETBIG1: MOV X A, @DPTR ; put the 2st constant into ASJMP BIG04.2.2.2. Multi-branching program· Instruction Set has no multi-branching instruction. · 4 methods to realize multi-branching:1.By using some CJNE instructions 2.By using “address table ”3.By using “jump instruction table ” 4.By using stack operation1.By using some CJNE instructionsCJNEA, #data, rel ; put the branching number into A.For example: temperature control systemCJNE A, 55H, LOOP1 ; if T a ≠T55(upper value limit ),then j ump to LOOP1 AJMP FH ; T a =T55,j ump to main program FH (返回) LOOP1: JNC JW ; if CY ≠0,T a >T55, then j ump to JW (降温)CJNE A, 54H, LOOP2 ; if T a ≠T54(low er value limit ),then j ump to LOOP2 AJMP FH ; T a =T54,j ump to main program (FH ) LOOP2: JC SW ; if CY =1,T a <T54, then j ump to SW (升温)FH: RETAssumed that: There are three continuous cells (ST1, ST2, ST3)in the externalRAM where ST1 and ST2 have 8-bit unsigned binary constants respectively .Requirement: Design a program to find the bigger constant , and put it into ST3 cell.Assumed that: There is a temperature control system, which current temperature value (Ta ) is saved in A . The lower value limit (T54)of temperature control is saved in the internal RAM cell 54H , The upper value limit (T55)of temperature control is saved in the internal RAM cell 55H .Requirement: Design a program to control temperature under the conditions: If Ta > T55, then executes the temperature-down processing subprogram (JW ); If Ta < T54, then executes the temperature-up processing subprogram (SW ); If T55≥Ta ≥T54, then returns to the main program (FH ).2.By using “offset address table ”Step:(1)Set up a “offset address table ”(2)Using instruction: JMP @A+DPTRwhere: Offset table base address → DPTR Offset → A (offset value =BR0/BR1/BR2/BR3 - BRTAB )R3: 00, 01, 02, 03 MOV A, R3 ; put the branching number into AMOV DPTR, # BRT AB ; let DPTR point to base address of offset table MOVC A, @A+DPTR ; fetch the offset v alue.JMP @A+DPTR ; j ump to the corresponding subroutine. (A is offset value, DPTR is the address of BRT AB ); PC = A+DPTR BRT AB: DBBR0_BRTAB ; offset value of BR0 DB BR1_BRTAB ; offset value of BR1 DB BR2_BRTAB ; offset value of BR2 DBBR3_BRTAB; offset value of BR3BR0: MOV A, @R0 ; 00 ; fetch data from internal RAM to A (R0 saves low 8-bit address ) SJMP DONE ; stopBR1: MOV X A, @R0; 01; fetch data from ext ernal RA M (low er 256B )to A (R0 saves low 8-bit address ) SJMP DONE; stopBR2: MOV A, R1; 02; put high address into A < 4K = 212 = 24·28 > (R1 saves high 8-bit address ) ANL A, #0FH ; fetch low 4-bit from high address, and clear high 4-bit. ANL P2, #0F0H ; fetch high 4-bit from P2 port, and clear low 4-bit of P2 ORL P2, A ; not change high 4-bit of P2, and send low 4-bit of P2MOV X A, @R0 ; fetch data from external RAM (4KB )to A (R0 sav es low 8-bit address )SJMP DONE; stopBR3: MOV DPL, R0; 03; put low 8-bit address of ext ernal RA M to DPL MOV DPH, R1 ; put high 8-bit address of external RAM to DPHMOV X A, @DPTR; fetch data from external RAM (64KB )to A DONE : SJMP $; stop3.By using “jump instruction table ” For example:R3: 00, 01, 02, 03, … MOV A, R3 ; put the branching number into A RL A ; A = branching number × 2 MOV DPTR, # BRT AB ; let DPTR point to base address of offset table JMP @A+DPTR ; j ump to the corresponding subroutine, PC = A+DPTR BRT AB: AJMP ROUT0 ; j ump to ROUT0 AJMP ROUT1 ; j ump to ROUT1 AJMP ROUT2 ; j ump to ROUT2AJMP ROUT3 ; j ump to ROUT3 … AJMP ROUTn ; j ump to ROUTnWhy “RL A ” ?When R3 = 00, need j ump to BRT AB + 0, so A = 00, When R3 = 01, need j ump to BRT AB + 2, so A = 02, When R3 = 02, need j ump to BRT AB + 4, so A = 04, When R3 = 03, need j ump to BRT AB + 6, so A = 06.Assumed that: R3 saves branching number. BRTAB denotes the base address of jump instruction table.Requirement: Design a program to realize multi-branching. Offset table (offset value=BR0/BR1/BR2/BR3 - BRTAB )Jump instruction table4.By using stack operationSteps: (1)Put the 16-bit address into stack(2)Using RET instruction to get PC value from stack For example:·R3: 00, 01, 02, 03 MOV DPTR, # BRT AB ; let DPTR point to base address of offset table MOV A, R3 ; put the branching number into A RL A ; A = branching number × 2 MOV R1, A ; R1 = 2·R3 INC A ; A = 2·R 3 + 1 MOVC A , @A +DPTR ; fetch low 8-bit address to A PUSH ACC ; and put low 8-bit address into Stack. MOV A, R 1 MOVC A , @A +DPTR ; fetch high 8-bit address to A PUSH ACC ; and put it into Stack. RET ; set PC value from stack. Get high 8-bit address first, and then low 8-bit address . BRT AB: DW BR0 ; 16-bit address of branching subroutine 0DW BR1 ; 16-bit address of branching subroutine 1 DW BR2 ; 16-bit address of branching subroutine 2 DW BR3 ; 16-bit address of branching subroutine 3 …DW BRn ; 16-bit address of branching subroutine n4.2.3 Circular StructureMethod: Using conditional jump instructions.For example:MOV R2, #0FFH ; set the initial value of the length counter. MOV R0, #3FH ; set the initial value of the string pointer. LOOP: INC R2 ; R2 = 00H, 01H,… INC R0 ; R0 = 40H, 41H,…CJNE @R0, #0DH , LOOPRETAssumed that: R3 saves branching number .BRTAB denotes the base address of jump instruction table.Requirement: Design a program to realize multi-branching.Assumed that: There is a character string that adopts “Enter ” symbol as the ending flag. This string is saved in the internal RAM beginning with 40H cell. Requirement: Design a program to get the length of this string.16-bit address t able. Pay attention to the operation of DW!4.3 Delay time Program4.3.1 Single-cycle delay time programMOV R5, #TIME; 1LOOP: NOP ; 1 NOP ; 1 DJNZ R5, LOOP ; 2If f osc = 6MHz, then machine cycle T M :So total delay time: T max =1+(1+1+2)×2us ×TIME; TIME = 00H-FFH, 0-255, cycles 265 times=1+(1+1+2)×2us ×256 = 1+2048 = 2049us4.3.2 Long delay time program (Multi-cycle )MOVR5, #TIME1 ; 1LOOP2:MOV R4, #TIME2 ; 1 LOOP1:NOP; 1 NOP ; 1 DJNZ R4, LOOP1 ; 2 DJNZ R5, LOOP2 ; 2 RET; 2If f osc = 6MHz, then total delay time T max : T max = 1+((1+(1+1+2)×256+2)×256)+ 2 )× 2us = 1+ 525828 = 525829us4.3.3 Adjusting delay time range·by adding or deleting instructions that don ’t affect program function.MOV R0, #TIME1LOOP:ADD A, R1 ; 1 INC DPTR; 2DJNZ R0, LOOP; 2If f osc = 6MHz, then the delay time T of the cycle body is as follow :T = (1+2+2)×2us ×TIME = 10×TIME (us ) MOV R0, #TIME1LOOP: ADD A, R1 ; 1 INC DPTR ; 2 NOP; 1DJNZ R0, LOOP; 2If f osc = 6MHz, then the delay time T of the cycle body is as follow :T = (1+2+1+2)×2us ×TIME = 12×TIME (us )4.3.4 Get different timing with basic delay programMOV R0, #05H; 5s delay time LOOP1:LCALL DELA Y; 1s delay time DJNZ R0, LOOP1MOV R0, #0A H; 10s delay time LOOP2:LCALL DELA Y; 1s delay time DJNZ R0, LOOP2MOV R0, #14H; 20s delay time LOOP3:LCALL DELA Y ; 1s delay time DJNZ R0, LOOP32us126MHz1T M =⨯=4.4 Pseudoinstruction7 pseudoinstructions:ORG, END, EQU, DB, DW, DS, BIT(Read P93)Note: DB, DW, and DS are only used for program memory.4.5 How to edit and assemble the source program·hand assemble·Machine edit: get source program: *. asm·Across assembleHome Work of Chapter 4P98 (一)1、4 (二)6。

第4章 80C51单片机汇编语言程序设计

第4章  80C51单片机汇编语言程序设计
第四章 汇编语言程序设计
按照语法格式 编写源程序 *.ASM *.C 按照语法格式 将源程序翻译 成机器代码 计算机识别的 二进制代码 *.OBJ
高级语言如 C++
汇编语言如 MCS-51指令
编译
目标文件
汇编
目标文件
1
本章结构
4.1 单片机程序设计语言概述 4.4 汇编语言编辑和汇编及其伪指令 4.2 汇编语言程序的基本结构形式
顺序程序结构 分支程序结构 循环程序结构
4.3 汇编语言程序设计举例
2
4.1
概述
4.1.1、 程序设计语言及语言处理程序
程序设计语言分:机器语言、汇编语言和中高级语言 1.机器语言: •硬件识别,二进制,无需翻译、直接执行,面向机器; •速度快,效率高,难以辨认和记忆,易错,难修改。 地址 2000H 2002H 机器码 78 30 E6 源程序 ORG 2000H MAIN: MOV R0,#30H MOV A,@R0
22
2.1 使用多条CJNE指令
假定分支序号值保存在累加器A中,则可使用
CJNE A, #data, rel
(A)=0?
转向0分支
(A)=1?
转向1分支
(A)=2?
转向2分支
23
例4.3某温度控制系统,采集的温度值(Ta)放在累加器A中。此外,在内部 RAM54H单元存放控制温度下限制(T54),在55H单元存放控制温度上限 制(T55)。若Ta >T55,程序转向JW(降温处理程序);若Ta<T54,则 程序转向SW(升温处理程序);T55≥Ta≥T54,则程序转向FH(返回主程 序)。 程序如下: CJNE A,55H,LOOP1 ;Ta ≠T55,转向LOOP1 AJMP FH ;Ta=T55,返回 LOOP1:JNC JW ;若C=0,表明Ta>T55,转降温程序 CJNE A,54H,LOOP2 ;Ta ≠T54,转向LOOP2 AJMP FH ; Ta=T54,返回 LOOP2:JC SW ;若C=1,表明Ta<T54,转升温程序 FH: RET

单片机课程第4章80C51汇编程序设计精品PPT课件

单片机课程第4章80C51汇编程序设计精品PPT课件

MOV R4,#12H MOV R5,#2BH MOV R0,#33H
NOP ACALL BMUL
MOV @R0,#00h MOV R7,#04
SJMP $
DEC R0
DEC R0
DEC R0
DEC R0
子程序:
BMUL: MOV A,R3 MOV B,R5 MUL AB ACALL RADD MOV A,R3 MOV B,R4 MUL AB INC R0 ACALL RADD MOV A,R2 MOV B,R5 MUL AB INC R0 INC R0 ACALL RADD MOV A,R2 MOV B,R4 MUL AB INC R0 ACALL RADD INC R0
@R0,A ;循环处理
R0
;
R7,LOOP ;循环修改,判结束
$
;结束处理
结束
【例4-5】将内部RAM起始地址为60H的数据串传送到外部RAM中 起始地址为1000H的存储区域,直到发现‘$ ’字符停止传送。
开始
置初值 Y
循环结束? N 循环处理 循环修改
结束处理
结束
MAIN:MOV MOV
LOOP0:MOV CJNE SJMP
教学重点:
1、 源程序形成目标程序的步骤 2、 伪指令与单片机指令的本质区别 3、 分支、循环、子程序及按键、LED显示程序的设计
教学难点:
程序的设计及实现
4.1.1 汇编语言程序设计过程
汇编语言,生成的目标程序占内存空间少、运行速 度快,具有效率高、实时性强。
高级语言,对系统的功能描述与实现简单,程序阅 读、修改和移植方便,适合于编写复杂的程序。
0000H MAIN 0040H R7,#16 R0,#60H A,#55H @R0,A R0 R7,LOOP $

第4章 80C51汇编语言程序设计

第4章 80C51汇编语言程序设计
• ② 应尽量采用循环结构和子程序 • ③ 尽量少用无条件转移指令 • ④ 在设计程序时,还要考虑程序与数据的
存放地址, • ⑤ 对于通用子程序,要考虑保护现场 • ⑥ 对于中断处理,除了保护处理程序中用
到的寄存器外,还要保护程序状态字 • ⑦ 充分利用累加器
4-2 基本结构程序设计
4.2.1 顺序结构程序 例4 1 双字节无符号数加法。被加数存放
解:延时程序的延时时间主要与两个因素有关:一 是所用晶振的频率,另一个是延时程序中的循环 次数。在晶振频率为12MHz的已知条件下, 一个机器周期为1μs,执行一条DJNZ Rn, rel的指令为2μs,则延时50ms的子程序 如下:
4-3 子程序设计
• 子程序也可以调用子程序,称为子程序嵌 套。如图4- 10所示。
解:两个单字节无符号数比较大小的方 法通常是做减法,然后根据是否产生 借位判断大小。还有一点要注意:累 加器A 在减法运算前装的是被减数, 减法运算后装的是差。思路框图如图 4 -3所示。
4.2.3 循环结构程序
循环结构程序常见的两种结构:一是先 执行后判断形式,这种结构循环处理部分 至少要执行1次,如图4- 5(a)所示; 另一种是先判断后循环形式,这种结构中 循环处理部分可以1次也不执行,如图45(b)所示。循环结构程序通常有以下 3个部分组成。
4.3.2 子程序设计时应注意的基本事项 • ① 子程序取名 • ② 现场保护与恢复 • ③ 参数的传递 • ④ 子程序应具有通用性
4.3.3 子程序设计实例
• 1. 查表子程序设计 所谓查表,就是根据某个数狓进入表格中
寻址,在很多情况下,通过 查表比通过计 算要简单得多,查表程序也较为容易编制。 在80C51指令系统中,有两条查表指 令:

第4章 80C51单片机汇编语言程序的设计课件共71页PPT资料

第4章 80C51单片机汇编语言程序的设计课件共71页PPT资料
例:两个8位无符号二进制数比较大小。假设在外部RAM中有 ST1、ST2和ST3共3个连续单元(单元地址从小到大),其中ST1 、ST2单元中存放着两个8位无符号二进制数N1,N2,要求找出其 中的大数并存入ST3单元中。
课程:单片机技术 教材:单片机基础
解:(1)分析任务:比较两个数的大小 (2)算法:算术运算、控制转移 (3)程序结构:单分支 (4)数据类型:单字节、二进制、无符号数 (5)数据结构:单元地址升序排列 (6)RAM单元安排:外部RAM单元 (7)采用寄存器间接寻址方式(R0、R1或DPTR) (8)程序设计流程框图; (9)程序清单;
(A)=0? N
(A)=1? N
(A)=2?
N
Y 转 向 0分 支
Y 转 向 1分 支
Y 转 向 2分 支
课程:单片机技术 教材:单片机基础
例:已知:127≥X≥-128,求Y。设X,Y分别存放在外部RAM
1000H和2000H单元中。
1
x0
解:(1)分析任务:解方程 (2)算法:控制转移 (3)程序结构:多分支
例:假定三字节无符号数相加,其中一个加数在内部RAM的 50H、51H和52H单元中,另一个加数在内部RAM的53H、54H和55H 单元中,要求把相加之和存放在50H、51H和52H单元中,进位存 放在位寻址区的00H位中。 解:(1)分析任务:求两数之和
(2)算法:加法运算(ADD或ADDC)
课程:单片机技术 教材:单片机基础
2)如果加数N1在内部RAM 50H、51H和52H单元中,而加数N2与
和N3均在外部RAM0053H、0054H和0055H单元中,其它条件不变,
应如何修改程序?
3)如果N1、N2,N3均存放在外部RAM单元,应如何修改程序?

80C51单片机汇编语言程序设计PPT优秀课件

80C51单片机汇编语言程序设计PPT优秀课件

2021/6/3
8
MOV R0, #52H;被加数的低字节地址
MOV R1, #55H;加数的低字节地址
MOV A, @R0
ADD A, @R1 ;低字节相加
MOV @R0, A ;存低字节相加结果
DEC R0
DEC R1
MOV A, @R0
ADDC A, @R1;中间字节带进位相加
MOV @R0, A ;存中间字节相加结果
单元,其中ST1和ST2单元中存放着两个无符号二进制 数,要求找出其中的大数并存入ST3单元中。
解:(1)分析任务:比较两个数的大小
(2)算法:算术运算、控制转移
(3)程序结构:单分支
(4)数据类型:单字节、二进制、无符号数
(5)数据结构:单元地址升序排列
(6)RAM单元安排:外部RAM单元
(7)采用寄存器间接寻址方式(R0、R1或DPTR)
难度较大。要求使用者必须精通单片机的硬件系 统和指令系统。缺乏通用性,程序不易移植。
2021/6/3
2
4.1.2 单片机使用的高级语言
对于8051单片机,现有4种语言支持,即汇编、 PL/M、C和BASIC。
C语言最终得到广泛应用。 可以大大提高单片机应用系统研制的开发效率。移 植性好。 高级语言的不足:生成的目标代码较长,导致应用程 序运行速度较慢。
根据实际问题的要求和指令系 统的特点,确定解决问题的具 体步骤。根据任务要求,对不 同的计算方法进行比较,选择 最适宜的算法。解决“怎样做” 的问题。
将解决问题的具体步骤用一种 约定的几何图形、指向线和必 要的文字说明描述出来,用图 形的方法描绘解决问题的思路。
7
例:3字节无符号数相加:其中被加数在内部RAM的50H、

第4章 80C51单片机指令系统PPT课件

第4章 80C51单片机指令系统PPT课件
2
第4章 80C51单片机指令系统 4.1 单片机指令系统概述
2020/8/19
第4章 80C51单片机指令
3
系统
4.1.1 指令概述
指令:是CPU根据人们的意图来执行某种操作的命令。 指令系统:是计算机所能够执行的全部指令的集合。 程序:是按人们的要求所编制的指令操作序列。 程序设计语言:是编写程序的某种规则。
3 . #data
8位立即数
4 . #data16
16位立即数
如:MOV DPTR,#data16
5 . direct
8位片内RAM单元(包括SFR)的直接地址
如:MOV direct,#data
;#data direct
6 . addr11
11位目的地址,用于ACALL和AJMP指令中
7 . addr16
NOP HERE: SJMP
HERE
;注释字段 ;0→A
;10→R1 ;3→R2
;(A)+(R2)→A ;R1内容减1不为零,则跳转到
;LOOP一行,循环
2020/8/19
第4章 80C51单片机指令
6
系统
4.1.3 指令中的常用符号
1. Rn(n=0~7)当前选中的工作寄存器R0~R7
2 . Ri(i=0,1)当前选中的、作地址指针的寄存器R0、R1
第4章 80C51单片机指令系统
4.1 单片机指令系统概述 4.2 80C51单片机指令寻址方式 4.3 80C51 单片机指令分类介绍
2020/8/19
第4章 80C51单片机指令
1
系统
第一部分
整体概述
THE FIRST PART OF THE OVERALL OVERVIEW, PLEASE SUMMARIZE THE CONTENT
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
标号(即符号地址)
非数字字符开头,后跟字母、数字、“-”、“?” 等
不能用已定义的保留字(指令助记符、伪指令等)
指后令跟助英文记冒符号“:”
是指令功能的英文缩写。
2020/11/28
6
操作数
数据:二进制(B) 十进制(D或省略D) 十六进制(H),注意A~F开头时要加“0” ASCII码,如 ‘A’,‘1245’
2020/11/28
3
流程描述
流程图符号
开始或结束符号
判断分支符号
工作任务符号
程序连接符号
程序流向符号
程序流向符扫描、处理
2020/11/28
4
4.1.2 程序编制的方法和技巧
强化模块观念
程序模块(主程序模块、各种子程序模块) 模块化优点:分块设计、便于阅读、调试方便
2020/11/28
14
定义位地址为符号名伪指令BIT
符号名 BIT 位地址表达式 如: ST BIT P1.0 ;将P1.0的位地址赋给符号名ST CF BIT 0D7H ;将位地址为D7H的位定义为符号名
用BIT定义的“符号名”一经定义便不能重 新定义和改变
其它一些伪指令参见教材表4.2
2020/11/28
起始地址设定伪指令ORG
ORG 表达式
ORG 8000H
表达式通常为十六进制地址,例: START:MOV A,#30H
ORG可多次使用,但地址值的顺序要由小到大… …
结束汇编伪指令END
END
该伪指令位于源程序的最后一行。
2020/11/28
12
定义字节数据表伪指令DB
[标号:] DB 字节数据表
15
4.3 基本程序结构
一般不影响标志寄存器PSW的状态。
传送类指令有两大类
一般传送( MOV ) 特殊传送,如: MOVC MOVX PUSH、POP XCH、XCHD SWAP
高 ↓
+、-
正号、负号
+5、-6
↓ ↓
*、/、MOD
乘、除(取商)、取余 数
17 / 5 即3; 17 MOD 5 即2


+、-
加、减
5+4 即 9; 5-4 =即1
↓ ↓
SHL、SHR
左移、右移
2 SHL 2即8;8 SHR 2 即 2
低· AND、OR、XOR
与、或、异或
45H AND 0FH即05H
目标程序的连接
.OBJ、.LIB经BL51.EXE生成无扩展名的绝对地址目标文件 绝对地址目标文件可以用于仿真器调试 调试无误的目标文件用OH51.EXE转换为.HEX文件 .HEX文件经编程器写入单片机存储器
2020/11/28
11
4.2.2 伪指令
伪指令,也叫汇编命令。仅对汇编过程进行指示 伪指令无对应的单片机可执行代码
高级语言,对系统的功能描述与实现简单,程序阅 读、修改和移植方便,适合于编写复杂的程序。
2020/11/28
2
4.1 程序编制的方法和技巧
4.1.1 程序编制的步骤 任务分析
明确任务:功能要求、技术指标 运行环境调研
算法设计
将实际问题转化为计算机处理的程序算法 算法比较与优化(内存需求与运行速度)
C源文件
.LST
.C
库文件 .LIB
调试目标文件 (绝对地址) 无扩展名
可烧写 目标文件
.HEX
连接器 BL51.EXE
转换器 OH51.EXE
.M51
映像文件
仿真调试
写入芯片
2020/11/28
9
4.2.1 源程序的编辑和汇编 源程序的编辑
依据汇编语言规则 用好伪指令 符号不用中文 SJMP $ 用于调试 以 .ASM存盘
如: ORG 1000H DB -2,-4,-6,8,10,18
定义字数据表伪指令DW
[标号:] DW 字数据表
ORG 1400H DATA1:DW 324AH,3CH
……
2020/11/28
13
1000H FEH 1001H FCH
FAH 08H 0AH 12H
1400H 32H 1401H 4AH 1402H 00H 1403H 3CH
第4章 80C51的汇编语言程序设计
4.1 程序编制的方法和技巧 4.2 源程序的编辑和汇编 4.3 基本 4.4 及其调用 4.5 I/O设备的并口直接驱动示例
2020/11/28
1
单片机应用系统由硬件系统和应用程序构成
应用程序设计方法
汇编语言 高级语言
汇编语言,生成的目标程序占内存空间少、运行速 度快,具有效率高、实时性强。
采用循环和子程序
使程序占用空间减少、结构清晰 循环初值和结束条件,避免“死机”现象 子程序的现场保护(注意栈平衡、寄存器内容)
对中断子程序还有注意保护PSW的内容
2020/11/28
5
4.1.3 汇编语言的语句格式
Keil的汇编器A51可以识别的语句形式为:
[标号:] 指令助记符 [操作数1,] [操作数2,] [操作数3,] [;注释]
<、>、=、<>、 <=、>=
比较运算符
MOV A,X>8; 若X>8为真,则为MOV A,01H 若X>8为假,则为MOV A,00H
2020/11/28
8
4.2 源程序的编辑和汇编
目标程序的产生过程如下图:
汇编源文件 .ASM
汇编器 A51.EXE
目标文件 (浮动地址)
.OBJ
.LST
编译器 C51.EXE
大端模式
定义常值为符号名伪指令EQU
符号名 EQU 常值表达式
符号名为: ❖地址 ❖常数 ❖段名 ❖字符串 ❖寄存器名 ❖位名
比较:标号只能是地址
LEN EQU SUM EQU BLOCK EQU
CLR MOV MOV LOOP:ADD INC DJNZ MOV
10 21H 22H A R7,#LEN R0,#BLOCK A,R0 R0 R7,LOOP SUM,A
2020/11/28
10
ORG LJMP ORG MAIN:MOV MOV MOV LOOP:MOV INC DJNZ SJMP END
0000H MAIN 0040H R7,#16 R0,#60H A,#55H R0,A R0 R7,LOOP $
源程序的汇编
汇编源程序转为目标程序的过程叫汇编 汇编通常在Windows下的集成开发环境完成 用A51.EXE汇编生成.OBJ、.LIB及.LST
❖ 符号:符号名、标号或“$”(PC的当前值) ❖ 表达式:由运算符和数据构成(见表4.1)
注释
英文分号“;”开头
2020/11/28
7
表4.1
优先级
运算符
功能
表达式及其结果示例
()
括号
4*(5+6)即44
NOT、HIGH、 取反、取高字节、取低 NOT 55H 即AAH;
LOW
字节
HIGH 1234H 即12H
相关文档
最新文档