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

📄 main.lst

📁 AT24C256 读写 atmega16单片机( ICC )
💻 LST
📖 第 1 页 / 共 3 页
字号:
    0274 939A      ST	R25,-Y
    0275 938A      ST	R24,-Y
    0276 940E039E  CALL	asgncblk
(0219)   *p=card,card_read[20],*pp=card_read;
    0278 01BE      MOVW	R22,R28
    0279 5E67      SUBI	R22,0xE7
    027A 4F7F      SBCI	R23,0xFF
    027B 01AE      MOVW	R20,R28
    027C 5F4B      SUBI	R20,0xFB
    027D 4F5F      SBCI	R21,0xFF
(0220)   //*p = card;
(0221)  // pp =  card_read;
(0222)   usart_init();
    027E 940E0324  CALL	_usart_init
(0223)   //写入数据,器件型号model,器件地址DevAddr,开始地址addr,数据*P_data,数据长度num
(0224)  AT24CxxWrite(0x0100,0,20,p,12);
    0280 E08C      LDI	R24,0xC
    0281 838C      STD	Y+4,R24
    0282 837B      STD	Y+3,R23
    0283 836A      STD	Y+2,R22
    0284 E184      LDI	R24,0x14
    0285 E090      LDI	R25,0
    0286 8399      STD	Y+1,R25
    0287 8388      STD	Y+0,R24
    0288 2722      CLR	R18
    0289 E000      LDI	R16,0
    028A E011      LDI	R17,1
    028B DE59      RCALL	_AT24CxxWrite
(0225)    Delay(e2ptime);
    028C E104      LDI	R16,0x14
    028D DFD7      RCALL	_Delay
(0226)  AT24CxxRead(0x0100,0,20,pp,12); 
    028E E08C      LDI	R24,0xC
    028F 838C      STD	Y+4,R24
    0290 835B      STD	Y+3,R21
    0291 834A      STD	Y+2,R20
    0292 E184      LDI	R24,0x14
    0293 E090      LDI	R25,0
    0294 8399      STD	Y+1,R25
    0295 8388      STD	Y+0,R24
    0296 2722      CLR	R18
    0297 E000      LDI	R16,0
    0298 E011      LDI	R17,1
    0299 DF6C      RCALL	_AT24CxxRead
(0227)  for(i=0;i<12;i++)
    029A 2744      CLR	R20
    029B C009      RJMP	0x02A5
(0228)  {
(0229)   UDR = card_read[i];
    029C 01CE      MOVW	R24,R28
    029D 9605      ADIW	R24,5
    029E 2FE4      MOV	R30,R20
    029F 27FF      CLR	R31
    02A0 0FE8      ADD	R30,R24
    02A1 1FF9      ADC	R31,R25
    02A2 8020      LDD	R2,Z+0
    02A3 B82C      OUT	0x0C,R2
    02A4 9543      INC	R20
    02A5 304C      CPI	R20,0xC
    02A6 F3A8      BCS	0x029C
(0230)  }
(0231)  
(0232) }
    02A7 96AD      ADIW	R28,0x2D
    02A8 9508      RET
_put:
  d                    --> Y+0
  i                    --> R20
    02A9 940E0364  CALL	push_gset1
    02AB 01A8      MOVW	R20,R16
    02AC 9728      SBIW	R28,0x8
FILE: E:\atmega16子函数\AT24C256\usart.c
(0001) #include <iom16v.h>
(0002) #include<macros.h>
(0003) 
(0004) void put(unsigned int i)
(0005) {
(0006)  char d[8]={0};
    02AD E688      LDI	R24,0x68
    02AE E090      LDI	R25,0
    02AF 01FE      MOVW	R30,R28
    02B0 E008      LDI	R16,0x8
    02B1 E010      LDI	R17,0
    02B2 93FA      ST	R31,-Y
    02B3 93EA      ST	R30,-Y
    02B4 939A      ST	R25,-Y
    02B5 938A      ST	R24,-Y
    02B6 940E039E  CALL	asgncblk
(0007)  Int_to_Char(i,d);
    02B8 019E      MOVW	R18,R28
    02B9 018A      MOVW	R16,R20
    02BA D006      RCALL	_Int_to_Char
(0008)  puts(d);
    02BB 018E      MOVW	R16,R28
    02BC D043      RCALL	_puts
(0009)  }
    02BD 9628      ADIW	R28,0x8
    02BE 940E0367  CALL	pop_gset1
    02C0 9508      RET
