资源描述:
《C51汇编语言程序设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第4章80C51汇编语言程序设计4.1概述4.1.1汇编语言程序设计的步骤①分析问题②确定算法③画出程序流程图④分配内存单元⑤编写汇编语言源程序⑥汇编语言程序的调试4.1概述4.1.2 汇编语言编程的注意事项①编写程序时应尽量使程序简短及缩短运行时间;②应尽量采用循环结构和子程序;③尽量少用无条件转移指令;④在设计程序时,还要考虑程序与数据的存放地址;⑤对于通用子程序,要考虑保护现场;⑥对于中断处理,除了保护处理程序中用到的寄存器外,还要保护程序状态字;⑦充分利用累加器。4.2基本结构程序设计程序设计的基本结构有:顺序结构、分支结构和循环结构。4.2.1顺序结
2、构程序例4-2将30H单元的2个BCD码拆开并分别存入到31H和32H单元中。解:方法一:先把30H中低4位BCD码交换出来,存入31H中,再把高4位BCD码交换到低4位存入32H中。4.2基本结构程序设计方法一:ORG0000HLJMPMAINORG0030HMAIN:MOVR0,#32HMOV@R0,#00HMOVA,30HXCHDA,@R0SWAPAMOV31H,ASJMP$END见4-2a方法二:ORG0000HLJMPSTARTORG0030HSTART:MOVA,30HANLA,#0FHMOV31H,AMOVA,30HANLA,#0F0HSWAPAM
3、OV32H,ASJMP$END见4-2b4.2基本结构程序设计4.2.2分支结构例4-4 两个单字节无符号数比较大小。设两个单字节无符号数分别存在内部RAM30H和31H单元中,找出其中的大数存入32H单元中。解:两个单字节无符号数比较大小的方法通常是做减法,然后根据是否产生借位判断大小。还有一点要注意:累加器A在减法运算前装的是被减数,减法运算后装的是差。思路框图如图4-3所示。4.2基本结构程序设计ORG0000HLJMPSTARTORG0030HSTART:MOVR0,#30HMOVA,@R0INCR0CLRCSUBBA,@R0JCBIG2ADDA,@R0
4、SJMPNEXTBIG2:MOVA,@R0NEXT:INCR0MOV@R0,ASJMP$END4.2基本结构程序设计例:4-5编程实现函数,已知(30H)=x,(31H)=y。1x>00x=0-1x<0解:算法:先判x=0,再判另外的两种情况。程序框图:程序:ORG0050HMOVA,30HJNZLOP1;x≠0转移MOV31H,#00HSJMPNEXTLOP1:JBACC.7,LOP2;x<0转移MOV31H,#01HSJMPNEXTLOP2:MOV31H,#0FFHNEXT:SJMP$ENDy=4.2基本结构程序设计例:4-6例:某单片机应用系统中有8个按键
5、,扫描后得到的键号,存放在R2中,8个按键的处理程序的入口分别为KEY0、KEY1、………..KEY7,请编写程序。解:根据已知条件得到以下框图:难点:无专用的多分支指令。解决方法:用散转指令和转移指令配合使用。4.2基本结构程序设计程序1:用AJMP和JMP程序KEY:MOVDPTR,#TAB;转移表的首址MOVA,R2RLAJMP@A+DPTRTAB:AJMPKEY0AJMPKEY1AJMPKEY2AJMPKEY3AJMPKEY4AJMPKEY5AJMPKEY6AJMPKEY7KEY0:……RETKEY1:……RET……KEY7:……RET4.2基本结构程序
6、设计程序2:用LJMP和JMP程序KEY:MOVDPTR,#TAB;转移表的首址MOVA,R2RLAADDA,R2JMP@A+DPTRTAB:LJMPKEY0LJMPKEY1LJMPKEY2LJMPKEY3LJMPKEY4LJMPKEY5LJMPKEY6LJMPKEY7KEY0:……RETKEY1:……RET……KEY7:……RET4.2基本结构程序设计4.2.3循环结构程序例:对内部RAM30H~3FH清零,请编程。解:ORG0000HLJMPSTARTORG0050HSTART:MOVR0,#30H;R0指向30HMOVR7,#16;设定循环次数LOP:MO
7、V@R0,#00HINCR0DJNZR7,LOPSJMP$END4.2基本结构程序设计例:4-10设计一个延时50ms的程序DEL:MOVR7,#200DEL1:MOVR6,#123NOPDEL2:DJNZR6,DEL2DJNZR7,DEL1RET4.2基本结构程序设计4.3子程序设计例:4-9已知(30H)=x,(31H)=y,(32H)=f,实现函数f小于255DL:MOVDPTR,#TABMOVCA,@A+DPTRRETTAB:DB00H,01H,04H,09H,10HDB19H,24H,31H,40H,51HDB64H,79H,90H,0A9HENDOR
8、G0000HAJMPST