为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 软件程序清单

软件程序清单

2022-07-25 2页 doc 58KB 9阅读

用户头像 个人认证

is_366975

暂无简介

举报
软件程序清单软件程序清单ORG0000HLJMPMAIN;转主程序ORG0003H;外部中断INT0的入口地址LJMPINTA;转外部中断INT0服务程序ORG000BH;T0中断的入口地址LJMPT0-SEV;转T0溢出中断服务程序ORG0300HDATABUFEQU50H;数据缓冲区的首地址DISBUF1EQU60H;给定速度显示缓冲区的首地址DISBUF2EQU64H;实际速度显示缓冲区的首地址SAMP-D1E...
软件程序清单
软件程序清单ORG0000HLJMPMAIN;转主程序ORG0003H;外部中断INT0的入口地址LJMPINTA;转外部中断INT0服务程序ORG000BH;T0中断的入口地址LJMPT0-SEV;转T0溢出中断服务程序ORG0300HDATABUFEQU50H;数据缓冲区的首地址DISBUF1EQU60H;给定速度显示缓冲区的首地址DISBUF2EQU64H;实际速度显示缓冲区的首地址SAMP-D1EQU0000H;保存给定速度采样数据的首地址SAMP-D2EQU0500H;保存实际速度采样数据的首地址MAIN:MOVSP,#70H;设置堆栈指针MOVTMOD,#01H;定时器T0工作方式1MOVTL0,#18H;定时器赋初值,定时1msMOVTH0,#0FCHMOVR0,#0FH;软件计数器R0赋初值,计数15次SETBTR0;启动T0工作SETBEX0;允许INT0中断SETBEA;开CPU中断SJMP$;等待中断T0-SEV:;T0中断服务子程序MOVTL0,#18H;定时器重新赋值MOVTH0,#0FCHSETBIT0;中断触发方式为边沿触发方式SETBEA;CPU开中断SETBEX0;允许外部中断0中断INTA:PUSHACC;保护现场PUSHDPHPUSHDPLACALLAD1;调用AD1给定速度采样子程序ACALLFILTER;调用中值滤波子程序ACALLFA1ACALLAD2;调用AD2实际速度采样子程序ACALLFILTER;调用中值滤波子程序ACALLFA2POPDPH;恢复现场POPDPLPOPACCRETIACALLPID;调用数值PID控制算法子程序ACALLDAC;调用DAC转换程序LCALLTRAST1LCALLDBCD1LCALLDIS1;调用速度显示子程序MOVA,2AH;实际速度值送ALCALLTRAST1;调用代码转换子程序LCALLDBCD2;将实际转速压缩BCD码转换成单独的BCD码LCALLDIS2;调用实际速度显示子程序RETI;中断返回AD1:;调用AD1给定速度采样子程序MOVR0,#2CH;采样值起始地址送R0MOVR2,#03H;采样次数初值送R2MOVDPTR,#6FF8HJMPADC1AD2:MOVR0,#2CH;采样值起始地址送R0MOVR2,#03H;采样次数初值送R2MOVDPTR,#6FF9HADC1:MOVX@DPTR,A;启动ADC0809工作MOVR3,#20HDLYDJNZR3,DLY;延时HERE:JBP3.3,HERE;等待A/D完成MOVXA,@DPTR;采样值送AMOV@R0,A;存放采样值INCR0DJNZR2,ADC1;若采样未完,则ADC1RET;若采样完,则返回FILTER:;中值滤波算法子程序MOVA,2CH;(2CH)送ACJNEA,2DH,CMP1;(2CH)≠(2DH),则CMP1AJMPCMP2;否则转CMP2CMP1:JNCCMP2;若(2CH)=(2DH),则CMP2XCHA,2DHXCHA,2CHCMP2:MOVA,2DH;(2DH)送ACJNEA,2EH,CMPP3;若(2DH)≠(2EH),则CMP3MOV2AH,A;否则(2DH)送2AHRET;返回CMP3:JCCMP4;若(2DH)<(2EH),则CMP4MOV2AH,A;否则(2DH)送2AHERT;返回CMP4:MOVA,2EH;(2EH)送ACJNEA,2CH,CMP5;若(2EH)≠(2CH),则CMP5MOV2AH,A;否则(2EN)送2AHRETCMP5:JCCMP6XCHA,2CHCMP6:MOV2AH,ARETFA1:MOVDPTR,#SAMP-D1MOVX@DPTR,AMOV1AH,AINCDPTRFA2:MOVDPTR,#SAMP-D2MOVX@DPTR,AINCDPTRRETPID:MOVR5,1AHMOVR4,#00HMOVR3,2AHMOVR2,#00HACALLCPL1ACALLDSUMMOV39H,R7MOV3AH,R6MOVR5,35HMOVR4,36HMOVR0,#4AHACALLMULT1MOVR5,39HMOVR4,3AHMOVR3,3BHMOVR2,3CHACALLCPL1ACALLDSUMMOVR5,33HMOVR4,34HMOVR0,#46HACALLMULT1MOVR5,49HMOVR4,48HMOVR3,4DHMOVR2,4CHACALLDSUMMOV4AH,R7MOV4BH,R6MOVR5,39H;返回;若(2EH)<(2CH),则CMP6;否则(2EH)(2CH);A送2AH;将采样值送到外部RAM中的0000H单元;将采样值送到外部RAM中的0000H单元;数字PID控制算法子程序;给定值Ug送R5R4;实际值送UI(K)R3R2;取UI(K)的补码;双字节加法,计算E(K);E(K)送39H和3AHKI送R5R4;起始地址送4AH送R0;双字节带符号乘法,计算PI=KI*E(K);E(K)送R5R4;E(K-1)送R3R2;对E(K-1)求补;求[E(K)-E(K-1)];KP送R5R4;积起始地址46H送R0;求得Pp;Pp的高16位送R5R4PI送R3R2;求得Pp+PI;存入4AH和4BH单元;E(K)送R5R4MOVR4,3AHMOVR3,3DHMOVR2,3EHACALLDSUMMOVR5,F7MOVR4,R6MOVR3,3BHMOVR2,3CHACALLCPL1ACALLDSUMMOVR5,37HMOVR4,38HMOVR0,#46HACALLMULT1MOVR5,49HMOVR4,48HMOVR3,4AHMOVR2,4BHACALLDSUMMOVR3,R7MOVR2,R6MOVR5,2FHMOVR4,30HACALLDSUMMOV2FH,R7MOV30H,R6MOV3DH,3BHMOV3EH,3CHMOV3BH,39HMOV3CH,3AHRETDSUM:MOVA,R4ADDA,R2MOVR6,AMOVA,R5ADDCA,R3MOVR7,ARETCPL:MOVA,R2CPLAADDA,#01HMOVR2,A;E(K-2)送R3R2;计算E(K)+E(K-2);存入R5R4;E(K-1)送R3R2;对E(K-1)求补;求E(K)-2E(K-1)+E(K-2);KD送R5R4;积起始地址46H送R0;求得PD;送入R5R4Pp+PI送R3R2;求得Pp+PI+PD;送入R3R2;P(K-1)送R5R4;求出P(K);存入2FH和30H;E(K-1)送E(K-2)单元;E(K)S送E(K-1)单元;双字节加法子程序;双字节求补子程序MOVA,R3CPLAADDCA,#00HMOVR3,ARETMULT1:;双字节带符号乘法子程序MOVA,R7RLCAMOVSIGN1,C;被乘数符号送SIGN1JNCPOS1;若被乘数为正,则POS1MOVA,R6;对R6求补CPLAADDA,#01HMOVR6,AMOVA,R7;对R7求补CPLAADDCA,#00HMOVR7,APOS1:MOVA,R5RLCAMOVSIGN2,C;乘数符号送SIGN2JNCPOS2MOVA,R4;对R5求补CPLAADDA,#01HMOVR4,AMOVA,R5;对R5求补CPLAADDCA,#00HMOVR5,APOS2:ACALLMULT;调用无符号乘法程序MULTMOVC,SIGN1;两乘数皆为负?ANLC,SIGN2JCTPL;若是,则TPLMOVC,SIGN1;否则,判断两乘数是否为正ORLC,SIGN2JNCTPL;若是,则TPLDECR0;否则,对乘积的高16位求补MOVA,@R0CPLAADDA,#01HMOV@R0,AINCR0MOVA,@R0CPLAADDCA,#00HMOV@R0,ATPL:RETMULT:;双字节无符号乘法子程序MOVA,R6MOVB,R4MULAB;b*d=BAMOV@R0,A;bdL送(R0)MOVR3,B;bdH送(R3)MOVA,R7MOVB,R4MULAB;a*d=BAADDCA,R3;加法形成CyMOVR3,A;bdH+adL送R3MOVA,BADDCA,#00HMOVR2,A;adH+Cy送R2MOVA,R6MOVB,R5MULAB;b*c=BAADDA,R3INCR0MOV@R0,A;R3+bcL送(R0+1)MOVA,R2ADDCA,B;加法并形成CyMOVR2,A;R2+bcH+Cy送R2MOVR1,#00HJNCNEXT;若Cy=0,则NEXTINCR1;若Cy=1,则R1+1NEXT:MOVA,R7MOVB,R5MULAB;a*c=BAADDA,R2;加法形成CyINCR00MOV@R0,A;R2+acL送(R0+2)MOVA,BADDCA,R1INCR0MOV@R0,A;R1+acH+Cy送(R0+3)DAC:MOVDPTR,#5FFFHMOVA,30HTRAST1:;转换接收到的数据代码MOVA,1AH;接收到的数据送AJMPTRASTTRAST:MOVB,#3BH;乘数59送BMULABMOVR5,A;积的低位送R5MOVR4,B;积的高位送R4ACALLCHU;调用双字节除法程序MOV51H,R4;将压缩BCD码的高位送51HMOV50H,R5;将压缩BCD码的低位送50HCHU:;双字节除法(R4R5被除数,R6R7除数,商在R4R5,余数在R2R3)MOVR6,#00HMOVR7,#0AH;除数为10SRT:ACALLL1L2:SJMPL5NOPL1:CLRA;寄存器A清零MOVR2,A;R2清零MOVR3,A;R3清零MOVR1,#10H;循环16次L5:CLRC;进位标志位清零MOVA,R5;被乘数低8位送ARLCA;带进位左循环MOVR5,A;A中内容送到被乘数低8位MOVA,R4;被乘数高8位送ARLCA;带进位左循环MOVR4,A;A中内容送到被乘数高8位MOVA,R3RLCAMOVR3,AMOVA,R2RLCAMOVR2,A;被乘数左移一位送R2R3CLRCSUBBA,R6;比较R2和R6的大小JCL3;R2小,则转L3PUSH0E0H;压入堆栈MOVA,R3SUBBA,R7;比较R3和R7的大小JNCL4;R3大,则转L4MOV0F0H,APOP0E0H;出堆栈SUBBA,#00HJCL3MOVR2,AMOVR3,0F0HINCR5SJMPL3L4:MOVR3,APOP0E0HMOVR2,AINCR5L3:DJNZR1,L5;循环16次未完,则转L5RET;返回。将二进制数转换成对应的转速量,也就是转换成压缩BCD码DBCD1:;设定转速值压缩的BCD码转换成单独的BCD码MOVA,50HANLA,#0FHMOV60H,A;个位数送60HMOVA,50HANLA,#0F0HSWAPAMOV61H,A;十位数送61HMOVA,51HANLA,#0FHMOV62H,A;百位数送62HMOVA,51HANLA,#0F0HSWAPAMOV63H,A;千位数送63HRETDBCD2;;实际转速值压缩BCD码转换成单独的BCD码MOVA,50HANLA,#0FHMOV64H,A;个位数送64HMOVA,50HANLA,#0F0HSWAPAMOV65H,A;十位数送65HMOVA,51HANLA,#0FHMOV66H,A;百位数送66HMOVA,51HANLA,#0F0HSWAPAMOV67H,A;千位数送67HRETLOOP1LACALLDIS1DIS1:MOVA,#80H;方式控制字送AMOVDPTR,#2FFFH;控制命令口地址送2FFFHMOV@DPTR,A;方式控制字送8255命令口DISPLY1:MOVR0,#DISBUF1;显示缓冲区首地址送R0MOVR3,#0EFH;字位码始值送R3MOVA,R3LD1:MOVDPTR,#2FFDH;B口地址送DPTRMOV@DPTR,A;字位码送B口MOVDPTR,#2FFCH;A口地址送DPTRMOVA,@R0;待显示的地址偏移量送AMOVDPTR,#LEDCODEMOVCA,@A+DPTR;查字型码ACALLDELAY;延时1msINCR0;修正显示缓冲区指针MOVA,R3;字位码送AJNBACC.7,LD0;若ACC.7=0显示完一遍,则转LD0RLA;否则字位码左移一位MOVR3,A;送回R3AJMPLD1;显示下一个数码(L6)LD0:RET;返回DELAY:MOVR7,#02H;延时1ms程序DLY1:MOVR6,#0FFHDLY2:DJNZR6,DLY2DJNZR7,DLY1RETLEDCODE:3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDIS2:MOVA,#80H;方式控制字送AMOVDPTR,#2FFFHMOV@DPTR,A;方式控制字送8255命令口DISPLY2:MOVR0,#DISBUF2;显示缓冲区首地址送R0MOVR3,#0FEH;字位码始值送R3MOVA,R3LD2:MOVDPTR,#2FFDH;B口地址送DPTRMOV@DPTR,A;字位码送B口MOVDPTR,#2FFCH;A口地址送DPTRMOVA,@R0;待显示的地址偏移量送AMOVDPTR,#LEDCODEMOVCA,@A+DPTR;查字型码表ACALLDELAY;延时1msINCR0;修正显示缓冲区指针MOVA,R3;字位码送AJNBACC.3,LD0;若显示完一遍,则转LD0RLA;字位码左移一位MOVR3AJMPLD1,A;送回R3;显示下一个数码
/
本文档为【软件程序清单】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索