_Int_to_Char:
  p                    --> R20
  i                    --> R22
    02C1 940E037B  CALL	push_gset2
    02C3 01A9      MOVW	R20,R18
    02C4 01B8      MOVW	R22,R16
(0010)  void Int_to_Char(unsigned int i,char *p)
(0011)  {p[0]=i/1000+48;
    02C5 EE28      LDI	R18,0xE8
    02C6 E033      LDI	R19,3
    02C7 018B      MOVW	R16,R22
    02C8 940E0334  CALL	div16u
    02CA 01C8      MOVW	R24,R16
    02CB 96C0      ADIW	R24,0x30
    02CC 01FA      MOVW	R30,R20
    02CD 8380      STD	Z+0,R24
(0012)   p[1]=(i/100)%10+48;
    02CE E624      LDI	R18,0x64
    02CF E030      LDI	R19,0
    02D0 018B      MOVW	R16,R22
    02D1 940E0334  CALL	div16u
    02D3 E02A      LDI	R18,0xA
    02D4 E030      LDI	R19,0
    02D5 940E0332  CALL	mod16u
    02D7 01C8      MOVW	R24,R16
    02D8 96C0      ADIW	R24,0x30
    02D9 01FA      MOVW	R30,R20
    02DA 8381      STD	Z+1,R24
(0013)   p[2]=(i%100)/10+48;
    02DB E624      LDI	R18,0x64
    02DC E030      LDI	R19,0
    02DD 018B      MOVW	R16,R22
    02DE 940E0332  CALL	mod16u
    02E0 E02A      LDI	R18,0xA
    02E1 E030      LDI	R19,0
    02E2 940E0334  CALL	div16u
    02E4 01C8      MOVW	R24,R16
    02E5 96C0      ADIW	R24,0x30
    02E6 01FA      MOVW	R30,R20
    02E7 8382      STD	Z+2,R24
(0014)   p[3]=(i%100)%10+48;
    02E8 E624      LDI	R18,0x64
    02E9 E030      LDI	R19,0
    02EA 018B      MOVW	R16,R22
    02EB 940E0332  CALL	mod16u
    02ED E02A      LDI	R18,0xA
    02EE E030      LDI	R19,0
    02EF 940E0332  CALL	mod16u
    02F1 01C8      MOVW	R24,R16
    02F2 96C0      ADIW	R24,0x30
    02F3 01FA      MOVW	R30,R20
    02F4 8383      STD	Z+3,R24
(0015)  }
    02F5 940E035E  CALL	pop_gset2
    02F7 9508      RET
(0016) /*          字符输出函数         */
(0017) void putchar(char c)
(0018)     {    
(0019)      while (!(UCSRA&(1<<UDRE)));
_putchar:
  c                    --> R16
    02F8 9B5D      SBIS	0x0B,5
    02F9 CFFE      RJMP	_putchar
(0020)      UDR=c;    
    02FA B90C      OUT	0x0C,R16
(0021)     }
    02FB 9508      RET
(0022) /*          字符输入函数         */	
(0023) unsigned char getchar(void)
(0024)     {
(0025)      while(!(UCSRA& (1<<RXC)));
_getchar:
    02FC 9B5F      SBIS	0x0B,7
    02FD CFFE      RJMP	_getchar
(0026)      
(0027) 	 return UDR;
    02FE B10C      IN	R16,0x0C
    02FF 9508      RET
_puts:
  s                    --> R20
    0300 940E0364  CALL	push_gset1
    0302 01A8      MOVW	R20,R16
(0028)     }   	
(0029) /*          字符串输出函数       */ 
(0030) void puts(char * s)
(0031)     {
    0303 C005      RJMP	0x0309
(0032)     while (*s)
(0033)         {
(0034)         putchar(*s);
    0304 01FA      MOVW	R30,R20
    0305 8100      LDD	R16,Z+0
    0306 DFF1      RCALL	_putchar
(0035)         s++;
    0307 5F4F      SUBI	R20,0xFF
    0308 4F5F      SBCI	R21,0xFF
    0309 01FA      MOVW	R30,R20
    030A 8020      LDD	R2,Z+0
    030B 2022      TST	R2
    030C F7B9      BNE	0x0304
(0036)         }	
(0037)     putchar(0x0a);//回车换行
    030D E00A      LDI	R16,0xA
    030E DFE9      RCALL	_putchar
(0038)     putchar(0x0d);
    030F E00D      LDI	R16,0xD
    0310 DFE7      RCALL	_putchar
(0039)     
(0040)     }
    0311 940E0367  CALL	pop_gset1
    0313 9508      RET
