1.玩玩中断.<br /> ADC查询实在是晕~~~<br />2.俺喜欢N中取N-2即"跳水算法"<br />3.汇编也要玩"宏汇编"~~~<br /><br />看看当年菜农玩的PIC宏汇编~~~<br /><br />;-------------------------------------------------------------------;<br />;HPL Version 1.0 演示程序 ;<br />;HotPower 2003.5.25 ;<br />;-------------------------------------------------------------------;<br />#include <p16f877.inc><br />#include <HotPower.inc>HPL语言函数库文件<br />#include <HPLMath.inc>HPL语言数学函数库文件<br />#include <HPL16877.inc>P16F877函数库文件<br />;C++ main(){<br /> Main(Void);主程序开始<br /> nop;debug<br />;C++ unsigned char i,j,k,m,n,h,l,x,y,z;<br />nop;debug<br /> TDByteVar(p,0x60,0x64);声明1个地址不连续字型变量i,地址定位在0x60和0x64处<br />nop;debug<br /> VarVal(p,0x1234);<br />nop;debug<br />; Var(t,0x66,TDByte);声明1个字节型变量i,地址定位在0x20处<br />;产生告警信息:<br />;请用TDByteVal()定义变量[t],地址为[0x66]<br />Var(i,0x20,TByte);声明1个字节型变量i,地址定位在0x20处<br />nop;debug<br /> VarVal(i,0x20);i变量使用正确<br />nop;debug<br /> ByteVal(i,0x88);i变量使用正确<br />nop;debug<br /> WordVal(i,0x1234);i变量使用错误,地址0x21被改写为0x12<br />; TypeVar(i,0x20,TWord);改写1个字型变量i,地址定位在0x20:0x21处<br />;产生告警信息:<br />;第1个变量类型被重新定义为[TWord]类型,变量地址为[0x20]<br /> WordVal(i,0x1234);i变量使用正确<br /> ByteVal(i,0x88);i变量使用正确<br />Var(j,0x21,TByte);声明1个字节型变量j,地址定位在0x21处<br />;Var(j,0x60,TByte);声明1个字节型变量j,地址定位在0x21处<br />;产生错误信息(115)<br />;Duplicate label ("j" or redefining symbol that cannot be redefined<br />Var(k,0x22,TByte);声明1个字节型变量k,地址定位在0x22处<br />;Var(k,0x22,TByte);声明1个字节型变量k,地址定位在0x22处<br />;产生错误信息:<br />;第3个变量[k]被重复定义,变量地址为[0x22]<br />Var(m,0x23,TByte);声明1个字节型变量m,地址定位在0x23处<br />Var(n,0x24,TByte);声明1个字节型变量n,地址定位在0x24处<br />Var(h,0x25,TByte);声明1个字节型变量h,地址定位在0x25处<br />Var(l,0x26,TByte);声明1个字节型变量l,地址定位在0x26处<br />Var(x,0x27,TByte);声明1个字节型变量x,地址定位在0x27处<br />Var(y,0x28,TByte);声明1个字节型变量y,地址定位在0x28处<br />Var(z,0x29,TByte);声明1个字节型变量z,地址定位在0x29处<br />;TypeVar(z,0x29,TWord);将变量z改写为字型,地址定位在0x29:0x2a处<br />;产生告警信息:<br />;第10个变量[z]类型被重新定义为[TWord]类型,变量地址为[0x29]<br />;C++ unsigned int ii,jj,kk,mm,nn,hh,ll,xx,yy,zz;<br />Var(ii,0x30,TWord);声明1个字型变量ii,地址定位在0x30:0x31处<br />Var(jj,0x32,TWord);声明1个字型变量jj,地址定位在0x32:0x33处<br />Var(kk,0x34,TWord);声明1个字型变量kk,地址定位在0x34:0x34处<br />Var(mm,0x36,TWord);声明1个字型变量mm,地址定位在0x36:0x37处<br />Var(nn,0x38,TWord);声明1个字型变量nn,地址定位在0x38:0x39处<br />Var(hh,0x3a,TWord);声明1个字型变量hh,地址定位在0x3a:0x3b处<br />Var(ll,0x3c,TWord);声明1个字型变量ll,地址定位在0x3c:0x3d处<br />Var(xx,0x3e,TWord);声明1个字型变量xx,地址定位在0x3e:0x3f处<br />Var(yy,0x40,TWord);声明1个字型变量yy,地址定位在0x40:0x41处<br />Var(zz,0x42,TWord);声明1个字型变量zz,地址定位在0x42:0x43处<br />;Var(zz,0x42,TByte);将变量zz改写为字节型,地址定位在0x42:0x43处<br />;产生告警信息:<br />;第20个变量[zz]有多类型定义,变量地址为[0x42]<br />; org 0x8fd<br /> nop;debug<br />IFET_Bit(STATUS,Z);<br /> ByteVal(i,0);<br /> nop;debug<br /> ELSEIFET_Bit;<br /> ByteVal(i,1);<br /> nop;debug<br /> ENDIFET_Bit;<br /> nop;debug<br />IFNT_Bit(STATUS,Z);<br /> ByteVal(i,0);<br /> nop;debug<br /> ELSEIFNT_Bit;<br /> ByteVal(i,1);<br /> nop;debug<br /> ENDIFNT_Bit;<br />;C++ i=100;<br />ByteVal(i,10);<br />nop;debug<br />;C++ j=123<br />ByteVal(j,123);<br />nop;debug<br />;C++ ii=(unsigned int)i*j;<br />; MulByteVar(i,j,ii);<br />;C++ ii=0x1234;<br />WordVal(ii,0x1234);<br />nop;<br />;C++ kk=ii/jj;<br />DivWordVar(ii,jj,xx,yy);<br />nop;debug<br />;C++ jj=ii;<br />WordVar(jj,ii);<br />nop;debug<br />;C++ i=88;<br />ByteVal(i,80);<br />nop;debug<br />;C++ if(i==88){<br /> IFNE_ByteVal(i,88);<br />;C++ j=99;<br /> ByteVal(j,99);<br /> nop;debug<br />;C++ ??????????????<br /> IFET_TestByte(zz);<br />;C++ j=1;<br /> ByteVal(j,1);<br /> nop;debug<br />; ESLEIFET_TestByte<br />;C++ j=0;<br /> ByteVal(j,0);<br /> nop;debug<br /> ENDIFET_TestByte;<br />;C++ if(x & 1){<br /> IFET_AndByteVal(x,1)<br />;C++ j=1;<br /> ByteVal(j,1);<br /> nop;debug<br /> ELSEIFET_AndByteVal<br /> ByteVal(j,0);<br /> nop;debug<br /> ENDIFET_AndByteVal<br />;C++ } <br /><br />;C++ if(x | 1){<br /> IFET_OrByteVal(x,1)<br />;C++ j=1;<br /> ByteVal(j,1);<br /> nop;debug<br /> ELSEIFET_OrByteVal<br /> ByteVal(j,0);<br /> nop;debug<br /> ENDIFET_OrByteVal<br />;C++ } <br /><br />;C++ if(x ^ 1){<br /> IFET_XorByteVal(x,1)<br />;C++ j=1;<br /> ByteVal(j,1);<br /> nop;debug<br /> ELSEIFET_XorByteVal<br /> ByteVal(j,0);<br /> nop;debug<br /> ENDIFET_XorByteVal<br />;C++ } <br /><br />;C++ if(i>=33){<br /> IFGE_ByteVal(i,33);<br />;C++ k=i;<br /> ByteVar(k,i);<br /> nop;debug<br />;C++ }<br /> ENDIFGE_ByteVal;<br />;C++ if(j==99){<br /> IFEQ_ByteVal(j,88);<br />;C++ k=88;<br /> ByteVal(k,88);<br /> nop;debug<br />;C++ }<br />;C++ else{<br /> ELSEIFEQ_ByteVal;<br />;C++ m=9;<br /> ByteVal(m,9);<br /> nop;debug<br />;C++ }<br /> ENDIFEQ_ByteVal<br />;C++ h=9;<br /> ByteVal(h,9);<br /> nop;debug<br />;C++ }<br />;C++ else{<br /> ELSEIFNE_ByteVal;<br />;C++ n=9;<br /> ByteVal(n,9);<br /> nop;debug<br />;C++ if(n<8){;<br /> IFLE_ByteVal(n,8);<br />;C++ l=12;<br /> ByteVal(l,12);l=12;<br /> nop;debug<br />;C++ }<br />;C++ else{<br /> ELSEIFLE_ByteVal;<br />;C++ z=0xaf;<br /> ByteVal(z,0xaf);<br /> nop;debug<br />;C++ }<br /> ENDIFLE_ByteVal;<br /> nop;debug<br />;C++ }<br /> ENDIFNE_ByteVal;<br />;C++ x=123;<br /> ByteVal(x,123);<br /> nop;debug<br />;C++ y=25;<br /> ByteVal(y,25);<br /> nop;debug<br />;C++ y++;<br /> IncByte(y);<br /> nop;debug<br />;C++ if(x>5){<br /> IFGT_ByteVal(x,5);<br />;C++ x=y;<br /> ByteVar(x,y);<br /> nop;debug<br /> ENDIFGT_ByteVal;<br /> nop;debug<br />org 0x10fd<br /> nop;debug<br />IFET_Bit(STATUS,Z);<br /> ByteVal(i,0);<br /> nop;debug<br /> ELSEIFET_Bit;<br /> ByteVal(i,1);<br /> nop;debug<br /> ENDIFET_Bit;<br /> nop;debug<br /> ByteVal(i,2);<br /> nop<br /> DoCase(i);<br /> Case 1;<br /> nop<br /> AndByteVal(j,0xfe);<br /> nop<br /> Case 2;<br /> AndByteVal(j,0x7f);<br /> nop<br /> EndCase;<br /> nop<br />;C++ }<br />;C++ }<br /> MainEnd;主程序结束<br /><br />;-------------------------------------------------------------------<br />;DOCASE(switch) 演示程序 ;<br />;HotPower 2003.6.8 ;<br />;-------------------------------------------------------------------;<br />#include <p16f877.inc><br />#include <HotPower.inc>HPL语言函数库文件<br />#include <HPLMath.inc>HPL语言数学函数库文件<br />#include <HPL16877.inc>P16F877函数库文件<br /> Main(Void); main(){//主程序开始<br /> Var(i,0x20,TByte); unsigned char i;<br /> Var(j,0x30,TByte); unsigned char j;<br /> Var(k,0x40,TByte); unsigned char k;<br /> Var(m,0x50,TByte); unsigned char m;<br /> Var(n,0x60,TByte); unsigned char n;<br /> ByteVal(i,2); i = 2;<br /> ByteVal(j,3); j = 3;<br /> ByteVal(k,0); k = 0;<br /> DoCase(k); switch(k){<br /> nop;<br /> Case 10; case 10:<br /> nop; //HPL语言同Delphi等语言一样,不需要加break语句<br /> Case 8; case 8:<br /> nop<br /> ExecCase;//该语句为HPL语言特有的,其他语言中没有<br />;-----ExecCase执行CASE比较成立的语句--------------------<br /> nop<br /> ELSECase; default:<br />;-----ElseCase执行CASE比较不成立的语句------------------<br /> nop;<br /> IncByte(k); k++;<br /> nop<br /> IFEQ_ByteVal(k,6); if(k == 6){<br /> nop<br /> ExitCase; break;<br /> nop<br /> ENDIFEQ_ByteVal; }<br /> nop;<br /> LoopCase; continue;<br /> nop<br /> ENDCase; }<br /> nop<br /> DoCase(i); switch(i){<br /> Case 1; case 1:<br /> nop<br /> ExitCase; break;<br /> Case 2; case 2:<br /> nop<br /> DoCase(j); switch(j){<br /> Case 1; case 1:<br /> nop;<br /> Case 2; case 2:<br /> nop;<br /> Case 3; case 3:<br /> ByteVal(k,88); k = 88;<br /> nop<br /> IFEQ_ByteVal(k,88); if(k == 88){<br /> ByteVal(m,3); m = 3;<br /> nop<br /> DoCase(m); switch(m){<br /> Case 1; case 1:<br /> nop<br /> Case 2; case 2:<br /> nop<br /> Case 3; case 3:<br /> ByteVal(n,0x99); n = 99;<br /> nop;<br /> IFEQ_ByteVal(n,88); if(n == 88){<br /> nop<br /> ELSEIFEQ_ByteVal; }else{<br /> ByteVal(i,2); i = 2;<br /> nop;<br /> DoCase(i); switch(i){<br /> Case 1; case 1:<br /> nop<br /> Case 2; case 2:<br /> ByteVal(j,8); j = 8;<br /> nop<br /> IFLE_ByteVal(j,88); if(j <= 88){<br /> nop<br /> ELSEIFLE_ByteVal; }else{<br /> ByteVal(j,3); j = 3;<br /> nop<br /> DoCase(j); switch(j){<br /> Case 1; case 1:<br /> nop;<br /> Case 2; case 2:<br /> nop<br /> ELSECase; default:<br /> nop;<br /> ENDCase; }<br /> nop<br /> ByteVal(k,3); k = 3;<br /> nop<br /> DoCase(k); switch(k){<br /> Case 1; case 1:<br /> nop;<br /> Case 2; case 2:<br /> nop<br /> ELSECase; default:<br /> nop;<br /> ENDCase; }<br /> nop<br /> ENDIFLE_ByteVal; }<br /> nop<br /> ELSECase; default:<br /> nop<br /> ENDCase; }<br /> nop<br /> ENDIFEQ_ByteVal; }<br /> nop;<br /> ELSECase; default:<br /> nop;<br /> ENDCase; }<br /> nop<br /> ELSEIFEQ_ByteVal; }else{<br /> nop<br /> ENDIFEQ_ByteVal; }<br /> nop<br /> ELSECase; }<br /> nop<br /> ENDCase; }<br /> nop<br /> Case 3; case 3:<br /> nop<br /> Case 4; case 4:<br /> ByteVal(j,8); j = 8;<br /> nop<br /> DoCase(j); switch(j){<br /> Case 1; case 1:<br /> nop;<br /> Case 2; case 2:<br /> nop<br /> ELSECase; default:<br /> nop;<br /> ENDCase; }<br /> nop;<br /> nop<br /> Case 5; case 5:<br /> nop<br /> ELSECase; default:<br /> ByteVal(j,1); j = 1;<br /> nop<br /> DoCase(j); switch(j){<br /> Case 1; case 1:<br /> nop;<br /> Case 2; case 2:<br /> nop<br /> ELSECase; default:<br /> nop;<br /> ENDCase; }<br /> nop;<br /> ENDCase; }<br /> nop<br /> MainEnd;}//主程序结束<br /><br />;-------------------------------------------------------------------;while演示程 ;<br />;HotPower 2003.6.8 ;<br />;------------------------------------------------------------------- #include <p16f877.inc><br />#include <HotPower.inc>HPL语言函数库文件<br />#include <HPLMath.inc>HPL语言数学函数库文件<br />#include <HPL16877.inc>P16F877函数库文件<br /> Main(Void); main(void){//主程序开始<br /> Var(i,0x20,TByte); unsigned char i;<br /> Var(j,0x30,TByte); unsigned char j;<br /> Var(k,0x40,TByte); unsigned char k;<br /> Var(m,0x50,TByte); unsigned char m;<br /> Var(n,0x60,TByte); unsigned char n;<br /> ByteVal(i,10); i = 10;<br /> ByteVal(j,3); j = 3;<br /> ByteVal(k,8); k = 8;<br /> nop<br /> WhileET_Bit(PORTB,BIT7);<br /> nop<br /> EndWhileET_Bit;<br /> nop<br /> DnWhileET_Bit;<br /> nop<br />; ExitDnWhileET_Bit;<br /> nop<br /> EndDnWhileET_Bit(PORTB,BIT7);<br /> nop<br /> DnWhileNT_Bit;<br /> nop<br /> ExitDnWhileNT_Bit;<br /> nop<br /> EndDnWhileNT_Bit(PORTB,BIT7);<br /> nop<br /> WhileEQ_ByteVal(i,10); while(i == 10){<br /> nop<br /> ByteVal(m,1); m = 1;<br /> nop;<br /> WhileNE_ByteVal(m,10); while(m != 10){<br /> nop;<br /> IncByte(m); m++;<br /> nop;<br /> ENDWhileNE_ByteVal; }<br /> nop;<br /> ByteVal(m,1); m = 1;<br /> nop;<br /> WhileLT_ByteVal(m,10); while(m < 10){<br /> nop;<br /> ExitWhileLT_ByteVal; break;<br /> nop<br /> IncByte(m); m++;<br /> nop;<br /> ENDWhileLT_ByteVal; }<br /> nop;<br /> ByteVal(m,18); m = 18;<br /> nop;<br /> WhileGT_ByteVal(m,10); while(m > 10){<br /> nop;<br /> IncByte(m); m++;<br /> nop<br /> LoopWhileGT_ByteVal; continue;<br /> nop;<br /> ENDWhileGT_ByteVal; }<br /> nop;<br /> ByteVal(m,1); m = 1;<br /> nop;<br /> WhileLE_ByteVal(m,10); while(m <= 10){<br /> nop;<br /> IncByte(m); m++;<br /> nop;<br /> ENDWhileLE_ByteVal; }<br /> nop;<br /> ByteVal(m,18); m = 18;<br /> nop;<br /> WhileGE_ByteVal(m,10); while(m >= 10){<br /> nop;<br /> IncByte(m); m++;<br /> nop;<br /> ENDWhileGE_ByteVal; }<br /> nop;<br /> ENDWhileEQ_ByteVal; }<br /> nop<br /> MainEnd; }//主程序结束<br /><br />;-------------------------------------------------------------------;<br />;For演示程序 ;<br />;HotPower 2003.6.8 ;<br />;-------------------------------------------------------------------;<br />#include <p16f877.inc><br />#include <HotPower.inc>HPL语言函数库文件<br />#include <HPLMath.inc>HPL语言数学函数库文件<br />#include <HPL16877.inc>P16F877函数库文件<br /> Main(Void); main(void){//主程序开始<br /> Var(i,0x20,TByte); unsigned char i;<br /> Var(j,0x30,TByte); unsigned char j;<br /> Var(k,0x40,TWord); unsigned int k;<br /> Var(t,0x48,TWord); unsigned int t;<br /> Var(m,0x50,TByte); unsigned char m;<br /> Var(n,0x60,TByte); unsigned char n;<br /> WordVal(t,0); t = 0;<br /> ByteVal(m,0); m = 0;<br /> ByteVal(n,0); n = 0;<br /> nop<br /> For_ByteVal(i,1,10); for(i = 1; i <= 10; i++){<br /> nop<br /> IncByte(m); m++;<br /> nop<br /> For_ByteVal(j,10,1); for(j = 10; j >= 1; j--){<br /> nop<br /> IFGT_ByteVal(n,0); if(n > 0){<br /> nop<br /> LoopFor_ByteVal; continue;<br /> nop<br /> ENDIFGT_ByteVal; }<br /> nop<br /> IncByte(n); n++;<br /> nop<br /> ENDFor_ByteVal; } <br /> nop<br /> For_WordVal(k,1,10000); for(k = 1; k <= 10000; k++){<br /> nop<br /> IncByte(n); n++;<br /> IFEQ_ByteVal(n,128); if(n == 128){<br /> nop<br /> ExitFor_WordVal; break;<br /> nop<br /> ENDIFEQ_ByteVal; }<br /> nop<br /> ENDFor_WordVal; } <br /> nop<br /> AddWordByte(t,m); t += m;<br /> nop<br /> AddWordByte(t,n); t += n;<br /> nop<br /> ENDFor_ByteVal; }<br /> nop<br /> MainEnd; }//主程序结束<br /><br /><br /><br />DoCase(k); switch(k){<br /> nop;<br /> Case 10; case 10:<br /> nop; //HPL语言同Delphi等语言一样,不需要加break语句<br /> Case 8; case 8:<br /> nop<br /> ExecCase;//该语句为HPL语言特有的,其他语言中没有<br />;-----ExecCase执行CASE比较成立的语句--------------------<br /> nop<br /> ELSECase; default:<br />;-----ElseCase执行CASE比较不成立的语句------------------<br /> nop;<br /> IncByte(k); k++;<br /> nop<br /> IFEQ_ByteVal(k,6); if(k == 6){<br /> nop<br /> ExitCase; break;<br /> nop<br /> ENDIFEQ_ByteVal; }<br /> nop;<br /> LoopCase; continue;<br /> nop<br /> ENDCase; }<br />
|