几个简单的汇编程序.ppt_第1页
几个简单的汇编程序.ppt_第2页
几个简单的汇编程序.ppt_第3页
几个简单的汇编程序.ppt_第4页
几个简单的汇编程序.ppt_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

51汇编语言程序设计,流水灯程序,ORG0JMPMAINORG0030HMAIN:MOVA,#0FEHLOOP:MOVP1,ARLACALLDELAYJMPLOOP,DELAY:;延时子程序MOVR0,#0FFHMOVR1,#0FFHDLY_LP:NOPNOPDJNZR0,DLY_LPMOVR0,#0FFHDJNZR1,DLY_LPRETEND,数码管流水程序A直接赋值,org0jmpmainorg0030hmain:movp2,#00hmovp0,#3fhcallDELAYmovp2,#04hmovp0,#06hcallDELAYjmpmain,;延时子程序DELAY:MOVR0,#0FFHMOVR1,#0FFHDLY_LP:NOPNOPDJNZR0,DLY_LPMOVR0,#0FFHDJNZR1,DLY_LPRETend,数码管流水程序B查表,org0jmpmainorg0030hmain:movdptr,#DIS_CODEloop:mova,#00hmovp2,#00hmovca,a+dptrmovp0,acallDELAYmova,#01hmovp2,#04hmovca,a+dptrmovp0,acallDELAYjmploop,DIS_CODE:;共阴数码管段码表DB3FH,06H,5BH,4FH,66HDB6DH,7DH,07H,7FH,6FH,DELAY:;延时子程序MOVR0,#0FFHMOVR1,#0FFHDLY_LP:NOPNOPDJNZR0,DLY_LPMOVR0,#0FFHDJNZR1,DLY_LPRETend,数码管流水程序C子函数调用,org0jmpmainorg0030hmain:movr3,#0loop:callBIT_INcallDAT_INincr3callDELAYcjner3,#8,loop1movr3,#0loop1:jmploop,BIT_IN:movdptr,#BIT_CODEmova,r3movca,a+dptrmovp2,aret,DAT_IN:movdptr,#DAT_CODEmova,r3movca,a+dptrmovp0,aret,DAT_CODE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHBIT_CODE:DB00H,04H,08H,0CH,10H,14H,18H,1CH,30秒倒计时,org0main:movr3,#30a1:movr4,#50tt1:movdptr,#tabmova,r3movb,#10divabmovca,a+dptrmovp0,asetbp2.5clrp2.6clrp2.7lcalldly_10ms,mova,bmovca,a+dptrmovp0,aclrp2.5clrp2.6clrp2.7lcalldly_10msdjnzr4,tt1cplp1.0djnzr3,a1jmpmain,tab:db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,dly_10ms:MOVR5,#5d1:movr6,#4D2:MOVR7,#248DJNZR7,$DJNZR6,D2DJNZR5,D1RET,end,【例4-4】,有一巡回检测报警装置,需对16路(x)输入进行检测,每路有一个最大允许值(y),为双字节数。需根据测量的路数(x),查表找出对应该路的最大允许值(y),看输入值是否大于最大允许值,如果大于就报警。取路数为x(0x15),y为最大允许值,放在表格中。设进入查表程序前,假设路数x已放于R2中,查表后该路的最大允许值y放于R3R4中。查表的程序如下:,【例4-4】,TB3:MOVA,R2ADDA,R2;(R2)*2(A)MOVR3,A;保存指针ADDA,#6;加补偿偏移量MOVCA,A+PC;查第一字节XCHA,R3;1ADDA,#3;2MOVCA,A+PC;1,查第二字节MOVR4,A;1RET;1TAB3:DW1520,3721,42645,7580;DW05F0H,0E89H,A695H,1D9CHDW3483,32657,883,9943DW10000,40511,6758,8931DW4468,5871,13284,27808,对于双字节数据来说,第n个数据的起始地址=表首地址+2n(n从0开始)绝对偏移量=补偿偏移量+相对偏移量,【例4-5】,【例4-5】以AT89S51为核心的温度控制器,温度传感器输出的电压与温度为非线性关系,传感器输出的电压已由A/D转换为10位二进制数。测得的不同温度下的电压值数据构成一个表,表中温度值为y(双字节无符号数),x(双字节无符号数)为电压值数据。设测得电压值x放入R2R3中,根据电压值x,查找对应的温度值y,仍放入R2R3中。参考程序:,【例4-5】,LTB2:MOVDPTR,#TAB2MOVA,R3;R3电压值低8位CLRCRLCA;A值乘以2MOVR3,AXCHA,R2;交换后A中电压高8位,R2低8位*2RLCA;A值乘以2,即高8位*2XCHR2,A;交换后A电压低8位*2,R2高8位*2ADDA,DPL;(R2R3)+(DPTR)(DPTR)MOVDPL,AMOVA,DPHADDCA,R2MOVDPH,ACLRA,MOVCA,A+DPTR;查第一字节MOVR2,A;第一字节存入R2中CLRAINCDPTRMOVCA,A+DPTR;查第二字节MOVR3,A;第二字节存入R3中RETTAB2:DW,;温度值表,【例4-5】,【例4-6】从50个字节的无序表中查找一个关键字“xxH”。ORG1000HMOV30H,#xxH;关键字xxH送30H单元MOVR1,#50;查找次数送R1MOVA,#14H;20D修正值送AMOVDPTR,#TAB4;表首地址送DPTR,【例4-6】,【例4-6】,LOOP:PUSHAccMOVCA,A+PC;查表结果送ACJNEA,30H,LOOP1;3(30H)不等于关键字则转LOOP1MOVR2,DPH;2查到关键字,把地址送R2,R3MOVR3,DPL;2DONE:RET;1LOOP1:POPAcc;2修正值弹出INCA;1A+1AINCDPTR;1修改数据指针DPTRDJNZR1,LOOP;2R10,未查完,继续查找MOVR2,#00H;2R1=0,R2和R3清0MOVR3,#00H;2表中50个数已查完AJMPDONE;2从子程序返回TAB4:DB,;50个无序数据表,【例4-7】片内RAM中存放一批数据,查找出最大值并存放于首地址中。设R0中存放首地址,R2中存放字节数,程序框图见图4-1。程序如下:MOVR2,#n;n为要比较的数据字节数MOVA,R0;存首地址指针MOVR1,ADECR2MOVA,R1LOOP:MOVR3,ADECR1CLRCSUBBA,R1;两个数比较JNCLOOP1;C=0,A中数大,跳LOOP1MOVA,R1;C=1,则大数送ASJMPLOOP2LOOP1:MOVA,R3LOOP2:DJNZR2,LOOP;是否比较结束?MOVR0,A;存最大数RET,【例4-7】,【例4-8】,【例4-8】一批单字节无符号数,以R0为首地址指针,R2中为字节数,将这批数进行升序排列(冒泡法)。程序如下:SORT:MOVA,R0MOVR1,AMOVA,R2;字节数送入R5,字节数MOVR5,ACLRF0;互换标志位F0清0DECR5MOVA,R1LOOP:MOVR3,AINCR1CLRCMOVA,R1;比较大小,【例4-8】,SUBBA,R3JNCLOOP1SETBF0;互换标志位F0置1MOVA,R3;XCHA,R1;两个数互换DECR1XCHA,R1INCR1LOOP1:MOVA,R1DJNZR5,LOOPJBF0,SORTRET,【例4-9】,【例4-9】求单字节有符号数的二进制补码(单分支)CMPT:JNBAcc.7,RETURN;(A)0,不需转换MOVC,Acc.7;符号位保存CPLA;(A)求反,加1ADDA,#1MOVAcc.7,C;符号位存在A的最高位RETURN:RET,【例4-10】,【例4-

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论