单片机不挂科-3-单片机程序设计-上.pdf

上传人:暗伤 文档编号:4238085 上传时间:2021-07-02 格式:PDF 页数:35 大小:748.45KB
返回 下载 相关 举报
单片机不挂科-3-单片机程序设计-上.pdf_第1页
第1页 / 共35页
单片机不挂科-3-单片机程序设计-上.pdf_第2页
第2页 / 共35页
点击查看更多>>
资源描述

《单片机不挂科-3-单片机程序设计-上.pdf》由会员分享,可在线阅读,更多相关《单片机不挂科-3-单片机程序设计-上.pdf(35页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、单片机程序设计(上) 不挂科 单片机 第三讲 不挂科 3大模块7道题目 单片机 顺序程序结构模块1 分支程序结构模块2 循环程序结构模块3 单片机 程序设计(上) 3.单片机程序设计(上)不挂科 单片机 1.顺序程序结构不挂科 单片机 3.单片机程序设计(上) 顺序程序结构小节1 顺序程序结构 顺序程序设计小节2 1.顺序程序结构不挂科 单片机 3.单片机程序设计(上) 顺序程序结构小节1 顺序程序结构 顺序程序设计小节2 顺序程序基本流程图 不挂科 单片机 1.顺序程序结构1.顺序程序结构3.单片机程序设计(上) 顺序程序结构是汇编语言程序的最简单也是最基本的程序结构。 P1 P2 P3 入

2、口 出口 顺序结构 程序执行时一条接一条地按顺序执行指令,无分支、循环以及调用子程序。 例: ORG 0000H LJMP MAIN ORG 0030H MOV A ,#30H ADD A , #58H MOV 30H , A SJMP $ MAIN: 不挂科 单片机 顺序程序结构小节1 顺序程序结构 顺序程序设计小节2 3.单片机程序设计(上)1.顺序程序结构 不挂科 单片机 2.顺序程序设计3.单片机程序设计(上)1.顺序程序结构 编写程序实现3字节无符号数相加。其中被加数在内部RAM的50H,51H和52H单元中;加数在内部RAM的 53H,54H和55H单元中;要求把相加之和存放在50

3、H,51H和52H单元中,进位存放在位寻址区的20H位中。 ;被加数赋初值 8C D2 3FH ;加数赋值 CE 4D 57H MAIN: 例题3-1 解析3-1 ORG 0000H LJMP MAIN ORG 0030H MOV 50H,#8CH MOV 51H,#0D2H MOV 52H,#3FH MOV 53H,#0CEH MOV 54H,#4DH MOV 55H,#57H 不挂科 单片机 2.顺序程序设计3.单片机程序设计(上)1.顺序程序结构 MOV R0,#52H MOV R1,#55H MOV A,R0 ADD A,R1 MOV R0,A DEC R0 DEC R1 MOV A,

4、R0 ADDC A,R1 MOV R0,A DEC R0 DEC R1 MOV A,R0 ADDC A,R1 MOV R0,A ;R0存放被加数个位的单元号 ;R1存放加数的个位的单元号 ;做低字节的相加 ;结果存到52H ;R0变成存放十位的单元地址 ;准备做十位的加法 ;结果存到51H ;做十位的加法,有进位 ;R0变成存放百位的单元地址 ;准备做百位的加法 ;百位的的加法 ;结果存到50H 编写程序实现3字节无符号数相加。其中被加数在内部RAM的50H,51H和52H单元中;加数在内部RAM的 53H,54H和55H单元中;要求把相加之和存放在50H,51H和52H单元中,进位存放在位寻

5、址区的20H位中。 例题3-1 解析3-1 MOV 20H,C SJMP $ END ;保存进位到20H位 分支程序结构 单分支程序结构 多分支程序结构 小节1 小节2 不挂科 单片机 2.分支程序结构3.单片机程序设计(上) 分支程序结构 单分支程序结构 多分支程序结构 小节1 小节2 不挂科 单片机 2.分支程序结构3.单片机程序设计(上) 单分支程序结构 不挂科 单片机 1.单分支程序结构2.分支程序结构3.单片机程序设计(上) 在80C51指令系统中,通过条件判断实现单分支程序转移的指令有:JZ、JNZ、CJNE、DJNZ等。 此外还有以位状态作为条件进行程序分支的指令,如JC、JNC

6、、JB、JNB、JBC等。 使用这些指令可以完成0、1、正、负,以及相等、不相等作为各种条件判断依据的程序转移。 A 条件满足? N Y (a) A 条件满足? N Y (b) B 分支程序结构流程图 不挂科 单片机 1.单分支程序结构2.分支程序结构3.单片机程序设计(上) 假定在外部RAM中有ST1、ST2和ST3共有3个连续单元,其中ST1和ST2单元中存放着两个无 符号二进制数,要求找出其中的大数并存入ST3单元中。 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV DPTR,#0010H MOVX DPTR,A 例题3-2 解析3-2 ;假设STI 单元

7、为0010H,单元内容为22HMOV A,#22H MOV A,#16H MOV DPTR,#0011H ;ST2 单元为0011H,单元内容为16H MOVX DPTR,A 不挂科 单片机 1.单分支程序结构2.分支程序结构3.单片机程序设计(上) CLR C MOV DPTR,#0010H MOVX A,DPTR MOV R2,A INC DPTR MOVX A ,DPTR ;两数比较,ST2-ST1 JNC BIG1 ;C=1,A放大数:(ST1) 例题3-2 解析3-2 ;为实现无借位减法 ;DPTR初值为0010H,ST1 ;A从DPTR得到,A=(ST1) ;R2的值为(ST1)

8、;DPTR+1后的值为ST2 ;A从DPTR得到,A=(ST2) SUBB A, R2 ;判转分支(C=0时转移) XCH A ,R2 假定在外部RAM中有ST1、ST2和ST3共有3个连续单元,其中ST1和ST2单元中存放着两个无 符号二进制数,要求找出其中的大数并存入ST3单元中。 INC DPTR ;存A(大数)入ST3 ;C=0,A放大数:(ST2) ;转至BIG0 BIG0:;DPTR+1,为ST3 MOVX DPTR,A RET BIG1: MOVX A, DPTR SJMP BIG0 分支程序结构 单分支程序结构 多分支程序结构 小节1 小节2 不挂科 单片机 2.分支程序结构3

9、.单片机程序设计(上) 多分支程序结构 不挂科 单片机 2.多分支程序结构2.分支程序结构3.单片机程序设计(上) 多重单分支结构是单分支的扩展形式,通过一系列条件判断,进行逐级分支。 常使用JMP A+DPTR指令实现多分支结构。 散转指令 转向0分支转向1分支转向n-1分支转向n分支 结构示意图 k=0k=1k=n-1k=n 多分支程序结构 不挂科 单片机 2.多分支程序结构2.分支程序结构3.单片机程序设计(上) 多重单分支结构是单分支的扩展形式,通过一系列条件判断,进行逐级分支。 常使用JMP A+DPTR指令实现多分支结构。 JMP A+DPTR 与数据表配合: 数据表存相对地址,范

10、围有限,256字节。 1 JMP A+DPTR 与转移指令配合:2 A中值为序号与转移指令字节数的乘积。 利用RET指令,通过堆栈操作实现:3 将分支地址从入口地址表取出后,压入堆栈,利用RET指令赋予PC分支地址。 多分支程序结构 不挂科 单片机 2.多分支程序结构2.分支程序结构3.单片机程序设计(上) JMP A+DPTR 与数据表配合实现多分支程序结构1 执行完JMP指令,直接就跳转至分支程序。 MOV A , #n MOV DPTR , #JMPTAB MOVC A , A+DPTR JMP A+DPTR JMPTAB: DB ROUT0 - JMPTAB DB ROUT1 - JM

11、PTAB DB ROUTn - JMPTAB ;n为分支程序序号例: ;查表 ;表头 ;地址和表头的差值,ROUTn为第n个分支程序的入口地址 ;跳转 不挂科 单片机 2.多分支程序结构2.分支程序结构3.单片机程序设计(上) 设计程序,通过数据表实现程序多分支。 ORG 0000H LJMP MAIN ORG 0030H MOV A,#2 MOV DPTR,#BRTAB MOVC A,A+DPTR JMP A+DPTR DB BR0-BRTAB DB BR1-BRTAB DB BR2-BRTAB DB BR3-BRTAB DB BR4-BRTAB DB BR5-BRTAB BRTAB: MA

12、IN: 例题3-3 解析3-3 ;给DPTR赋值为数据表表头的地址 ;假设要跳转到第二个分支 ;把表头和分支的序号相加的值给A ;跳转指令 ;跳转到BR0所指的程序,此处因为前面DPTR的值加了两次,所以要减去一次 不挂科 单片机 2.多分支程序结构2.分支程序结构3.单片机程序设计(上) ;以下是程序分支 MOV R0,#10H BR0: SJMP $ BR1:MOV R0,#11H SJMP $ BR2:MOV R0,#12H SJMP $ BR3:MOV R0,#13H SJMP $ BR4:MOV R0,#14H SJMP $ BR5:MOV R0,#15H SJMP $ END ;假

13、设BR0的程序目的是给R0赋值10H ;防止分支程序的顺序执行,造成错误 设计程序,通过数据表实现程序多分支。例题3-3 解析3-3 多分支程序结构 不挂科 单片机 2.多分支程序结构2.分支程序结构3.单片机程序设计(上) JMP A+DPTR 与转移指令配合实现多分支程序结构2 例:128种分支转移程序。 功能:根据入口条件转移到128个目的地址。 入口:转移目的地址的序号。 出口:转移到相应子程序入口。 执行完JMP指令,程序跳转至分支入口表后再次跳转。 128个子程序首址 JMP_128:MOV A,R3 RL A MOV DPTR,#JMPTAB JMP A+DPTR JMPTAB:

14、 AJMP ROUT00 AJMP ROUT01 AJMP ROUT7F 多分支程序结构 不挂科 单片机 2.多分支程序结构2.分支程序结构3.单片机程序设计(上) 利用RET指令,通过堆栈操作实现多分支程序转移3 MOV DPTR , #BRTAB RL A MOV A , R0 MOV R1,A INC A MOVC A,A+DPTR PUSH ACC MOV A,R1 MOVC A,A+DPTR PUSH ACC RET 分支程序入口地址压入堆栈,再利用返回指令将存入堆栈中的地址赋给PC,从而实现分支程序跳转。 BRTAB:DW ROUT00 DW ROUT01 DW ROUT127 ;

15、分支入口地址表首地址 ;A=2n ;假设R0的值为n ;将A的值暂时存放在R1中,R1=2n ;A=2n+1 ;取低位地址入栈 ;取高位地址(R1=2n)入栈 ;子程序返回指令会取出堆栈中的数据 不挂科 单片机 2.多分支程序结构2.分支程序结构3.单片机程序设计(上) 编写程序,实现通过堆栈操作实现分支程序转移。 ORG 0000H LJMP MAIN ORG 0030H MAIN:MOV DPTR,#BRTAB MOV R0,#3 MOV A,R0 RL A MOV R1,A INC A MOVC A,A+DPTR 例题3-4 解析3-4 ;A原来的值从R0中得到,记为N,此处假设N=3

16、;A的值乘2,A=2N ;乘2后的A存到R1中,R1=2N ;A再加1,A=2N+1 PUSH ACC ;R1中存放的是2N,恢复到A中 MOVC A,A+DPTR PUSH ACC RET ;低位地址入栈 MOV A,R1 ;再取高位地址入栈 ;分支入口地址装入PC DW BR0 BRTAB: DW BR1 DW BR2 DW BR3 DW BR4 DW BR5 ;分支程序入口地址表 ;子程序返回指令,数据出栈赋值给PC 不挂科 单片机 3.循环程序结构3.单片机程序设计(上) 循环程序结构 单重循环程序 多重循环程序 小节1 小节2 不挂科 单片机 3.循环程序结构3.单片机程序设计(上)

17、 循环程序结构 单重循环程序 多重循环程序 小节1 小节2 1.单重循环程序 循环程序结构 不挂科 单片机 3.循环程序结构3.单片机程序设计(上) 在程序运行时,有时需要连续重复执行某段程序,可以使用循环程序。其结构包括四部分: 置循环初值 循环体(循环工作部分) 修改循环参数 循环控制部分(循环判断) 1.单重循环程序不挂科 单片机 3.循环程序结构3.单片机程序设计(上) 把内部RAM中起始位置为data的数据串传送到外部RAM以buffer为首地址的区域,直到发现$字 符的ASCII码位置;同时规定数据串的最大长度为32字节。 MOV R0,#50H MOV DPTR,#0010H M

18、OV R1,#20H MOV A,R0 CLR C SUBB A,#24H JZ LOOP1 LOOP: 例题3-5 解析3-5 ;假设DATA为内部地址50H ;假定buffer为外部RAM 的0010H ;规定数据串最长为32字节 ;做不借位减法,判断是否为$符号,$的ASCII码为24H ;判断A是否为0,为0,则为$符号,跳转到LOOP1,结束数据传输;否则顺序执行 MOV A,R0 MOVX DPTR,A INC DPTR INC R0 DJNZ R1,LOOP RET END LOOP1: ;不是$,则将数据搬移到外部RAM的对应地址中去 ;外部RAM地址加1 ;读取下一个数据的地

19、址 ;在字符串的最大长度内执行这个循环,否则退出循环 1.单重循环程序不挂科 单片机 3.循环程序结构3.单片机程序设计(上) 有一数据块从片内RAM的30H单元开始存入,设数据块长度为10个单元。根据下式: Y= 100 X=0 求出Y值,并将Y值放回原处。 X+2 X0 X-2 X0 X-2 X0 例题3-6 解析3-6 NEG: SAVE: ;地址指针指向下一个地址 结束 取数,A (R1) A为负 A=0? A X+2 存数,(R1) A(30H) R1 R1+1;R0 R0-1 R0=0? 设置地址指针R1,计数 器R0初值 开始 A 64HA X-2 Y N Y N N Y 不挂科

20、 单片机 3.循环程序结构3.单片机程序设计(上) 循环程序结构 单重循环程序 多重循环程序 小节1 小节2 2.多重循环程序 多重循环程序结构 不挂科 单片机 3.循环程序结构3.单片机程序设计(上) 在多重循环中,只允许外重循环嵌套内重循环。不允许循环相互交叉,也不允许从循环程序的外部 跳入循环程序的内部。 外循环 中循环 内循环 (a) 外循环 内循环 内循环 (b) 外循环 内循环 (c) 嵌套正确嵌套正确交叉不正确 多重循环示意图 2.多重循环程序 多重循环定时程序 不挂科 单片机 3.循环程序结构3.单片机程序设计(上) 设计多重循环定时程序(单片机频率为6MHz)。 MOV R5

21、,#TIME1 MOV R4,#TIME2 NOP NOP DJNZ R4,LOOP1 DJNZ R5,LOOP2 RET LOOP2: LOOP1: 公式: 循环体时间=(TIME2*4+2+1)*TIME1*2s 总时间=循环体时间+4s ;单周期指令 ;单周期指令 ;双周期指令 ;双周期指令 2.多重循环程序不挂科 单片机 3.循环程序结构3.单片机程序设计(上) ORG 0000H LJMP MAIN ORG 0030H SJMP MAIN ;定时为2ms MOV R4,#200 NOP NOP NOP DJNZ R4,LOOP11 RET DELAY2MS: LOOP11: 例题3-

22、7 解析3-7 ;LJMP DELAY1S ;LJMP DELAY200MS LJMP DELAY2MS MAIN:;定时为1s ;定时为200ms ;定时为2ms ;(1+1+1+2)*200*2s=2ms ;定时为200ms MOV R5,#100 DJNZ R5,LOOP21 RET DELAY200MS: LOOP21:;2ms*100 = 200msMOV R4,#200 NOP NOP NOP DJNZ R4,LOOP22 LOOP22: 调整晶振频率为6M赫兹,分别编程实现2ms/200ms/1s的定时程序。 ;循环体时间 * 2s = 2ms 2.多重循环程序不挂科 单片机 3.循环程序结构3.单片机程序设计(上) DELAY1S: ;定时为1s MOV R6,#5 DJNZ R6,LOOP33 RET LOOP33: 调整晶振频率为6M赫兹,分别编程实现2ms/200ms/1s的定时程序。例题3-7 解析3-7 MOV R5,#100 MOV R4,#200 NOP NOP NOP DJNZ R4,LOOP31 DJNZ R5,LOOP32 LOOP32: LOOP31: ;200ms * 5 =1s 单片机程序设计(上) 不挂科 单片机 第三讲

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com