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

📄 project.s

📁 AVRkaifashili.rar
💻 S
📖 第 1 页 / 共 5 页
字号:
;  while(Ack_Flag==1);
	lds R24,_Ack_Flag
	cpi R24,1
	breq L85
	.dbline 262
;  Stop();                               //停止
	rcall _Stop
	.dbline -2
	.dbline 263
; }
L78:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r Data 20 c
	.dbsym r Address 22 c
	.dbsym r Slave 10 c
	.dbend
	.dbfunc e Write_2byte _Write_2byte fV
;          Data1 -> R20
;          Data0 -> R22
;        Address -> R10
;          Slave -> R12
	.even
_Write_2byte::
	rcall push_gset4
	mov R10,R18
	mov R12,R16
	ldd R22,y+8
	ldd R20,y+10
	.dbline -1
	.dbline 268
; 
; //***************************写两字节数据****************************//
; //向从地址为Slave的IIC器件的Address地址开始写两字节数据Data0,Data1
; void Write_2byte(uchar Slave,uchar Address,uchar Data0,uchar Data1)
; {Start();		                       //开始
	.dbline 268
	rcall _Start
	.dbline 269
;  Write_Byte(Slave);		               //写I2C器件地址
	mov R16,R12
	rcall _Write_Byte
L89:
	.dbline 270
;  do Check_Ack();		               //检查应答位
	rcall _Check_Ack
L90:
	.dbline 271
;  while(Ack_Flag==1);                  
	lds R24,_Ack_Flag
	cpi R24,1
	breq L89
	.dbline 272
;  Write_Byte(Address);                  //送寄存器地址
	mov R16,R10
	rcall _Write_Byte
L92:
	.dbline 273
;  do Check_Ack();		               //检查应答位
	rcall _Check_Ack
L93:
	.dbline 274
;  while(Ack_Flag==1);
	lds R24,_Ack_Flag
	cpi R24,1
	breq L92
	.dbline 275
;  Write_Byte(Data0);
	mov R16,R22
	rcall _Write_Byte
L95:
	.dbline 276
;  do Check_Ack();	     	           //检查应答位
	rcall _Check_Ack
L96:
	.dbline 277
;  while(Ack_Flag==1);
	lds R24,_Ack_Flag
	cpi R24,1
	breq L95
	.dbline 278
;  Write_Byte(Data1);
	mov R16,R20
	rcall _Write_Byte
L98:
	.dbline 279
;  do Check_Ack();		               //检查应答位
	rcall _Check_Ack
L99:
	.dbline 280
;  while(Ack_Flag==1);
	lds R24,_Ack_Flag
	cpi R24,1
	breq L98
	.dbline 281
;  Stop();		                       //停止信号
	rcall _Stop
	.dbline -2
	.dbline 282
; }
L88:
	rcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r Data1 20 c
	.dbsym r Data0 22 c
	.dbsym r Address 10 c
	.dbsym r Slave 12 c
	.dbend
	.dbfunc e Read_1byte _Read_1byte fc
;              x -> <dead>
;          data0 -> R22
;        Address -> R10
;          Slave -> R20
	.even
_Read_1byte::
	rcall push_gset3
	mov R10,R18
	mov R20,R16
	.dbline -1
	.dbline 287
