页数:38页文件大小:256.0 KB来源: 单片机原理及应用ppt课件
本课件先说明程序与程序设计语言的概念、汇编语言的特点与程序设计步骤,随后依次讲解顺序、分支、循环与子程序四种基本程序结构,每种结构均配有可直接参考的源程序示例,包括BCD码转换、查表、多字节求和与数据排序等典型应用。
程序设计语言计算机程序设计语言是计算机能够理解和执行的语言。它随着计算机的诞生而诞生,它随着计算机的发展而发展。迄今为止,计算机的程序设计语言很多,但通常分为机器语言、汇编语言、高级语言三种。1、机器语言是一种直接为计算机识别和执行的机器级语言。有两种表现形式:一种是二进制形式,一种是十六进制形式。机器语言的二进制形式由二进制代码“0”和“1”构成,可以直接存放在计算机存储器内。机器语言的十六进制形式,由十六个数字符0-F组成。机器语言难读、难写、难记、难改,一般不用来编写程序。2、汇编语言是人们用来替代机器语言进行程序设计的语言。由助记符、保留字和伪指令组成。3、高级语言是面向过程和问题并能独立于机器的通用程序设计语言。
程序设计步骤分析问题确定算法绘制程序流程图分配内存单元编写汇编源代码调试
程序设计的基本技术顺序程序设计1分支程序设计2循环程序设计3子程序设计4
3.1顺序程序设计 MOVA, 40H;将BCD数的十位放A的低4位 SWAPAANLA, #0FHMOVB, #10MULAB;十位乘以10ANL40H, #0FH;将BCD数的个位保留在40H单元中 ADDA, 40H;10位乘以10加个位 MOV40H, A3.1顺序程序设计MOVDPTR, #SQTABMOVA, 60HMOVCA, @A+DPTRMOV61H, A…SQTAB: DB 0,1,4,9,16,25,36,49,64,81
3.2分支程序设计分支结构流程图单分支多分支
3.2分支程序设计 MOVA, 40HMOV61H, 41HCJNEA, 41H, $+3JNCAGEQ;A≥(41H)则无借位 XCHA, 61H;A<(41H)有借位AGEQ: MOV60H,A;A与(61H)交换 SJMP$ END3.2分支程序设计 MOV A, 40HMOV B, 41HCJNE A, B, NOT_ EQUMOV 61H, A;相等 MOV 60H, AAJMP DONENOT_ EQU: JC SMALLMOV 60H, A;大于 MOV 61H, BAJMP DONESMALL: MOV 61H, A;小于 MOV 60H, BDONE: SJMP $3.3循环程序设计循环结构流程图先执行,后判断先判断,后执行循环控制
3.3循环程序设计 MOV4EH, #0MOV4FH, #0MOVR7, #20;设置计数器 MOVR0, #50;设置间接地址指针LOOP: MOVA, 4FHADDA, @R0;加一单元的内容 MOV4FH, ACLRAADDCA,4EH;加累加时产生的进位,存在4EH中 MOV4EH, AINCR0;修改间址指针 DJNZR7,LOOPSJMP$ END3.3循环程序设计 MOV 4EH, #0MOV 4FH, #0MOV R0, #50H;设置间接地址指针 MOV R7, #20;设置计数器LOOP: MOV A, @R0ADD A, 4FH;加一单元的内容 MOV 4FH, AMOV A, #0HADDC A, 4EH;加累加时产生的进位,存在4EH中 MOV 4EH, AINC R0;修改间址指针 DJNZ R7, LOOPSJMP $3.3循环程序设计 MOV31H, #0;31H~33H 3单元清零 MOV32H, #0MOV33H, #0MOVR0, #33H;设置间址寄存器 MOVA, 30H;无符号数送ALOOP: MOVB, #10;置除数10CJNEA, #0,NEZ;被除数为0? MOVA, 32H;为0,将31H~33H中的ASCII BCD数 SWAPA;拼为压缩BCD数放入R6和R7中 ORLA, 33HMOVR7, AMOVR6, 31HSJMP$NEZ: DIVAB;被除数不为0,除以10MOV@R0, B;存余数,逐渐存入33H~31HDECR0;修改间址指针 SJMPLOOPEND3.3循环程序设计 MOV 31H, #0;31H~33H 3单元清零 MOV 32H, #0MOV 33H, #0MOV R0, #33H;设置间址寄存器 MOV A, 30H;无符号数送ALOOP: JZ DONE;被除数为0MOV B, #10;置除数10DIV ABMOV @R0, BDEC R0SJMP LOOPDONE: MOV A, 32H;为0,将31H~33H中的ASCII BCDSWAP A;数拼为压缩BCD数放入R6和R7中 ORL A, 33HMOV R7, AMOV R6, 31HSJMP $3.3循环程序设计 MOVR0, #30H;内部RAM字节串间址指针 MOVDPTR, #1000H;外部RAM字节串间址指针 MOVR7, #32;设置计数循环计数器LOOP: CJNE@R0, #‘$’,ISO;是‘$’吗?不是转移去ISOSJMP$;是,结束ISO: MOVA, @R0;从内部RAM中取数 MOVX@DPTR,A;送外部RAMINCR0;修改内部RAM间址指针 INCDPTR;修改外部RAM间址指针 DJNZR7,LOOP;已传送32个吗?没有,循环 SJMP$;传送32个,结束 END3.3循环程序设计 MOV R0,#30H;内部RAM字节串间址指针 MOV DPTR,#1000H;外部RAM字节串间址指针 MOV R7,#0;设置计数循环计数器LOOP: MOV A, @R0CJNE A,#'$',NOT_ EQU;是‘$’吗?不是转移去NOT_ EQUAJMP FINISH;是,结束NOT_ EQU: MOVX @DPTR,A;送外部RAMINC R0;修改内部RAM间址指针 INC DPTR;修改外部RAM间址指针 INC R7;修改计数值 CJNE R7, #32, LOOP;已传送32个吗?没有,循环FINISH: SJMP $;传送32个,结束3.3循环程序设计1348957620111489576203113895762041134957620811348576209113485762091134857620911348576209113485762099134857620
3.3循环程序设计逐一比较法: MOVR0, #20H;R0指向数据区 MOVR7, #19;置外循环计数器R7,(n=20)OUT: MOVR6, R7;置内循环计数器R6PUSH00H;0组的R0进栈 MOVA, @R0;取内循环环间址指针IN: INCR0MOVB, @R0CJNEA, B, $+3;比较A≥@R0? JNCNXCHG;大于等于不交换 XCHA, @R0;小于交换NXCHG: DJNZR6,IN;判断内循环是否结束 POP00H;内循环结束R0出栈 MOV@R0,A;存内循环的最大值 INCR0;修改外循环间址指针 DJNZR7,OUT;判断外循环是否结束? SJMP$ END3.3循环程序设计 MOV R0, #20H;R0指向数据区 MOV R7, #19;置外循环计数器R7,(n=20)OUT: MOV R6, 07H;置内循环计数器R6MOV A, @R0;取外循环间址指针 MOV R1, 00HINC 01H;取内循环间址指针IN: MOV B, @R1CJNE A, B, NOT_ EQUAJMP OVERNOT_ EQU: JC SMALLAJMP OVERSMALL: XCH A, @R1OVER: INC R1DJNZ R6, INMOV @R0, AINC R0DJNZ R7, OUTSJMP $3.3循环程序设计1348957620314895762034189576203481957620348915762034895176203489571620348957612034895762103489576210
3.3循环程序设计 CLRF0;清交换标志 MOVR7, #19;设置外循环计数器OUT: MOVR0, #20H;R0指向数据区 MOVR7, #19;设置外循环计数器 MOVR6, R7IN: MOVA, @R0;取一数据到AINCR0MOVB, @R0;取下一单元数据到BCJNEA, B,$+3;A≥@R0JNCNEXCHG;大于等于不交换 XCHA, @R0;小于交换 DECR0MOV@R0,AINCR0SETBF0;置交换标志NEXCHG:DJNER6,IN;内循环结束? DECR7;下次的内循环少一次JBCF0, OUT;交换发生继续外循环,并清交换标志 SJMP$;未交换结束循环 END两两比较法3.3循环程序设计OUT: CLR F0;清交换标志 MOV R0,#20H;R0指向数据区 MOV R1,#21H;R1指向数据区 MOV R6,#19IN: MOV A,@R0MOV B,@R1CJNE A,B,NOT_ EQUAJMP OVERNOT_ EQU: JC SMALLAJMP OVERSMALL: XCH A,@R1MOV @R0,ASETB F0OVER: INC R0INC R1DJNZ R6,INJNB F0,FINISHAJMP OUTFINISH: SJMP $两两比较法3.4子程序设计 MOVR0, #60HMOVR7, #N6;N6为串长 ACALLMAXMOVB, A;存入一乘数 MOVR0, #70HMOVR7, #N7;N7为另一串长 ACALLMAXMULABMOV5EH,B;乘积的高字节放5EH单元 MOV5FH,A;乘积的低字节放5FH单元 SJMP$ END;子程序,计算较大值MAX: PUSH BCLR AMAX1: MOV B, @R0CJNE A, B, $+3JNC ANCHAMOV A, @R0ANCHA: INC R0DJNZ R7,MAX1POP BRET本章内容到此结束,前面各页依次讲解顺序、分支、循环与子程序四种基本程序设计技术。
下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}