第3章-MCS-51单片机指令系统-3[1]5汇编语言程序的基本.ppt
《第3章-MCS-51单片机指令系统-3[1]5汇编语言程序的基本.ppt》由会员分享,可在线阅读,更多相关《第3章-MCS-51单片机指令系统-3[1]5汇编语言程序的基本.ppt(38页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、3.5 3.5 汇编语言程序的基本结构汇编语言程序的基本结构程序框架程序框架1.ORG 0000H2.LJMP MAIN ;跳转至主程序跳转至主程序3.ORG 0003H4.LJMP INT0_INT ;跳转至外部中断跳转至外部中断0的中断服务程序的中断服务程序5.ORG 000BH6.LJMP T0_INT ;跳转至定时器跳转至定时器0的中断服务程序的中断服务程序7.ORG 0013H8.LJMP INT1_INT ;跳转至外部中断跳转至外部中断1的中断服务程序的中断服务程序9.10.ORG 0030H11.MAIN:;开始写主程序开始写主程序12.END中断入口地址中断入口地址主程序开始主
2、程序开始1.NAMEEQUR12.NUMDATA30H3.P10BITP1.04.ORG0000H5.LJMPMAIN;跳转至主程序跳转至主程序6.ORG0003H7.LJMPINT0_INT;跳转至中断服务程序跳转至中断服务程序8.ORG0030H9.MAIN:;开始写主程序开始写主程序10.SJMP$11.PRO1:12.RET13.INT0_INT:14.RETI15.TAB:DB00H,01H,02H16.DB03H,04H17.END变量定义变量定义程序入口程序入口主程序主程序子程序和中断子程序子程序和中断子程序数据表格数据表格3.5 3.5 汇编语言程序的基本结构汇编语言程序的基本
3、结构顺序结构顺序结构 分支程序结构分支程序结构循环程序结构循环程序结构p3.5.1 3.5.1 顺序程序设计顺序程序设计p3.5.2 3.5.2 分支程序设计分支程序设计p3.5.3 3.5.3 循环程序设计循环程序设计p3.5.4 3.5.4 子程序设计子程序设计3.5.1 3.5.1 顺序程序设计顺序程序设计p 例例11n功能:求变量功能:求变量X(0 x5)X(0 x5)的平方的平方 n入口:入口:X X 值存放在片内值存放在片内RAMRAM的的 30H 30H 单元单元n出口:出口:X X2 2 值存放在片内值存放在片内RAMRAM的的 31H 31H 单元单元 ORG 1000HST
4、ART:MOV DPTR,#2000H MOV A,30H MOVC A,A+DPTR MOV 31H,A SJMP$ORG 2000HTABLE:DB 00,01,04,09,16,25 END;设设R0为数据指针为数据指针;取取X1;X1+X2;保存结果保存结果p 例例22n功能:功能:两个两个8 8位位无无符号数相加,和仍为符号数相加,和仍为8 8位位n入口:入口:两个无符号数两个无符号数X1X1、X2X2分别存放于内部分别存放于内部 RAMRAM 的的60H60H、61H61H单元中单元中n出口:出口:和送入和送入62H62H单元单元ORG0000HCLRCMOVR0,#60HMOVA
5、,R0INCR0ADDA,R0INCR0MOVR0,ASJMP$ENDp 例例3 3 功能:功能:单字节压缩单字节压缩BCDBCD码转换成二进制码码转换成二进制码n入口:入口:R2=R2=待转换压缩待转换压缩BCDBCD码码n出口:出口:R2=R2=转换结果转换结果ORG0000HMOVA,R2;A(d1d0)BCDANL A,#0F0H;取取高位高位BCD码码d1SWAP A;A=0 d1HMOV B,#0AH;B10MUL AB;d110MOV R3,A;R3暂存乘积结果暂存乘积结果MOV A,R2;A(d1d0)BCDANL A,#0FH;取低位取低位BCD码码d0ADD A,R3;d1
6、10+d0MOV R2,A;保存计算结果保存计算结果SJMP$ENDp 例例4 4 功能:功能:两个无符号两个无符号双字节双字节数相加数相加n入口:入口:p被加数存在内被加数存在内RAM 31H(RAM 31H(高位字节高位字节)、30H(30H(低位字节低位字节)p加数存放在内加数存放在内RAM 41H(RAM 41H(高位字节高位字节)、40H(40H(低位字节低位字节)n出口:出口:和存入内和存入内RAM 31H(RAM 31H(高位字节高位字节)、30H(30H(低位字节低位字节)ORG0000HCLRC;将将C清零清零MOVR0,#30H;送被加数首址送被加数首址MOVR1,#40H
7、;送加数首址送加数首址MOVA,R0;取被加数低字节取被加数低字节 ADDA,R1;两个低字节相加两个低字节相加MOVR0,A;低字节和存入被加数低字节低字节和存入被加数低字节 INCR0;修改指针,指向被加数高字节修改指针,指向被加数高字节INC R1;修改指针,指向加数高字节修改指针,指向加数高字节MOVA,R0;取被加数高字节取被加数高字节 ADDC A,R1;高字节相加高字节相加 MOVR0,A;存结果存结果 SJMP$END至此,该程序完至此,该程序完全正确了吗?全正确了吗?3.5.2 3.5.2 分支程序设计分支程序设计p1.1.单分支程序单分支程序n 例例 p功能:比较两个无符号
8、功能:比较两个无符号数的大小数的大小p入口:入口:外部外部 RAM RAM 的存储的存储单元单元ST1ST1和和ST2ST2p出口:大数存入出口:大数存入外部外部 RAM RAM 中存储单元中存储单元ST3ST3访问访问外外 RAM只能用只能用MOVXORG0000H ST1EQU2000HST2EQU2100HST3EQU2200HSTA:MOVDPTR,ST1;第一个数的指针第一个数的指针MOVX A,DPTR;取第一个数取第一个数MOVR2,A;保存保存MOVDPTR,ST2;第二个数的指针第二个数的指针MOVX A,DPTR;取第二个数取第二个数CLRC;清零清零CySUBB A,R2
9、;两数比较两数比较JNCBIG0;若第二个数大若第二个数大,则转则转XCHA,R2;第一个数大第一个数大BIG0:MOVDPTR,ST3 MOVX DPTR,A;存大数存大数SJMP$ENDORG0000H ST1EQU2000HST2EQU2100HST3EQU2200HSTA:MOVDPTR,ST1;第一个数的指针第一个数的指针MOVX A,DPTR;取第一个数取第一个数MOVR2,A;保存保存MOVDPTR,ST2;第二个数的指针第二个数的指针MOVX A,DPTR;取第二个数取第二个数CLRC;清零清零CyPUSH ACC;保存原值保存原值SUBB A,R2;两数比较两数比较POP A
10、CC;恢复原值恢复原值NEXT:JNCBIG0;若第二个数大若第二个数大,则转则转XCHA,R2;第一个数大第一个数大BIG0:MOVDPTR,ST3 MOVX DPTR,A;存大数存大数SJMP$ENDMOV30H,R2CJNE A,30H,NEXTSJMP BIG0p2.2.多分支程序多分支程序n一般多分支、一般多分支、散转多分支散转多分支n(1)(1)一般多分支一般多分支p 例例1x1x、y y均为均为8 8位二进制数,求解:位二进制数,求解:入口:(入口:(R0R0)=x出口:(出口:(R1R1)=y yORG0000HSTART:CJNER0,#01H,SUL1;判断判断R0是否为是
11、否为1;不为不为1转转SUL1MOVR1,#00HSJMPSUL2SUL1:JCSMA ;小于小于1转转SMAMOVR1,#01HSJMPSUL2SMA:MOVR1,#0FFHSUL2:SJMP$END P82:一般多分支一般多分支例例纠错纠错ORG0000HMOVR0,#-1MOVA,R0STA:;CJNER0,#00H,SUL1;判断判断R0是否为是否为0JNZSUL1;不为不为0转转SUL1MOVR1,#00HSJMPSUL2SUL1:JBACC.7,NEG;小于小于0转转NEGMOVR1,#01HSJMPSUL2NEG:MOVR1,#0FFHSUL2:SJMP$END判断数的正负判断数
12、的正负3.5.3 3.5.3 循环程序设计循环程序设计p分类分类n先先循环循环后后判断、判断、先先判断判断后后循环循环n单重单重循环程序循环程序n循环嵌套,称为循环嵌套,称为双重双重或或多重多重循环循环p只允许只允许外外重循环重循环嵌套嵌套内内重循环重循环p不允许不允许循环相互循环相互交叉交叉p不允许不允许从从外外循环程序循环程序跳跳到到内内循环程序循环程序(a)(a)先执行后判断先执行后判断 (b)(b)先判断后执行先判断后执行图图3.12 3.12 循环程序框图循环程序框图 例例1 1 单重循环单重循环p功能:功能:n n个单字节数相加,和为双字节,存放在个单字节数相加,和为双字节,存放在
13、(R3R4)(R3R4)中中p入口:单字节数入口:单字节数XiXi存在存在40H40H开始的开始的RAMRAM单元中,单元中,n n放在放在R2R2中中p出口:和存放在出口:和存放在R3R4R3R4中中ORG 030hADD1:MOVR3,#00HMOVR4,#00HMOVR2,#nMOVR0,#40HLOOP:MOVA,R4 ;取部分和低位取部分和低位ADDA,R0 ;与与Xi相加相加MOVR4,AINCR0 ;地址加地址加1CLRAADDC A,R3 ;低位字节向高位字节进位低位字节向高位字节进位MOVR3,ADJNZR2,LOOP;未加完继续重复未加完继续重复SJMP$ENDp 例例2
14、2 内部内部 RAM ADDR RAM ADDR 为起始地址的数据块内数据是无符为起始地址的数据块内数据是无符号数,块长在号数,块长在 LEN LEN 内。编程求数据块的最大值。内。编程求数据块的最大值。p入口:入口:(ADDR)=(ADDR)=起始地址;起始地址;(LEN)=(LEN)=长度长度p出口:出口:(MAX)=(MAX)=最大值最大值ORG030hLENDATA 20HMAXDATA 22HADDR DATA 23HMOVMAX,#00H;MAX单元清零单元清零 MOVR0,#ADDR;ADDR送送R0 LOOP:MOVA,R0;数据块中某数送数据块中某数送ACJNEA,MAX,N
15、EXT1;A和(和(MAX)比较)比较NEXT1:JCNEXT;若若A(MAX),则,则NEXTMOVMAX,A;若若A(MAX),则大数送,则大数送MAXNEXT:INCR0;修改数据块指针修改数据块指针R0DJNZ LEN,LOOP;若未完则若未完则LOOPSJMP$END 例例3 3 软件延时程序软件延时程序(P85)机器周期数机器周期数1MOVR0,#0FAH;(R0)=2501LOOP:MOVR7,#70H2DJNZ R0,LOOP延时时间延时时间=(1+2)250+(1+2)250+1 1 1 1s=751s=751s s机器周期数机器周期数112设计器周期为设计器周期为1 1s
16、sMOVR1,#200DELAY:MOVR0,#0FAH;R0=250LOOP:MOVR7,#70H DJNZ R0,LOOP DJNZ R1,DELAY机器周期数机器周期数11122延时时间延时时间=(1+2)250+1+2 200+1 1s 例例4 4 双重循环双重循环p功能:设计一个延时时间功能:设计一个延时时间10ms10ms的延时程序的延时程序p分析:延时时间与所用晶振和延时程序中的循环次数有关。分析:延时时间与所用晶振和延时程序中的循环次数有关。已知已知单片机的晶振为单片机的晶振为12MHZ12MHZ,则一个机器周期为,则一个机器周期为1s1sp入口:(入口:(R0R0)=毫秒数,
17、(毫秒数,(R1R1)=1ms=1ms延时预定值延时预定值p出口:定时到,退出程序出口:定时到,退出程序1.ORG 2000H 指令机器周期数指令机器周期数2.MOV R0,#0AH;毫秒数毫秒数R013.DL2:MOV R1,#MTMT ;1ms延时值延时值R114.DL1:NOP15.NOP16.DJNZ R1,DL1 ;1ms延时循环延时循环27.DJNZ R0,DL2 ;10ms延时循环延时循环28.END1.ORG 2000H 指令机器周期数指令机器周期数2.MOV R0,#0AH;毫秒数毫秒数R013.DL2:MOV R1,#MTMT ;1ms延时值延时值R114.DL1:NOP1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MCS 51 单片机 指令系统 汇编语言 程序 基本
限制150内