; 
; //***************************读一字节数据****************************//
; //从从地址为Slave的IIC器件的Address地址处读一字节数据
; uchar Read_1byte(uchar Slave,uchar Address)
; {uchar data0,x;
L102:
	.dbline 288
;  do{
	.dbline 289
;     Start();		                   //开始信号
	rcall _Start
	.dbline 290
;     Write_Byte(Slave);		           //写I2C器件地址
	mov R16,R20
	rcall _Write_Byte
	.dbline 291
;     Check_Ack();		               //检查应答位
	rcall _Check_Ack
	.dbline 292
L103:
	.dbline 292
;    }while(Ack_Flag);              
	lds R2,_Ack_Flag
	tst R2
	brne L102
L105:
	.dbline 293
;  do{
	.dbline 294
;     Write_Byte(Address);		       //写寄存器地址
	mov R16,R10
	rcall _Write_Byte
	.dbline 295
;     Check_Ack();		               //检查应答位
	rcall _Check_Ack
	.dbline 296
L106:
	.dbline 296
;    }while(Ack_Flag);                   
	lds R2,_Ack_Flag
	tst R2
	brne L105
L108:
	.dbline 297
;  do{
	.dbline 298
;     Start();		                   //开始
	rcall _Start
	.dbline 299
;     Write_Byte(Slave+1);		       //写I2C器件地址(+1表示为读操作)
	mov R16,R20
	subi R16,255    ; addi 1
	rcall _Write_Byte
	.dbline 300
;     Check_Ack();		               //检查应答位
	rcall _Check_Ack
	.dbline 301
L109:
	.dbline 301
;    }while(Ack_Flag);
	lds R2,_Ack_Flag
	tst R2
	brne L108
	.dbline 302
;  data0=Read_Byte();		               //读1字节
	rcall _Read_Byte
	mov R22,R16
	.dbline 303
;  Nack();		                       //读完发送一个Not Ack应答
	rcall _Nack
	.dbline 304
;  Stop();		                       //停止
	rcall _Stop
	.dbline 305
;  return data0;	                       //返回读取数据
	mov R16,R22
	.dbline -2
L101:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym l x 1 c
	.dbsym r data0 22 c
	.dbsym r Address 10 c
	.dbsym r Slave 20 c
	.dbend
	.dbfunc e Led_Display _Led_Display fV
;             d1 -> R20
;             d0 -> R22
;         Number -> R20
	.even
_Led_Display::
	rcall push_gset2
	mov R20,R16
	sbiw R28,3
	.dbline -1
	.dbline 310
; }
; 
; //***************************数字显示程序****************************//
; void Led_Display(uchar Number)
; {uchar d0,d1;
	.dbline 311
;  d0=Number/10;		                   //取站数的个位
	ldi R17,10
	mov R16,R20
	rcall div8u
	mov R22,R16
	.dbline 312
;  d1=Number%10;		                   //取站数的十位
	ldi R17,10
	mov R16,R20
	rcall mod8u
	mov R20,R16
	.dbline 313
;  Write_2byte(0x70,0x20,d1,d0);	       //从显示位0开始连续显示两位
	std y+2,R22
	std y+0,R20
	ldi R18,32
	ldi R16,112
	rcall _Write_2byte
	.dbline -2
	.dbline 314
; }
L111:
	adiw R28,3
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r d1 20 c
	.dbsym r d0 22 c
	.dbsym r Number 20 c
	.dbend
	.dbfunc e change _change fV
	.area func_lit(rom, con, rel)
L326:
	.word `L118
	.word `L131
	.word `L144
	.word `L157
	.word `L170
	.word `L183
	.word `L196
	.word `L209
	.word `L222
	.word `L235
	.word `L248
	.word `L261
	.word `L274
	.word `L287
	.word `L300
	.word `L313
	.area text(rom, con, rel)
	.dbfile H:\Project\Project\project.c
	.area func_lit(rom, con, rel)
L538:
	.word `L330
	.word `L343
	.word `L356
	.word `L369
	.word `L382
	.word `L395
	.word `L408
	.word `L421
	.word `L434
	.word `L447
	.word `L460
	.word `L473
	.word `L486
	.word `L499
	.word `L512
	.word `L525
	.area text(rom, con, rel)
	.dbfile H:\Project\Project\project.c
;              m -> R20
	.even
_change::
	rcall push_gset2
	.dbline -1
	.dbline 318
