⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parfpm.lst

📁 msc1201 编程4
💻 LST
📖 第 1 页 / 共 5 页
字号:
 272          //0e: Write i and chk
 273          //0f: Pre-bake: Program Slave CPU with AA and check result
 274          //10: LED/Beeper
 275          //11: Key On-Off
 276          //12: Key Voltage Level
 277          //13: SRD/SWR Test???
 278          unsigned char util (unsigned char cpu, unsigned char k)
 279          {	unsigned int i;
 280   1         unsigned int n,e,f, end; 
 281   1         unsigned char c, err=0, cpux,src_cpu, dest_cpu, pat, ps=0, done
            -=0, trial=0,  inc,a,s,j;
 282   1         bit kk;
 283   1      	if (target.exist)	n=target.kbyte*1024; else n=32*1024;
 284   1         if (k==0x01){ 	// Secure Part
 285   2      			err=fpm(cpu|FWR,0x807f,fpm(cpu|FRD,0x807f,0) & 0x7F); 
 286   2      	}
 287   1         if (k==0x02){ 	// 'cpu' define dest CPU
 288   2         	if (cpu==CPUS) {src_cpu=CPUA; dest_cpu=CPUS;}
 289   2         	else if (cpu==CPUA) {src_cpu=CPUS; dest_cpu=CPUA;}
 290   2         	else err=9;
 291   2      	  	err |= fpm(dest_cpu|FME,0x0000,0xff);
 292   2      	  	err |= fpm(dest_cpu|FME,0x8000,0xff); 
 293   2      	  	if (err!=0) err=1;
 294   2      	  	else {
 295   3      			i=0; done=0; f=0; err=0; led(RED,ON); 
 296   3      			while(!done){
 297   4      				s=fpm(dest_cpu|FRD,i,0); 
 298   4      				if (s!=0xff) {err=2; f=i; done=1;} //Blank0 check err
 299   4      				else {
 300   5      					a=fpm(src_cpu|FRD,i,0); 
 301   5      					if (a!=0xff) {
 302   6      						fpm(dest_cpu|FWR,i,a); 
 303   6      						s=fpm(dest_cpu|FRD,i,0); 
 304   6      						if (s!=a) {err=3; f=i; done=1;} // Write0 Err
 305   6      					}
 306   5      				}  
 307   4      				if ((i&0x01ff)==0x0100) {led(GREEN,OFF);}
 308   4      				if ((i&0x01ff)==0x0000) {led(GREEN,ON);}
 309   4      				i++; if (i==n) done=1;
 310   4      			}		  	
 311   3      			i=0x8000; done=0; 
 312   3      			while(!done && err==0){
 313   4      				if (!blackout(i)){
 314   5      					s=fpm(dest_cpu|FRD,i,0); 
 315   5      					if (s!=0xff) {err=4; f=i; done=1;} //Blank1 check err
 316   5      					else {
 317   6      						a=fpm(src_cpu|FRD,i,0); 
 318   6      						if (a!=0xff) {
 319   7      							fpm(dest_cpu|FWR,i,a); 
 320   7      							s=fpm(dest_cpu|FRD,i,0); 
 321   7      							if (s!=a) {err=5; f=i; done=1;} // Write1 Err
 322   7      						}
 323   6      					}  
 324   5      				}
 325   4      				i++; if (i==0x8080) done=1;
 326   4      			}		  	
 327   3      	  	}
 328   2      	  	if (err==1)	putstr(" Mass Erase Error");
 329   2      	  	if (err==2 || err==4) putstr(" Blank Check Error:");
 330   2      	  	if (err==3 || err==5)	putstr(" Write Error:");
 331   2      		if (err!=0) {led(RED,ON);led(GREEN,OFF);tx_hex(f>>8); tx_hex(f);
            - } else {led(RED,OFF);led(GREEN,ON);} 
 332   2      	}
 333   1         if (k==0x03 || k==0x04){ 	
 334   2      	   src_cpu=cpu; 
 335   2         	if (k==0x03 && cpu==CPUA) { dest_cpu=CPUS;}
 336   2         	if (k==0x03 && cpu==CPUS) { dest_cpu=CPUA;}
 337   2      		i=0; done=0; f=0; err=0; led(GREEN,OFF); 
 338   2      		while(!done){
 339   3      			a=fpm(src_cpu|FRD,i,0); 
 340   3      			if (k==0x03) s=fpm(dest_cpu|FRD,i,0); else s=0xff;
 341   3      			if (s!=a) {err=1; f=i; done=1;}
 342   3      			i++; if (i==n) done=1;
 343   3      			if ((i&0x01ff)==0x0100) {led(RED,OFF);}
 344   3      			if ((i&0x01ff)==0x0000) {led(RED,ON);}
 345   3      		}
 346   2      		i=0x8000; done=0;  
 347   2      		while(!done && err==0){
 348   3      			if (!blackout(i)){
 349   4      				a=fpm(src_cpu|FRD,i,0); 
 350   4      				if (k==0x03) s=fpm(dest_cpu|FRD,i,0); else s=0xff;
 351   4      				if (s!=a) {err=1; f=i; done=1;}
 352   4      			}
 353   3      			i++; if (i==0x8080) done=1;
 354   3      		}
 355   2      		if (err!=0) {
 356   3      			putstr(" Error:");
 357   3      			led(RED,ON);led(GREEN,OFF);tx_hex(f>>8); tx_hex(f); 
 358   3      		} else {led(RED,OFF);led(GREEN,ON);} 
 359   2      	}
 360   1      	if (k==5){	// mass erase
 361   2      	  	err |= fpm(cpu|FME,0x0000,0xff);
 362   2      	  	err |= fpm(cpu|FME,0x8000,0xff); 				
 363   2      	}
 364   1         if (k==7) { P0DDR=P0OUT; while(RI==0) id= c++; P0DDR=P0IDLE;}
 365   1         if (k==8) while(RI==0) al= c++; 
 366   1         if (k==9) while(RI==0){ ah= c++; CP=0; CP=1;}
 367   1         if (k==0x0a) while(RI==0)	{CMD0=(c&1)?0:1; CMD1=(c&2)?0:1; CMD2
            -=(c&4)?0:1; REQA=(c&8)?0:1; REQS=(c&16)?0:1; c=((c&0x1f)==0x1f)?0:(
            -c+1);}
 368   1         if (k==0x0b) { // Address Decoder and connection check
 369   2         	putstr("March Up {R1,W0,R0}  ");
 370   2      	   fpm(cpu|FME,0,0xff);
 371   2      		i=0; inc=1; end=n; done=0; f=0; err=0;
 372   2      		while(!done){
 373   3      			c=fpm(cpu|FRD,i,0); 
 374   3      			if (c!=0xff) {CMD2=1;  err|=1; f=i; done=1;} 
 375   3      			else {
 376   4      				CMD1=1; fpm(cpu|FWR,i,0); c=fpm(cpu|FRD,i,0); 
 377   4      				if (c!=0) {CMD2=1;  err|=1; f=i; done=1;} 
 378   4      			}  
 379   3      			if ((i&0x01ff)==0x01ff) {led(RED,ON); led(GREEN,OFF);}
 380   3      			if ((i&0x01ff)==0x00ff) {led(RED,OFF); led(GREEN,OFF);}
 381   3      			i+=inc; if (i==end) done=1;
 382   3      		}	
 383   2      		if (err!=0) {tx_hex(f>>8); tx_hex(f);} 
 384   2         	putstr("March Down {R1,W0,R0}  ");
 385   2      	   fpm(cpu|FME,0,0xff);
 386   2      		i=n-1; end=0xffff; done=0; f=0;
 387   2      		while(!done){
 388   3      			c=fpm(cpu|FRD,i,0); 
 389   3      			if (c!=0xff) {CMD2=1;  err|=1; f=i; done=1;} 
 390   3      			else {
 391   4      				CMD1=1; fpm(cpu|FWR,i,0); c=fpm(cpu|FRD,i,0); 
 392   4      				if (c!=0) {CMD2=1;  err|=1; f=i; done=1;} 
 393   4      			}  
 394   3      			if ((i&0x01ff)==0x01ff) {led(RED,ON); led(GREEN,ON);}
 395   3      			if ((i&0x01ff)==0x00ff) {led(RED,ON); led(GREEN,OFF);}
 396   3      			i--; if (i==end) done=1;
 397   3      		}	
 398   2      		if (err!=0) {
 399   3      			tx_hex(f>>8); tx_hex(f); led(RED,ON); led(GREEN,OFF);
 400   3      		} else {led(RED,OFF); led(GREEN,ON);}
 401   2      	}
 402   1         if (k==0x0c){ //After Bake Retention test only
 403   2         	e=0; f=0;
 404   2      		i=0; for (i=0;i<n;i++){ // Retention check 0000~80000
 405   3      			c=fpm(cpu|FRD,i,0); if (c!=ONE) {CMD2=1;  err=1; if (f==0) f=i;
            -} else {CMD1=1;}  
 406   3      			if ((i&0x01ff)==0x01ff) {led(RED,ON); led(GREEN,ON);}
 407   3      			if ((i&0x01ff)==0x00ff) {led(RED,OFF); led(GREEN,OFF);}
 408   3      		}
 409   2      		i=0; for (i=0x8000;i<0x8080;i++){ // Retention check 80000~807F

            - 410   3      			if (blackout(i)==0){
 411   4      				c=fpm(cpu|FRD,i,0); if (c!=ONE) {CMD2=1;  err=1; if (e==0) e=i
            -;} else {CMD1=1;}  
 412   4      			}
 413   3      		}
 414   2      		if (err!=0) {tx_hex(f>>8); tx_hex(f);tx_hex(e>>8); tx_hex(e);} 

            - 415   2      	}
 416   1         if (k==0x0d){ //After-bake retention chk & March Test
 417   2         	e=0; f=0;
 418   2      		i=0; for (i=0;i<n;i++){ // Retention check 0000~80000
 419   3      			c=fpm(cpu|FRD,i,0); if (c!=ONE) {CMD2=1;  err=1; if (f==0) {f=i
            -;}} else {CMD1=1;}  
 420   3      			if ((i&0x01ff)==0x01ff) led(RED,ON);
 421   3      			if ((i&0x01ff)==0x00ff) led(RED,OFF);
 422   3      		}
 423   2      		i=0; for (i=0x8000;i<0x8080;i++){ // Retention check 80000~807F

            - 424   3      			if (blackout(i)==0){
 425   4      				c=fpm(cpu|FRD,i,0); if (c!=ONE) {CMD2=1;  err=1;  if (e==0) {e
            -=i;}} else {CMD1=1;}  
 426   4      			}
 427   3      		}
 428   2      		if (err!=0) {tx_hex(f>>8); tx_hex(f);tx_hex(e>>8); tx_hex(e);} 

            - 429   2      		else {resetpfpm(); err|=march(cpu);}
 430   2      	}
 431   1      	if (k==0x0e){ //Write i and chk
 432   2      	  		err |= fpm(cpu|FME,0x0000,0xff);
 433   2      	  		err |= fpm(cpu|FME,0x8000,0xff);
 434   2      			tx_hex(n>>8); tx_hex(n); e=0; f=0;
 435   2      			i=0; for (i=0;i<n;i++){fpm(cpu|FWR,i,i); c=fpm(cpu|FRD,i,0); if
            - (c!=(unsigned char) i) {CMD2=1; err=1; if (e==0) {e=i;}} else {CMD
            -1=1;} }
 436   2      			i=0; for (i=0;i<n;i++){c=fpm(cpu|FRD,i,0); if (c!=(unsigned cha
            -r) i) {CMD2=1;  if (f==0) {err=1; f=i;}} else {CMD1=1;}  }
 437   2      		if (err!=0) {tx_hex(f>>8); tx_hex(f);tx_hex(e>>8); tx_hex(e);} 

            - 438   2      	}
 439   1      	if (k==0x0f){
 440   2      	  	err |= fpm(cpu|FME,0x0000,0xff);
 441   2      	  	err |= fpm(cpu|FME,0x8000,0xff); 				
 442   2      		e=0; f=0; i=0; done=0;
 443   2      		led(RED,ON);
 444   2      		while (!done){
 445   3      			if (!blackout(i)) {fpm(cpu|FWR,i,ONE); c=fpm(cpu|FRD,i,0); }
 446   3      			else c=ONE;
 447   3      				if (c==ONE ) {
 448   4      					CMD1=1; trial=0;	i++; 
 449   4      					if (ps==1 && i>=0x8080) done=1;
 450   4      					if (ps==0 && i>=n) { ps=1; i=0x8000;}
 451   4      				} else if (trial <3) trial ++; else {CMD2=1; err=1; e=i; done=
            -1;}
 452   3      				if ((i&0x01ff)==0x01ff) led(GREEN,ON); 
 453   3      				if ((i&0x01ff)==0x00ff) led(GREEN,OFF);
 454   3      		}
 455   2      		err=resetpfpm();
 456   2      		i=0; e=0; f=0;
 457   2      		for (i=0;i<n;i++){ // Double chk all
 458   3      			c=fpm(cpu|FRD,i,0); if (c!=ONE) {CMD2=1;  err=1; e=i;} else {CM
            -D1=1;}  
 459   3      			led(RED,ON);
 460   3      			if ((i&0x01ff)==0x01ff) led(GREEN,ON);
 461   3      			if ((i&0x01ff)==0x00ff) led(GREEN,OFF);
 462   3      		}
 463   2      		i=0; for (i=0x8000;i<0x8080;i++){ // Double chk all
 464   3      			if (blackout(i)==0){
 465   4      				c=fpm(cpu|FRD,i,0); if (c!=ONE) {CMD2=1;  err=1; f=i;} else {C
            -MD1=1;}  
 466   4      			}
 467   3      		}
 468   2      		if (err!=0) {tx_hex(e>>8); tx_hex(e);tx_hex(f>>8); tx_hex(f);}
 469   2      	}
 470   1         if (k==0x10) { while(RI==0){led(GREEN,ON); led(RED,OFF); beep(7
            -00,200); led(GREEN,OFF); led(RED,ON); beep(300,200);}}
 471   1         if (k==0x11) { while(RI==0){tx_hex(high(k1)); putspace1(); tx_h
            -ex(high(k2));putspace1(); tx_hex(high(k3)); putcr(); beep(300,500);
            -}}   
 472   1         if (k==0x12) { while(RI==0){tx_hex((k1)); putspace1(); tx_hex((
            -k2));putspace1(); tx_hex((k3)); putcr();}}   
 473   1      	RI=0;	return (err);
 474   1      }

