四川工程职业技术学院 单片机应用技术课程电子教案 第8讲 指令功能及汇编语言程序设计(二) Copyright Http:llmcu. scetc. net
四川工程职业技术学院 单片机应用技术课程电子教案 Copyright © Http://mcu.scetc.net 第 8 讲 指令功能及汇编语言程序设计(二)
本讲主要内容: 8-1.设计范例——数码管循环显示。 8-2.控制转移类指令(1)的特点及使用。 8-3.熟练掌握延时程序的设计和延时时间的计算方法。 8-4.子程序的设计方法。 8-5.循环程序设计的基本方法。 SiChuan Engineering Technical College-1959 Copyright c Http: // mcu.scete. net
SiChuan Engineering Technical College-1959 2 Copyright © Http:// mcu.scetc.net 本讲主要内容: 8-1. 设计范例——数码管循环显示。 8-2. 控制转移类指令(1)的特点及使用。 8-3. 熟练掌握延时程序的设计和延时时间的计算方法。 8-4. 子程序的设计方法。 8-5. 循环程序设计的基本方法
8-1.设计范例——数码管循环显示 ◇要求在最右侧的数码管上循环显示数字1~5。 P3.5 P3.4 Q2 P1.3 P1.2 P1.1 P1.0 P0口 ,当当 4LED GND GND SiChuan Engineering Technical College-1959 Copyright c Http: // mcu.scete. net
SiChuan Engineering Technical College-1959 3 Copyright © Http:// mcu.scetc.net 8-1. 设计范例——数码管循环显示 要求在最右侧的数码管上循环显示数字1~5。 P0口 P3.2 P3.3 P3.4 P3.5 P1.3 P1.2 P1.1 P1.0
8-1.设计范例——数码管循环显示 ◇范例分析: ◇硬件分析 设计中要求选中最右侧的数码管,根据电路结构,应通过P32 选中该位数码管 ◇软件设计 设计中要求循环显示1~5,很显然应采用循环的方法来实现, 最简单的方法是将1~5的段码依次由P0口送出 SiChuan Engineering Technical College-1959 Copyright c Http: // mcu.scete. net
SiChuan Engineering Technical College-1959 4 Copyright © Http:// mcu.scetc.net 8-1. 设计范例——数码管循环显示 范例分析: 硬件分析 设计中要求选中最右侧的数码管,根据电路结构,应通过P3.2 选中该位数码管。 软件设计 设计中要求循环显示1~5,很显然应采用循环的方法来实现, 最简单的方法是将1~5的段码依次由P0口送出
8-1.设计范例——数码管循环显示 准备程序: ORG 0000H 相邻数字之间需要 间隔一段时间吗? 开始 MAIN: CLR P3 如果不间隔时间 在数码管上会看到 MOV PO, 什么现象? 送1的段码 MOV PO,#0A4. 送2的段码 MOV PO, #OBOH 延时一段时间 送3的段码 送4的段码 MOV PO, #99H 送5的段码 MOV PO, #92H SJMP MAIN SiChuan Engineering Technical College-1959 Copyright c Http: // mcu.scete. net
SiChuan Engineering Technical College-1959 5 Copyright © Http:// mcu.scetc.net 准备程序: ORG 0000H MAIN: CLR P3.2 MOV P0,#0F9H MOV P0,#0A4H MOV P0,#0B0H MOV P0,#99H MOV P0,#92H SJMP MAIN 延时一段时间 相邻数字之间需要间隔 一段时间吗?如果不间 隔时间,在数码管上会 看到什么现象? 相邻数字之间需要 间隔一段时间吗? 如果不间隔时间, 在数码管上会看到 什么现象? 8-1. 设计范例——数码管循环显示
8-2.控制转移类指令(1) ◇长转移指令 LJMP目标语句 说明:目标语句可以是程序存储器64KB空间的任何地方。 ◇绝对转移指令 AJMP目标语句 例:4002H AJMP MM 4600H MM: MOv A,#OOH 注意:目标语句必须和当前语句同页。在51单片机中,64KB程序存储器 分成32页,每页2KB(7FFH) SiChuan Engineering Technical College-1959 Copyright c Http: // mcu.scete. net
SiChuan Engineering Technical College-1959 6 Copyright © Http:// mcu.scetc.net 8-2. 控制转移类指令(1) 长转移指令 LJMP 目标语句 说明:目标语句可以是程序存储器64KB空间的任何地方。 绝对转移指令 AJMP 目标语句 例: 4002H AJMP MM …… 4600H MM: MOV A,#00H 注意:目标语句必须和当前语句同页。在51单片机中,64KB程序存储器 分成32页,每页2KB(7FFH)
8-2.控制转移类指令(1) ◇短跳转指令 SJMP目标语句(re 例: 4060H SMP LOOP 4090H LOOP: MOv A, #OFFH 注意:短跳转的目标语句地址必须在当前语句向前127(7FH)字节,向 后128(80H)字节,否则在进行程序编译时会出错。 SiChuan Engineering Technical College-1959 Copyright c Http: // mcu.scete. net
SiChuan Engineering Technical College-1959 7 Copyright © Http:// mcu.scetc.net 8-2. 控制转移类指令(1) 短跳转指令 SJMP 目标语句(rel) 例: 4060H SJMP LOOP …… 4090H LOOP:MOV A,#0FFH …… 注意:短跳转的目标语句地址必须在当前语句向前127(7FH)字节,向 后128(80H)字节,否则在进行程序编译时会出错
8-2.控制转移类指令(1) ◇变址寻址转移指令 JMP OA+DPTR 该指令主要用于多分支的跳转程序设计。跳转的目标地址是累加器A 和数据指针DPTR之和,它可以是64KB存储空间的任何地方。 ORG 4000H MOV DPTR. #5000H 程序设计举例: MOV R2.A 如果(A=00H,执行SS子程序;如 CLR C RIC A 果(A)=01H,执行MM子程序; ADD A, R2 如果(A)=02H,执行XX子程序。 JMP @A+DPTR ORG 5000H 5000H LJMP SS 5003H LJMP MM 5006H LJMP XX SiChuan Engineering Technical College-1959 Copyright c Http: // mcu.scete. net
SiChuan Engineering Technical College-1959 8 Copyright © Http:// mcu.scetc.net 8-2. 控制转移类指令(1) 变址寻址转移指令 JMP @A+DPTR 该指令主要用于多分支的跳转程序设计。跳转的目标地址是累加器A 和数据指针DPTR之和,它可以是64KB存储空间的任何地方。 程序设计举例: 如果(A)=00H,执行SS子程序;如 果(A)=01H,执行MM子程序; 如果(A)=02H,执行XX子程序。 ORG 4000H MOV DPTR, #5000H MOV R2,A CLR C RLC A ADD A, R2 JMP @A+DPTR …… ORG 5000H 5000H LJMP SS 5003H LJMP MM 5006H LJMP XX
8-2.控制转移类指令(1) ◇减1条件转移指令组 DJNz Rn,目标地址(re;如果(Rn)-1≠0,则程序跳转到目标语句, 否则顺序执行下一条语句。 dJNz direct,目标地址(re);如果( direct)-1≠0,则程序跳转到目标语 句,否则顺序执行下一条语句 例:问执行以下程序段后,(A)=? MOvR5,#02H;(R5)=02H DNZ R5,L1;(R5)-1=01H,程序转至L1处执行 SJMP L2 SJMP S LI: MOv A,#OOH SJMP S L2 MOV A,#OIH SJMP 程序执行后(A)=00H SiChuan Engineering Technical College-1959 Copyright c Http: // mcu.scete. net
SiChuan Engineering Technical College-1959 9 Copyright © Http:// mcu.scetc.net 8-2. 控制转移类指令(1) 减1条件转移指令组 DJNZ Rn,目标地址(rel);如果(Rn)-1≠0,则程序跳转到目标语句, 否则顺序执行下一条语句。 DJNZ direct,目标地址(rel);如果(direct)-1≠0,则程序跳转到目标语 句,否则顺序执行下一条语句。 例:问执行以下程序段后,(A)=? MOV R5,#02H DJNZ R5,L1 SJMP L2 SJMP $ L1: MOV A,#00H SJMP $ L2: MOV A,#01H SJMP $ 程序执行后(A)=00H ;(R5)=02H ;(R5)-1=01H,程序转至L1处执行
8-3.延时程序的编写 ◇延时程序是一种应用较为广泛的小程序,一般采用多条语句 循环执行来实现延时。 例1:当前fosc=6MHz,试计算下面延时程序的延时时间。 因为fosc=6MHz,故I机=12/osc=us DELI: MOV R6, #50 DEL2: NOP 循环次数1循环体 NOP IT DJNZ R6, DEL2 2T1 tl=(1T机+1机+2T机)×50+1T机=402us SiChuan Engineering Technical College-1959 Copyright c Http: // mcu.scete. net
SiChuan Engineering Technical College-1959 10 Copyright © Http:// mcu.scetc.net 8-3. 延时程序的编写 延时程序是一种应用较为广泛的小程序,一般采用多条语句 循环执行来实现延时。 例1:当前fosc=6MHz,试计算下面延时程序的延时时间。 因为fosc=6MHz,故T机=12/fosc=2us DEL1:MOV R6,#50 DEL2: NOP NOP DJNZ R6,DEL2 1T机 1T机 1T机 2T机 循环次数 t1= (1T机+1T机+2T机) ×50+ 1T机=402us 循环体 循环次数