; 
; //***************************换下一个字显示**************************//
; void change()
; {unsigned char m;
	.dbline 319
;  if(!Pre_Flag)				           //报站情形
	lds R2,_Pre_Flag
	tst R2
	breq X3
	rjmp L113
X3:
	.dbline 320
;    {switch(State)			           //判断站名
	.dbline 320
	lds R20,_State
	clr R21
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	brge X4
	rjmp L114
X4:
	ldi R24,16
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brge X5
	rjmp L114
X5:
	ldi R24,<L326
	ldi R25,>L326
	mov R16,R20
	mov R17,R21
	subi R16,1
	sbci R17,0
	lsl R16
	rol R17
	add R16,R24
	adc R17,R25
	rcall lpm16
	mov R30,R16
	mov R31,R17
	ijmp
X1:
	.dbline 321
;       {case 1:				           //若为第1站
L118:
	.dbline 322
;          if(Word_Number<5)	           //判断已显示字数
	lds R24,_Word_Number
	cpi R24,5
	brlo X6
	rjmp L119
X6:
	.dbline 323
;            {if(Word_Number<3)	       //若未显示完“第1站”,则
	.dbline 323
	cpi R24,3
	brsh L121
	.dbline 324
;               {for(m=0;m<32;m++)       //依次换字显示“第1站”
	.dbline 324
	clr R20
	rjmp L126
L123:
	.dbline 325
	ldi R18,5
	ldi R19,0
	lds R16,_Word_Number
	clr R17
	rcall lsl16
	mov R2,R16
	mov R3,R17
	ldi R24,<_State1
	ldi R25,>_State1
	add R2,R24
	adc R3,R25
	mov R4,R20
	clr R5
	add R4,R2
	adc R5,R3
	mov R30,R4
	mov R31,R5
	lpm
	ldi R24,<_next
	ldi R25,>_next
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R0
L124:
	.dbline 324
	inc R20
L126:
	.dbline 324
	cpi R20,32
	brlo L123
	.dbline 325
;                    next[m]=State1[Word_Number][m];}	
	rjmp L122
L121:
	.dbline 327
;             else				
;                for(m=0;m<32;m++)       //依次换字显示“到了”
	clr R20
	rjmp L130
L127:
	.dbline 328
	ldi R18,5
	ldi R19,0
	lds R16,_Word_Number
	clr R17
	subi R16,3
	sbci R17,0
	rcall lsl16
	mov R2,R16
	mov R3,R17
	ldi R24,<_DL
	ldi R25,>_DL
	add R2,R24
	adc R3,R25
	mov R4,R20
	clr R5
	add R4,R2
	adc R5,R3
	mov R30,R4
	mov R31,R5
	lpm
	ldi R24,<_next
	ldi R25,>_next
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R0
L128:
	.dbline 327
	inc R20
L130:
	.dbline 327
	cpi R20,32
	brlo L127
L122:
	.dbline 329
;                    next[m]=DL[Word_Number-3][m];	
;             Word_Number++;}		       //显示字数+1
	lds R24,_Word_Number
	subi R24,255    ; addi 1
	sts _Word_Number,R24
	.dbline 329
	rjmp L114
L119:
	.dbline 331
;          else					       //若全部显示完,则
;             Word_Number=0;		       //显示字数清0
	clr R2
	sts _Word_Number,R2
	.dbline 332
;          break;
	rjmp L114
L131:
	.dbline 334
;        case 2:				           //若为第2站
;          if(Word_Number<5)	           //判断已显示字数
	lds R24,_Word_Number
	cpi R24,5
	brlo X7
	rjmp L132
X7:
	.dbline 335
;            {if(Word_Number<3)	       //若未显示完“第2站”,则
	.dbline 335
	cpi R24,3
	brsh L134
	.dbline 336
;               {for(m=0;m<32;m++)       //依次换字显示“第2站”
	.dbline 336
	clr R20
	rjmp L139
L136:
	.dbline 337
	ldi R18,5
	ldi R19,0
	lds R16,_Word_Number
	clr R17
	rcall lsl16
	mov R2,R16
	mov R3,R17
	ldi R24,<_State2
	ldi R25,>_State2
	add R2,R24
	adc R3,R25
	mov R4,R20
	clr R5
	add R4,R2
	adc R5,R3
	mov R30,R4
	mov R31,R5
	lpm
	ldi R24,<_next
	ldi R25,>_next
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R0
L137:
	.dbline 336
	inc R20
L139:
	.dbline 336
	cpi R20,32
	brlo L136
	.dbline 337
;                next[m]=State2[Word_Number][m];}	
	rjmp L135
L134:
	.dbline 339
;             else				//否则
;               for(m=0;m<32;m++)
	clr R20
	rjmp L143
L140:
	.dbline 340
	ldi R18,5
	ldi R19,0
	lds R16,_Word_Number
	clr R17
	subi R16,3
	sbci R17,0
	rcall lsl16
	mov R2,R16
	mov R3,R17
	ldi R24,<_DL
	ldi R25,>_DL
	add R2,R24
	adc R3,R25
	mov R4,R20
	clr R5
	add R4,R2
	adc R5,R3
	mov R30,R4
	mov R31,R5
	lpm
	ldi R24,<_next
	ldi R25,>_next
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R0
L141:
	.dbline 339
	inc R20
L143:
	.dbline 339
	cpi R20,32
	brlo L140
L135:
	.dbline 341
;                  next[m]=DL[Word_Number-3][m];		//依次换字显示“到了”
;             Word_Number++;}		//显示字数+1
	lds R24,_Word_Number
	subi R24,255    ; addi 1
	sts _Word_Number,R24
	.dbline 341
	rjmp L114
L132:
	.dbline 343
;          else					//若全部显示完,则
;            Word_Number=0;		//显示字数清0
	clr R2
	sts _Word_Number,R2
	.dbline 344
;          break;
	rjmp L114
L144:
	.dbline 346
;        case 3:				//若为第3站
;          if(Word_Number<5)	//判断已显示字数
	lds R24,_Word_Number
	cpi R24,5
	brlo X8
	rjmp L145
X8:
	.dbline 347
;            {if(Word_Number<3)	//若未显示完“第3站”,则
	.dbline 347
	cpi R24,3
	brsh L147
	.dbline 348
;               {for(m=0;m<32;m++)
	.dbline 348
	clr R20
	rjmp L152
L149:
	.dbline 349
	ldi R18,5
	ldi R19,0
	lds R16,_Word_Number
	clr R17
	rcall lsl16
	mov R2,R16
	mov R3,R17
	ldi R24,<_State1
	ldi R25,>_State1
	add R2,R24
	adc R3,R25
	mov R4,R20
	clr R5
	add R4,R2
	adc R5,R3
	mov R30,R4
	mov R31,R5
	lpm
	ldi R24,<_next
	ldi R25,>_next
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R0
L150:
	.dbline 348
	inc R20
L152:
	.dbline 348
	cpi R20,32
	brlo L149
	.dbline 349
;                    next[m]=State1[Word_Number][m];}	//依次换字显示“第3站”
	rjmp L148
L147:
	.dbline 351
;             else 
; 			   for(m=0;m<32;m++)
	clr R20
	rjmp L156
L153:
	.dbline 352
	ldi R18,5
	ldi R19,0
	lds R16,_Word_Number
	clr R17
	subi R16,3
	sbci R17,0
	rcall lsl16
	mov R2,R16
	mov R3,R17
	ldi R24,<_DL
	ldi R25,>_DL
	add R2,R24
	adc R3,R25
	mov R4,R20
	clr R5
	add R4,R2
	adc R5,R3
	mov R30,R4
	mov R31,R5
	lpm
	ldi R24,<_next
	ldi R25,>_next
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R0
L154:
	.dbline 351
	inc R20
L156:
	.dbline 351
	cpi R20,32
	brlo L153
L148:
	.dbline 353
;                    next[m]=DL[Word_Number-3][m];		//依次换字显示“到了”
;             Word_Number++;}		//显示字数+1
	lds R24,_Word_Number
	subi R24,255    ; addi 1
	sts _Word_Number,R24
	.dbline 353
	rjmp L114
L145:
	.dbline 355
;          else					//若全部显示完,则
;             Word_Number=0;		//显示字数清0
	clr R2
	sts _Word_Number,R2
	.dbline 356
;          break;
	rjmp L114
L157:
	.dbline 358
;        case 4:				//若为第4站
;          if(Word_Number<5)	//判断已显示字数
	lds R24,_Word_Number
	cpi R24,5
	brlo X9
	rjmp L158
X9:
	.dbline 359
;            {if(Word_Number<3)	//若未显示完“第4站”,则
	.dbline 359
	cpi R24,3
	brsh L160
	.dbline 360
;               {for(m=0;m<32;m++)
	.dbline 360
	clr R20
	rjmp L165
L162:
	.dbline 361
	ldi R18,5
	ldi R19,0
	lds R16,_Word_Number
	clr R17
	rcall lsl16
	mov R2,R16
	mov R3,R17
	ldi R24,<_State2
	ldi R25,>_State2
	add R2,R24
	adc R3,R25
	mov R4,R20
	clr R5
	add R4,R2
	adc R5,R3
	mov R30,R4
	mov R31,R5
	lpm
	ldi R24,<_next
	ldi R25,>_next
	mov R30,R20

⌨️ 快捷键说明

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