WARNING C092 IN LINE 281 OF parfpm.c : 'cpux' is declared but not used

WARNING C092 IN LINE 281 OF parfpm.c : 'pat' is declared but not used

WARNING C092 IN LINE 281 OF parfpm.c : 'j' is declared but not used

WARNING C092 IN LINE 282 OF parfpm.c : 'kk' is declared but not used
 475          
 476          
RC51 COMPILER V03.03.29,  PARFPM                  06/03/03  11:10:05  PAGE  2

ASSEMBLY LISTING OF GENERATED OBJECT CODE

            ; FUNCTION _fpm (BEGIN)
              ; Register R7 is assigned to parameter cmd
              ; Register R4R5 is assigned to parameter a
              ; Register R3 is assigned to parameter pd
                                           ; SOURCE LINE # 8 
0000 EF             MOV    A,R7
0001 54F0           ANL    A,#0F0H
0003 F500    R      MOV    cpu,A
0005 EF             MOV    A,R7
0006 540F           ANL    A,#00FH
0008 F500    R      MOV    cmdx,A
              ; R7 is assigned to rdcmd
                                           ; SOURCE LINE # 9 
000A 6406           XRL    A,#006H
000C 6004           JZ     ?LAB7
000E E500    R      MOV    A,cmdx
0010 700C           JNZ    ?ELSE6
0012         ?LAB7:
0012 7F01           MOV    R7,#001H
0014 E4             CLR    A
0015 F5AD           MOV    P0DDR+01H,A
0017 F5AC           MOV    P0DDR,A
0019 7580FF         MOV    id,#0FFH
001C 8008           SJMP   ?NXT13
001E         ?ELSE6:
                                           ; SOURCE LINE # 10 
