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

📄 main.s

📁 AVR单片机系统开发经典实例部分源程序
💻 S
字号:
	.module main.c
	.area text(rom, con, rel)
	.dbfile C:\AVR\t1\main.c
	.dbfunc e delay_1ms _delay_1ms fV
;              i -> R16,R17
	.even
_delay_1ms::
	.dbline -1
	.dbline 8
; #include<iom128v.h>
; #include<STDIO.h>
; #include<STRING.h>
; #include<stdlib.h>
; #include<MATH.h>
; #define xtal 4
; void delay_1ms(void)
; 	 {
	.dbline 10
; 	  unsigned int i;
;  	  for(i=1;i<(unsigned int)(xtal*143-2);i++)
	ldi R16,1
	ldi R17,0
	xjmp L5
L2:
	.dbline 11
L3:
	.dbline 10
	subi R16,255  ; offset = 1
	sbci R17,255
L5:
	.dbline 10
	cpi R16,58
	ldi R30,2
	cpc R17,R30
	brlo L2
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 i
	.dbend
	.dbfunc e readfile _readfile fV
;            map -> R0,R1
	.even
_readfile::
	.dbline -1
	.dbline 15
;       	; 
; 	 }
; 
; void readfile(int map[50][50])
; {
	.dbline 17
; 	//加入打开地图
;    ;
	.dbline -2
L6:
	.dbline 0 ; func end
	ret
	.dbsym l map 0 pA[100:50]I
	.dbend
	.dbfunc e save _save fV
;         walked -> R0,R1
	.even
_save::
	.dbline -1
	.dbline 22
; 	
; }
; 
; void save(int walked [50])
; {
	.dbline 24
; //	//保存地图
; ;
	.dbline -2
L7:
	.dbline 0 ; func end
	ret
	.dbsym l walked 0 pI
	.dbend
	.dbfunc e judge _judge fI
;         walked -> R0,R1
	.even
_judge::
	.dbline -1
	.dbline 29
; 
; }
; 
; int judge(int walked [50])
; {
	.dbline 30
; 	;
	.dbline 32
; 	//判断部分
; ;
	.dbline -2
L8:
	.dbline 0 ; func end
	ret
	.dbsym l walked 0 pI
	.dbend
	.dbfunc e renew _renew fV
;         walked -> R0,R1
	.even
_renew::
	.dbline -1
	.dbline 36
; }
; 
; void renew(int walked [50])
; {
	.dbline 37
; 	;
	.dbline -2
L9:
	.dbline 0 ; func end
	ret
	.dbsym l walked 0 pI
	.dbend
	.dbfunc e freenode _freenode fV
;              H -> R22,R23
;           head -> R20,R21
;             aa -> R10,R11
;             hh -> R16,R17
	.even
_freenode::
	xcall push_gset4
	.dbline -1
	.dbline 43
; 	//随机
; }
; 
;   
;  void freenode(int hh)
; {
	xjmp L12
L11:
	.dbline 46
;    int aa,head,H;
;    while(aa!=head)
;    {
	.dbline 47
;     H=aa;
	movw R22,R10
	.dbline 48
; 	aa=aa||head;
	cpi R22,0
	cpc R22,R23
	brne L16
X0:
	cpi R20,0
	cpc R20,R21
	breq L14
X1:
L16:
	ldi R24,1
	ldi R25,0
	movw R12,R24
	xjmp L15
L14:
	clr R12
	clr R13
L15:
	movw R10,R12
	.dbline 49
	clr R22
	clr R23
	.dbline 50
L12:
	.dbline 45
	cp R10,R20
	cpc R11,R21
	brne L11
	.dbline 50
; 	H=0;
;    }; 
	.dbline -2
L10:
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r H 22 I
	.dbsym r head 20 I
	.dbsym r aa 10 I
	.dbsym r hh 16 I
	.dbend
	.dbfunc e addstack _addstack fV
;          flag1 -> R20,R21
;           head -> R22,R23
;              p -> R16,R17
	.even
_addstack::
	xcall push_gset3
	.dbline -1
	.dbline 55
;   // 节点;
; }
; 
; void addstack(int p)
;  {
	xjmp L19
L18:
	.dbline 58
;     int head,flag1;                           //把路径读入数组
; 	while(p&&p!=head)
; 	 {
	.dbline 59
;      switch(p=flag1)
	movw R16,R20
	movw R10,R20
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	breq L22
	cpi R20,2
	ldi R30,0
	cpc R21,R30
	breq L22
	cpi R20,3
	ldi R30,0
	cpc R21,R30
	breq L22
	cpi R20,4
	ldi R30,0
	cpc R21,R30
	breq L22
	xjmp L22
X2:
	.dbline 60
; 	 {
	.dbline 62
; 	    case 1:
;            ;
	.dbline 64
; 		case 2:
; 			;
	.dbline 66
; 		case 3:
; 			;
	.dbline 68
; 		case 4:
; 			;
	.dbline 70
; 		default:
; 		 break ;
L22:
	.dbline 72
	.dbline 73
L19:
	.dbline 57
	cpi R16,0
	cpc R16,R17
	breq L28
X3:
	cp R16,R22
	cpc R17,R23
	brne L18
L28:
	.dbline -2
L17:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r flag1 20 I
	.dbsym r head 22 I
	.dbsym r p 16 I
	.dbend
	.dbfunc e judgewalk _judgewalk fV
;              p -> <dead>
;              i -> <dead>
;              f -> R20,R21
;              y -> R14,R15
;           head -> R22,R23
;           flag -> R22,R23
;              a -> y+12
;              t -> y+10
;        start_y -> R10,R11
;        start_x -> R12,R13
	.even
_judgewalk::
	xcall push_gset5
	movw R10,R18
	movw R12,R16
	.dbline -1
	.dbline 78
; 	 }
;     ;//
; 	 }
; 	
;  }
; 
; void judgewalk(int start_x,int start_y,int t,int a[50][50])                  //判断可以行动否并建立B-树
; {
	.dbline 79
; 	int i,f,head=0;
	clr R22
	clr R23
	.dbline 80
;     int flag=0; 
	.dbline 82
; 	int  *p;  
; 	int y=rand()%4; 
	xcall _rand
	ldi R18,4
	ldi R19,0
	xcall mod16s
	movw R14,R16
	.dbline 83
;   if(a[start_x][start_y]!=t)                         //没有找到灭火器或者着火点 继续找
	ldi R16,100
	ldi R17,0
	movw R18,R12
	xcall empy16s
	movw R2,R16
	ldd R0,y+12
	ldd R1,y+13
	add R2,R0
	adc R3,R1
	ldi R16,2
	ldi R17,0
	movw R18,R10
	xcall empy16s
	movw R30,R16
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	ldd R3,z+1
	ldd R0,y+10
	ldd R1,y+11
	cp R2,R0
	cpc R3,R1
	breq L30
	.dbline 84
;    {  
	.dbline 85
; 	  if(f==0)
	cpi R20,0
	cpc R20,R21
	brne L32
X4:
	.dbline 86
; 	  {
	.dbline 87
; 		  ;
	.dbline 88
L32:
	.dbline 88
; 	  };
	.dbline 90
; 	 
;       if(flag==0)    //向上
	cpi R22,0
	cpc R22,R23
	brne L34
X5:
	.dbline 92
; 	  
; 	  {    
	.dbline 93
; 		 ;
	.dbline 95
; 		 //左
; 	  }
L34:
	.dbline 96
	.dbline 97
L30:
	.dbline -2
L29:
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym l p 1 pI
	.dbsym l i 1 I
	.dbsym r f 20 I
	.dbsym r y 14 I
	.dbsym r head 22 I
	.dbsym r flag 22 I
	.dbsym l a 12 pA[100:50]I
	.dbsym l t 10 I
	.dbsym r start_y 10 I
	.dbsym r start_x 12 I
	.dbend
	.dbfunc e main _main fV
;              h -> y+5006
;        start_Y -> y+5004
;        start_X -> R12,R13
;              n -> R10,R11
;             y1 -> y+5018
;             x1 -> y+5016
;              q -> y+5014
;             sm -> R20,R21
;              l -> y+5012
;              i -> y+5010
;              a -> y+4
;              k -> R14,R15
;              j -> R22,R23
	.even
_main::
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,43  ; offset = 5020
	.dbline -1
	.dbline 104
; 	  ; 
; 	} 	//右  
; 	  
; }
; 
; 
;  
;  void main(void)
;  { 
	.dbline 108
; 	  //init();           //初始化
; 	  int i,j,k,h,l,q,sm,x1,y1,n,start_X,start_Y;
; 	  int a[50][50];
; 	  delay_1ms();
	xcall _delay_1ms
	.dbline 110
; 	 // delay(50);
; 	   for(i=0;i<50;i++)
	clr R0
	clr R1
	movw R30,R28
	subi R30,110  ; addi 5010
	sbci R31,236
	std z+1,R1
	std z+0,R0
L37:
	.dbline 111
; 		  for(j=0;j<50;j++)
	clr R22
	clr R23
L41:
	.dbline 112
	.dbline 113
	ldi R16,100
	ldi R17,0
	movw R30,R28
	subi R30,110  ; addi 5010
	sbci R31,236
	ldd R18,z+0
	ldd R19,z+1
	xcall empy16s
	movw R2,R16
	movw R24,R28
	adiw R24,4
	add R2,R24
	adc R3,R25
	ldi R16,2
	ldi R17,0
	movw R18,R22
	xcall empy16s
	movw R30,R16
	add R30,R2
	adc R31,R3
	ldi R24,1
	ldi R25,0
	std z+1,R25
	std z+0,R24
	.dbline 114
L42:
	.dbline 111
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 111
	cpi R22,50
	ldi R30,0
	cpc R23,R30
	brlt L41
L38:
	.dbline 110
	movw R30,R28
	subi R30,110  ; addi 5010
	sbci R31,236
	ldd R24,z+0
	ldd R25,z+1
	adiw R24,1
	movw R30,R28
	subi R30,110  ; addi 5010
	sbci R31,236
	std z+1,R25
	std z+0,R24
	.dbline 110
	cpi R24,50
	ldi R30,0
	cpc R25,R30
	brlt L37
	.dbline 115
; 		  {
; 		    a[i][j]=1;
; 		  }
; 	   sm=1;
	ldi R20,1
	ldi R21,0
	.dbline 117
; 	  //读MAP;
;       n=0;
	clr R10
	clr R11
	.dbline 119
; 	 
;      for(j=0;j<h+1;j++)
	clr R22
	clr R23
	xjmp L48
L45:
	.dbline 120
; 	 {      
	.dbline 121
; 		 for(k=0;k<l+1;k++)
	clr R14
	clr R15
	xjmp L52
L49:
	.dbline 122
; 	   {
	.dbline 123
; 		   switch(a[j][k])
	ldi R16,100
	ldi R17,0
	movw R18,R22
	xcall empy16s
	movw R2,R16
	movw R24,R28
	adiw R24,4
	add R2,R24
	adc R3,R25
	ldi R16,2
	ldi R17,0
	movw R18,R14
	xcall empy16s
	movw R30,R16
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	ldd R3,z+1
	movw R30,R28
	subi R30,112  ; addi 5008
	sbci R31,236
	std z+1,R3
	std z+0,R2
	movw R24,R2
	cpi R24,2
	ldi R30,0
	cpc R25,R30
	breq L56
	cpi R24,4
	ldi R30,0
	cpc R25,R30
	breq L57
	xjmp L53
X6:
	.dbline 124
; 		   {
L56:
	.dbline 126
; 		     case 2:
; 			{
	.dbline 127
; 			 start_X=j;
	movw R12,R22
	.dbline 128
; 		     start_Y=k;
	movw R30,R28
	subi R30,116  ; addi 5004
	sbci R31,236
	std z+1,R15
	std z+0,R14
	.dbline 129
; 			 break;
	xjmp L54
L57:
	.dbline 134
; 		 }
; 	    
; 		   case 4:
; 		  
; 			   n++;
	movw R24,R10
	adiw R24,1
	movw R10,R24
	.dbline 135
; 		   break;
L53:
L54:
	.dbline 137
L50:
	.dbline 121
	movw R24,R14
	adiw R24,1
	movw R14,R24
L52:
	.dbline 121
	movw R30,R28
	subi R30,108  ; addi 5012
	sbci R31,236
	ldd R24,z+0
	ldd R25,z+1
	adiw R24,1
	cp R14,R24
	cpc R15,R25
	brge X9
	xjmp L49
X9:
	.dbline 138
L46:
	.dbline 119
	subi R22,255  ; offset = 1
	sbci R23,255
L48:
	.dbline 119
	movw R30,R28
	subi R30,114  ; addi 5006
	sbci R31,236
	ldd R24,z+0
	ldd R25,z+1
	adiw R24,1
	cp R22,R24
	cpc R23,R25
	brge X10
	xjmp L45
X10:
	.dbline 138
; 		   }
; 	   }
; 	 };
	.dbline 140
; 
; 	 judgewalk(start_X, start_Y,4,a);
	movw R24,R28
	adiw R24,4
	std y+3,R25
	std y+2,R24
	ldi R24,4
	ldi R25,0
	std y+1,R25
	std y+0,R24
	movw R30,R28
	subi R30,116  ; addi 5004
	sbci R31,236
	ldd R18,z+0
	ldd R19,z+1
	movw R16,R12
	xcall _judgewalk
	xjmp L59
L58:
	.dbline 149
; 	 
; 	
;       //左手法则
;       //else
;       //右手法则
; 
; 	 
; 	 while(sm<2*n)
; 	 {
	.dbline 150
; 		 x1=q|x1;
	movw R30,R28
	subi R30,104  ; addi 5016
	sbci R31,236
	ldd R0,z+0
	ldd R1,z+1
	movw R30,R28
	subi R30,106  ; addi 5014
	sbci R31,236
	ldd R16,z+0
	ldd R17,z+1
	or R0,R16
	or R1,R17
	movw R30,R28
	subi R30,104  ; addi 5016
	sbci R31,236
	std z+1,R1
	std z+0,R0
	.dbline 151
; 		 y1=q|y1;
	movw R30,R28
	subi R30,102  ; addi 5018
	sbci R31,236
	ldd R0,z+0
	ldd R1,z+1
	movw R30,R28
	subi R30,106  ; addi 5014
	sbci R31,236
	ldd R16,z+0
	ldd R17,z+1
	or R0,R16
	or R1,R17
	movw R30,R28
	subi R30,102  ; addi 5018
	sbci R31,236
	std z+1,R1
	std z+0,R0
	.dbline 152
; 	   addstack(q);
	movw R30,R28
	subi R30,106  ; addi 5014
	sbci R31,236
	ldd R16,z+0
	ldd R17,z+1
	xcall _addstack
	.dbline 153
; 		 if(sm%2) 
	ldi R18,2
	ldi R19,0
	movw R16,R20
	xcall mod16s
	cpi R16,0
	cpc R16,R17
	breq L61
X7:
	.dbline 154
; 	   {
	.dbline 155
; 		   judgewalk(x1, y1,5,a);  
	movw R24,R28
	adiw R24,4
	std y+3,R25
	std y+2,R24
	ldi R24,5
	ldi R25,0
	std y+1,R25
	std y+0,R24
	movw R30,R28
	subi R30,102  ; addi 5018
	sbci R31,236
	ldd R18,z+0
	ldd R19,z+1
	movw R30,R28
	subi R30,104  ; addi 5016
	sbci R31,236
	ldd R16,z+0
	ldd R17,z+1
	xcall _judgewalk
	.dbline 156
; 	   }
	xjmp L62
L61:
	.dbline 158
; 		 else
; 		 {
	.dbline 159
; 		   judgewalk(x1, y1,4,a); 
	movw R24,R28
	adiw R24,4
	std y+3,R25
	std y+2,R24
	ldi R24,4
	ldi R25,0
	std y+1,R25
	std y+0,R24
	movw R30,R28
	subi R30,102  ; addi 5018
	sbci R31,236
	ldd R18,z+0
	ldd R19,z+1
	movw R30,R28
	subi R30,104  ; addi 5016
	sbci R31,236
	ldd R16,z+0
	ldd R17,z+1
	xcall _judgewalk
	.dbline 160
L62:
	.dbline 160
	.dbline 161
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 162
L59:
	.dbline 148
	ldi R16,2
	ldi R17,0
	movw R18,R10
	xcall empy16s
	cp R20,R16
	cpc R21,R17
	brge X11
	xjmp L58
X11:
	.dbline 162
	.dbline 163
	ldi R16,2
	ldi R17,0
	movw R18,R10
	xcall empy16s
	movw R20,R16
	cpi R20,0
	cpc R20,R21
	breq L63
X8:
	.dbline 164
	movw R30,R28
	subi R30,106  ; addi 5014
	sbci R31,236
	ldd R16,z+0
	ldd R17,z+1
	xcall _addstack
L63:
	.dbline -2
L36:
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,43  ; offset = 5020
	.dbline 0 ; func end
	ret
	.dbsym l h 5006 I
	.dbsym l start_Y 5004 I
	.dbsym r start_X 12 I
	.dbsym r n 10 I
	.dbsym l y1 5018 I
	.dbsym l x1 5016 I
	.dbsym l q 5014 I
	.dbsym r sm 20 I
	.dbsym l l 5012 I
	.dbsym l i 5010 I
	.dbsym l a 4 A[5000:50:50]I
	.dbsym r k 14 I
	.dbsym r j 22 I
	.dbend

⌨️ 快捷键说明

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