_putstr:
  s                    --> R20
    0314 940E0364  CALL	push_gset1
    0316 01A8      MOVW	R20,R16
(0041) /*         不含回车换行的字符串输出函数      */ 
(0042) void putstr(char * s)
(0043)     {
    0317 C005      RJMP	0x031D
(0044)     while (*s)
(0045)         {
(0046)         putchar(*s);
    0318 01FA      MOVW	R30,R20
    0319 8100      LDD	R16,Z+0
    031A DFDD      RCALL	_putchar
(0047)         s++;
    031B 5F4F      SUBI	R20,0xFF
    031C 4F5F      SBCI	R21,0xFF
    031D 01FA      MOVW	R30,R20
    031E 8020      LDD	R2,Z+0
    031F 2022      TST	R2
    0320 F7B9      BNE	0x0318
(0048)         }	
(0049)     }   
    0321 940E0367  CALL	pop_gset1
    0323 9508      RET
(0050) /*          UART初始化          	*/	
(0051) void usart_init(void)
(0052) {
(0053)  
(0054)  UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);;//允许发送和接收
_usart_init:
    0324 E988      LDI	R24,0x98
    0325 B98A      OUT	0x0A,R24
(0055)  UBRRL=47;  // 4M 25        8M 51    7.3728M 47
    0326 E28F      LDI	R24,0x2F
    0327 B989      OUT	0x09,R24
(0056)  UBRRH=0;  //       9600;   
    0328 2422      CLR	R2
    0329 BC20      OUT	0x20,R2
(0057)  UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
    032A E886      LDI	R24,0x86
    032B BD80      OUT	0x20,R24
(0058) }
FILE: <library>
    032C 9508      RET
push_arg4:
    032D 933A      ST	R19,-Y
    032E 932A      ST	R18,-Y
push_arg2:
    032F 931A      ST	R17,-Y
    0330 930A      ST	R16,-Y
    0331 9508      RET
mod16u:
    0332 9468      BSET	6
    0333 C001      RJMP	xdiv16u
div16u:
    0334 94E8      BCLR	6
xdiv16u:
    0335 92EA      ST	R14,-Y
    0336 92FA      ST	R15,-Y
    0337 938A      ST	R24,-Y
    0338 24EE      CLR	R14
    0339 24FF      CLR	R15
    033A E180      LDI	R24,0x10
    033B 0F00      LSL	R16
    033C 1F11      ROL	R17
    033D 1CEE      ROL	R14
    033E 1CFF      ROL	R15
    033F 16E2      CP	R14,R18
    0340 06F3      CPC	R15,R19
    0341 F018      BCS	0x0345
    0342 1AE2      SUB	R14,R18
    0343 0AF3      SBC	R15,R19
    0344 9503      INC	R16
    0345 958A      DEC	R24
    0346 F7A1      BNE	0x033B
    0347 F416      BRTC	0x034A
    0348 2D0E      MOV	R16,R14
    0349 2D1F      MOV	R17,R15
    034A 9189      LD	R24,Y+
    034B 90F9      LD	R15,Y+
    034C 90E9      LD	R14,Y+
    034D 9508      RET