001E E4             CLR    A
001F F5AD           MOV    P0DDR+01H,A
0021 F5AC           MOV    P0DDR,A
0023 8B80           MOV    id,R3
0025 FF             MOV    R7,A
0026         ?NXT13:
                                           ; SOURCE LINE # 11 
0026 8C02           MOV    AR2,R4
0028 8A90           MOV    ah,R2
002A E500    R      MOV    A,cmdx
002C 5401           ANL    A,#001H
002E 24FF           ADD    A,#0FFH
0030 92B5           MOV    CMD0,C
0032 C2A3           CLR    CP
0034 D2A3           SETB   CP
0036 E500    R      MOV    A,cmdx
0038 5402           ANL    A,#002H
003A 24FF           ADD    A,#0FFH
003C 92B6           MOV    CMD1,C
                                           ; SOURCE LINE # 12 
003E 8D90           MOV    al,R5
0040 E500    R      MOV    A,cmdx
0042 5404           ANL    A,#004H
0044 24FF           ADD    A,#0FFH
0046 92B7           MOV    CMD2,C
              ; R6 is assigned to c
                                           ; SOURCE LINE # 13 
0048 E500    R      MOV    A,cpu
004A 6480           XRL    A,#080H
004C 7023           JNZ    ?ELSE7
                                           ; SOURCE LINE # 14 
004E D2A1           SETB   REQA
0050         ?WHILE6:
0050 20A202         JB     ACKA,?NXT15
0053 80FB           SJMP   ?WHILE6
0055         ?NXT15:
0055 E4             CLR    A
0056 20B401         JB     PASSA,?LAB9
0059 04             INC    A
005A         ?LAB9:
005A FE             MOV    R6,A
                                           ; SOURCE LINE # 15 
005B EF             MOV    A,R7
005C 6004           JZ     ?ELSE8
005E AE80           MOV    R6,id
0060 8008           SJMP   ?NXT16
0062         ?ELSE8:
0062 E4             CLR    A
0063 F5AD           MOV    P0DDR+01H,A
0065 F5AC           MOV    P0DDR,A
0067 7580FF         MOV    id,#0FFH
006A         ?NXT16:
                                           ; SOURCE LINE # 16 
006A C2A1           CLR    REQA
006C         ?WHILE7:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -