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