empy16s:
    034E 920A      ST	R0,-Y
    034F 921A      ST	R1,-Y
    0350 938A      ST	R24,-Y
    0351 939A      ST	R25,-Y
    0352 9F02      MUL	R16,R18
    0353 01C0      MOVW	R24,R0
    0354 9F12      MUL	R17,R18
    0355 0D90      ADD	R25,R0
    0356 9F03      MUL	R16,R19
    0357 0D90      ADD	R25,R0
    0358 018C      MOVW	R16,R24
    0359 9199      LD	R25,Y+
    035A 9189      LD	R24,Y+
    035B 9019      LD	R1,Y+
    035C 9009      LD	R0,Y+
    035D 9508      RET
pop_gset2:
    035E E0E2      LDI	R30,2
    035F 940C0368  JMP	pop
pop_gset5:
    0361 27EE      CLR	R30
    0362 940C0368  JMP	pop
push_gset1:
    0364 935A      ST	R21,-Y
    0365 934A      ST	R20,-Y
    0366 9508      RET
pop_gset1:
    0367 E0E1      LDI	R30,1
pop:
    0368 9149      LD	R20,Y+
    0369 9159      LD	R21,Y+
    036A FDE0      SBRC	R30,0
    036B 9508      RET
    036C 9169      LD	R22,Y+
    036D 9179      LD	R23,Y+
    036E FDE1      SBRC	R30,1
    036F 9508      RET
    0370 90A9      LD	R10,Y+
    0371 90B9      LD	R11,Y+
    0372 FDE2      SBRC	R30,2
    0373 9508      RET
    0374 90C9      LD	R12,Y+
    0375 90D9      LD	R13,Y+
    0376 FDE3      SBRC	R30,3
    0377 9508      RET
    0378 90E9      LD	R14,Y+
    0379 90F9      LD	R15,Y+
    037A 9508      RET
push_gset2:
    037B 937A      ST	R23,-Y
    037C 936A      ST	R22,-Y
    037D 940C0364  JMP	push_gset1
push_gset3:
    037F 92BA      ST	R11,-Y
    0380 92AA      ST	R10,-Y
    0381 940C037B  JMP	push_gset2
push_gset4:
    0383 92DA      ST	R13,-Y
    0384 92CA      ST	R12,-Y
    0385 940C037F  JMP	push_gset3
push_gset5:
    0387 92FA      ST	R15,-Y
    0388 92EA      ST	R14,-Y
    0389 940C0383  JMP	push_gset4
lsl32:
    038B 920F      PUSH	R0
    038C 9009      LD	R0,Y+
    038D 2000      TST	R0
    038E F031      BEQ	0x0395
    038F 0F00      LSL	R16
    0390 1F11      ROL	R17
    0391 1F22      ROL	R18
    0392 1F33      ROL	R19
    0393 940A      DEC	R0
    0394 CFF8      RJMP	0x038D
    0395 900F      POP	R0
    0396 9508      RET
lsr16:
    0397 2322      TST	R18
    0398 F021      BEQ	0x039D
    0399 9516      LSR	R17
    039A 9507      ROR	R16
    039B 952A      DEC	R18
    039C CFFA      RJMP	lsr16
    039D 9508      RET
asgncblk:
    039E 93AA      ST	R26,-Y
    039F 93BA      ST	R27,-Y
    03A0 93EA      ST	R30,-Y
    03A1 93FA      ST	R31,-Y
    03A2 920A      ST	R0,-Y
    03A3 81AF      LDD	R26,Y+7
    03A4 85B8      LDD	R27,Y+8
    03A5 81ED      LDD	R30,Y+5
    03A6 81FE      LDD	R31,Y+6
    03A7 3000      CPI	R16,0
    03A8 0701      CPC	R16,R17
    03A9 F031      BEQ	0x03B0
    03AA 95C8      LPM
    03AB 920D      ST	R0,X+
    03AC 9631      ADIW	R30,1
    03AD 5001      SUBI	R16,1
    03AE 4010      SBCI	R17,0
    03AF CFF7      RJMP	0x03A7
    03B0 9009      LD	R0,Y+
    03B1 91F9      LD	R31,Y+
    03B2 91E9      LD	R30,Y+
    03B3 91B9      LD	R27,Y+
    03B4 91A9      LD	R26,Y+
    03B5 9624      ADIW	R28,4
    03B6 9508      RET

⌨️ 快捷键说明

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