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

📄 mp3_7210.lst

📁 你熟悉QT吗?Linux系统上领先的GUI
💻 LST
📖 第 1 页 / 共 5 页
字号:
    04DF 2300      TST	R16
    04E0 F3E1      BEQ	0x04DD
(0095) 			 // led1_on;
(0096) 	 	  	  }
    04E1 C004      RJMP	0x04E6
(0097) 	 	  else                            //是其他命令
(0098) 	 	  	  {
(0099) 		  	  while (SPI_tx_rx(0xff)==0);  
    04E2 EF0F      LDI	R16,0xFF
    04E3 DFCE      RCALL	_SPI_tx_rx
    04E4 2300      TST	R16
    04E5 F3E1      BEQ	0x04E2
(0100) 			//  led1_on;
(0101) 	 	  	  }
(0102) 	 return temp;		  	 	  
    04E6 2F04      MOV	R16,R20
    04E7 940E05F5  CALL	pop_gset2
    04E9 9508      RET
(0103) 	 }	
(0104) /***********MMC_finish();***停止卡片******/
(0105) void MMC_finish(void)
(0106)      {
(0107) 	  disable_mmc_cs;
_MMC_finish:
    04EA 9AC0      SBI	0x18,0
(0108) 	  SPI_tx_rx(0xff);
    04EB EF0F      LDI	R16,0xFF
(0109) 	 }
    04EC CFC5      RJMP	_SPI_tx_rx
_MMC_flush:
  counter              --> R20
  flush_num            --> R22
    04ED 940E0615  CALL	push_gset2
    04EF 2F60      MOV	R22,R16
(0110) 
(0111) /***********MMC_flush();*****丢弃几个字节*******/
(0112) void MMC_flush(unsigned char flush_num);
(0113) void MMC_flush(unsigned char flush_num)
(0114)      {
(0115) 	 unsigned char counter;
(0116) 	 for (counter=0;counter<flush_num;counter++) SPI_tx_rx(0xff); //丢弃几个字节
    04F0 2744      CLR	R20
    04F1 C003      RJMP	0x04F5
    04F2 EF0F      LDI	R16,0xFF
    04F3 DFBE      RCALL	_SPI_tx_rx
    04F4 9543      INC	R20
    04F5 1746      CP	R20,R22
    04F6 F3D8      BCS	0x04F2
(0117) 	 MMC_finish();	  
    04F7 DFF2      RCALL	_MMC_finish
(0118) 	 }
    04F8 940E05F5  CALL	pop_gset2
    04FA 9508      RET
_MMC_reset:
  lcd_add              --> Y+6
  mmc_response         --> R20
  counter              --> R22
    04FB 940E0615  CALL	push_gset2
    04FD 9725      SBIW	R28,5
(0119) 			 			 	
(0120) /***********MMC_reset();***将MMC卡转到SPI模式****/
(0121) void MMC_reset(void)
(0122)      {
(0123) 	  unsigned char counter,mmc_response,lcd_add;
(0124) 	  for (counter=0;counter<11;counter++) SPI_tx_rx(0xff);//80个时钟开始总线
    04FE 2766      CLR	R22
    04FF C003      RJMP	0x0503
    0500 EF0F      LDI	R16,0xFF
    0501 DFB0      RCALL	_SPI_tx_rx
    0502 9563      INC	R22
    0503 306B      CPI	R22,0xB
    0504 F3D8      BCS	0x0500
(0125) 
(0126) 	  mmc_response=MMC_sendCmd(MMC_GO_IDLE_STATE,0,0,0,0);   //send cmd0
    0505 2422      CLR	R2
    0506 822C      STD	Y+4,R2
    0507 822A      STD	Y+2,R2
    0508 8228      STD	Y+0,R2
    0509 2722      CLR	R18
    050A 2700      CLR	R16
    050B DFAB      RCALL	_MMC_sendCmd
    050C 2F40      MOV	R20,R16
(0127) 	  MMC_finish();
    050D DFDC      RCALL	_MMC_finish
(0128) 	  
(0129) 	  for (counter=0;counter<80;counter++)   //失败尝试次数
    050E 2766      CLR	R22
    050F C010      RJMP	0x0520
(0130) 	  	  {
(0131) 
(0132) 		  mmc_response=MMC_sendCmd(MMC_SEND_OP_COND,0,0,0,0);
    0510 2422      CLR	R2
    0511 822C      STD	Y+4,R2
    0512 822A      STD	Y+2,R2
    0513 8228      STD	Y+0,R2
    0514 2722      CLR	R18
    0515 E001      LDI	R16,1
    0516 DFA0      RCALL	_MMC_sendCmd
    0517 2F40      MOV	R20,R16
(0133) 		  MMC_finish();
    0518 DFD1      RCALL	_MMC_finish
(0134) 
(0135) 		  if (mmc_response==0)               //切换到SPI成功
    0519 2344      TST	R20
    051A F419      BNE	0x051E
(0136) 		  	  {
(0137)               led2_on;
    051B 98DD      CBI	0x1B,5
(0138) 			  counter=81;                     //跳出失败尝试次数
    051C E561      LDI	R22,0x51
(0139) 			  }
    051D C001      RJMP	0x051F
(0140) 		  else  led1_on;                     //切换到SPI失败
    051E 98DE      CBI	0x1B,6
    051F 9563      INC	R22
    0520 3560      CPI	R22,0x50
    0521 F370      BCS	0x0510
(0141) 
(0142) 		  } 
(0143) 	  
(0144) 	 }
    0522 9625      ADIW	R28,5
    0523 940E05F5  CALL	pop_gset2
    0525 9508      RET
_MMC_check:
  mmc_response         --> R20
    0526 940E05FE  CALL	push_gset1
    0528 9725      SBIW	R28,5
(0145) 		
(0146) /***********MMC_check();******测试卡是否正常为0***********/
(0147) unsigned char MMC_check(void);
(0148) unsigned char MMC_check(void)
(0149)      {
(0150) 	  unsigned char mmc_response;
(0151) 	  mmc_response=MMC_sendCmd(MMC_SEND_STATUS,0,0,0,0);   //send cmd
    0529 2422      CLR	R2
    052A 822C      STD	Y+4,R2
    052B 822A      STD	Y+2,R2
    052C 8228      STD	Y+0,R2
    052D 2722      CLR	R18
    052E E00D      LDI	R16,0xD
    052F DF87      RCALL	_MMC_sendCmd
    0530 2F40      MOV	R20,R16
(0152) 	  MMC_finish();
    0531 DFB8      RCALL	_MMC_finish
(0153) 	  LCD_write(0x55,1);                    //test point
    0532 E021      LDI	R18,1
    0533 E505      LDI	R16,0x55
    0534 940E01A3  CALL	_LCD_write
(0154) 	  LCD_write(mmc_response&0x93,1);       //test point
    0536 E021      LDI	R18,1
    0537 2F04      MOV	R16,R20
    0538 7903      ANDI	R16,0x93
    0539 940E01A3  CALL	_LCD_write
(0155) 	  LCD_write(0x55,1);                    //test point
    053B E021      LDI	R18,1
    053C E505      LDI	R16,0x55
    053D 940E01A3  CALL	_LCD_write
(0156) 	  return (mmc_response&0x93);
    053F 2F04      MOV	R16,R20
    0540 7903      ANDI	R16,0x93
    0541 9625      ADIW	R28,5
    0542 940E0601  CALL	pop_gset1
    0544 9508      RET
_MMC_name:
  lcd_add              --> Y+6
  mmc_response         --> R20
  counter              --> R22
    0545 940E0615  CALL	push_gset2
    0547 9725      SBIW	R28,5
(0157) 	 }				 
(0158) 	 
(0159) 
(0160) /***********MMC_name();**获得卡的名字*****/
(0161) void MMC_name(void)
(0162)      {
(0163) 	  unsigned char counter,lcd_add,mmc_response=1;
    0548 E041      LDI	R20,1
(0164) 	  mmc_response=MMC_sendCmd(MMC_SEND_CID,0,0,0,0);
    0549 2422      CLR	R2
    054A 822C      STD	Y+4,R2
    054B 822A      STD	Y+2,R2
    054C 8228      STD	Y+0,R2
    054D 2722      CLR	R18
    054E E00A      LDI	R16,0xA
    054F DF67      RCALL	_MMC_sendCmd
    0550 2F40      MOV	R20,R16
    0551 C00D      RJMP	0x055F
(0165) 	  while (mmc_response)                      //读到数据为0表示正常,就跳出
(0166) 	  		{
(0167) 			MMC_finish();
    0552 DF97      RCALL	_MMC_finish
(0168) 	  		mmc_response=MMC_sendCmd(MMC_SEND_CID,0,0,0,0);
    0553 2422      CLR	R2
    0554 822C      STD	Y+4,R2
    0555 822A      STD	Y+2,R2
    0556 8228      STD	Y+0,R2
    0557 2722      CLR	R18
    0558 E00A      LDI	R16,0xA
    0559 DF5D      RCALL	_MMC_sendCmd
    055A 2F40      MOV	R20,R16
(0169) 			LCD_write(mmc_response,1);          //test point
    055B E021      LDI	R18,1
    055C 940E01A3  CALL	_LCD_write
(0170) 			led1_on;         //test point
    055E 98DE      CBI	0x1B,6
    055F 2344      TST	R20
    0560 F789      BNE	0x0552
(0171) //			prog_flag=1;     //错误标记
(0172) 			}
(0173) 	  led1_off;	       //test point
    0561 9ADE      SBI	0x1B,6
(0174) 	  for (counter=0;counter<26;counter++)
    0562 2766      CLR	R22
    0563 C012      RJMP	0x0576
(0175) 	  	  {
(0176) 		  ram_data[counter]=SPI_tx_rx(0xff);
    0564 EF0F      LDI	R16,0xFF
    0565 DF4C      RCALL	_SPI_tx_rx
    0566 E686      LDI	R24,0x66
    0567 E091      LDI	R25,1
    0568 2FE6      MOV	R30,R22
    0569 27FF      CLR	R31
    056A 0FE8      ADD	R30,R24
    056B 1FF9      ADC	R31,R25
    056C 8300      STD	Z+0,R16
(0177) 		  LCD_write(ram_data[counter],1);        //test point
    056D E021      LDI	R18,1
    056E 2FE6      MOV	R30,R22
    056F 27FF      CLR	R31
    0570 0FE8      ADD	R30,R24
    0571 1FF9      ADC	R31,R25
    0572 8100      LDD	R16,Z+0
    0573 940E01A3  CALL	_LCD_write
    0575 9563      INC	R22
    0576 316A      CPI	R22,0x1A
    0577 F360      BCS	0x0564
(0178) 		  }  
(0179) 	  MMC_flush(8);	  
    0578 E008      LDI	R16,0x8
    0579 DF73      RCALL	_MMC_flush
(0180) 	 }			 
    057A 9625      ADIW	R28,5
    057B 940E05F5  CALL	pop_gset2
    057D 9508      RET
_MMC_capactity:
  lcd_add              --> Y+6
  mmc_response         --> R20
  counter              --> R22
    057E 940E0615  CALL	push_gset2
    0580 9725      SBIW	R28,5
(0181) 	 
(0182) /***********MMC_capactity();******************/
(0183) unsigned long MMC_capactity(void);
(0184) unsigned long MMC_capactity(void)
(0185)      {
(0186) 	  unsigned char counter,lcd_add,mmc_response=1;
    0581 E041      LDI	R20,1
(0187) 	  mmc_response=MMC_sendCmd(MMC_SEND_CSD,0,0,0,0);
    0582 2422      CLR	R2
    0583 822C      STD	Y+4,R2
    0584 822A      STD	Y+2,R2
    0585 8228      STD	Y+0,R2
    0586 2722      CLR	R18
    0587 E009      LDI	R16,0x9
    0588 DF2E      RCALL	_MMC_sendCmd
    0589 2F40      MOV	R20,R16
    058A C00D      RJMP	0x0598
(0188) 	  while (mmc_response)                      //读到数据为0表示正常,就跳出
(0189) 	  		{
(0190) 			MMC_finish();
    058B DF5E      RCALL	_MMC_finish
(0191) 	  		mmc_response=MMC_sendCmd(MMC_SEND_CID,0,0,0,0);
    058C 2422      CLR	R2
    058D 822C      STD	Y+4,R2
    058E 822A      STD	Y+2,R2
    058F 8228      STD	Y+0,R2
    0590 2722      CLR	R18
    0591 E00A      LDI	R16,0xA
    0592 DF24      RCALL	_MMC_sendCmd
    0593 2F40      MOV	R20,R16
(0192) 			LCD_write(mmc_response,1);          //test point
    0594 E021      LDI	R18,1
    0595 940E01A3  CALL	_LCD_write
(0193) 			led1_on;        					 //test point
    0597 98DE      CBI	0x1B,6
    0598 2344      TST	R20
    0599 F789      BNE	0x058B
(0194) //			prog_flag=1;    					  //错误标记
(0195) 			}
(0196) 	  led1_off;	  							     //test point
    059A 9ADE      SBI	0x1B,6
(0197) 	  for (counter=0;counter<26;counter++)
    059B 2766      CLR	R22
    059C C012      RJMP	0x05AF
(0198) 	  	  {
(0199) 		  ram_data[counter]=SPI_tx_rx(0xff);
    059D EF0F      LDI	R16,0xFF
    059E DF13      RCALL	_SPI_tx_rx
    059F E686      LDI	R24,0x66
    05A0 E091      LDI	R25,1
    05A1 2FE6      MOV	R30,R22
    05A2 27FF      CLR	R31
    05A3 0FE8      ADD	R30,R24
    05A4 1FF9      ADC	R31,R25
    05A5 8300      STD	Z+0,R16
(0200) 		  LCD_write(ram_data[counter],1);        //test point
    05A6 E021      LDI	R18,1
    05A7 2FE6      MOV	R30,R22
    05A8 27FF      CLR	R31
    05A9 0FE8      ADD	R30,R24
    05AA 1FF9      ADC	R31,R25
    05AB 8100      LDD	R16,Z+0
    05AC 940E01A3  CALL	_LCD_write
    05AE 9563      INC	R22
    05AF 316A      CPI	R22,0x1A
    05B0 F360      BCS	0x059D
(0201) 		  }  
(0202) 	  MMC_flush(8);	  
    05B1 E008      LDI	R16,0x8
    05B2 DF3A      RCALL	_MMC_flush
(0203) 			
(0204) 			
(0205) 	 }					 
    05B3 9625      ADIW	R28,5
    05B4 940E05F5  CALL	pop_gset2
    05B6 9508      RET
FILE: G:\mega8\atmega16\mp3_7210\io_init.c
(0001) #include <iom16v.h>
(0002) 
(0003) /***********端口初始化******************/
(0004) /**DDRx PORTx I/O  上拉*****************/
(0005) /*  0    0     I     N
(0006) /*  0    1     I     Y  
(0007) /*  1    0     O     output0
(0008) /*  1    1     O     output1
(0009) 
(0010) /***********端口初始化****适用于rev.a*********/
(0011) void port_init(void) 
(0012)      {
(0013) /*bit7=V_battery  bit6=LED1    bit5=LED2    bit4=NU
(0014)   bit3=VS_REST    bit2=VS_BSY  bit1=VS_CS   bit0=VS_DR/DC*/	 
(0015)       DDRA =0b01101110;	      /**/
_port_init:
    05B7 E68E      LDI	R24,0x6E
    05B8 BB8A      OUT	0x1A,R24
(0016) 	  PORTA=0b00001111;         /*led on*/ 
    05B9 E08F      LDI	R24,0xF
    05BA BB8B      OUT	0x1B,R24
(0017) 	  
(0018) /*bit7=SCK     bi6t=MISO          bit5=MOSI  bit4=LCD_reset 
(0019)   bit3=LCD_CS  bit2=LCD_led_CTRL  bit1=NU    bit0=MMC_CS*/
(0020)       DDRB =0b10111101;      /* */
    05BB EB8D      LDI	R24,0xBD
    05BC BB87      OUT	0x17,R24
(0021) 	  PORTB=0b11110101;       /*LCD_led on*/
    05BD EF85      LDI	R24,0xF5
    05BE BB88      OUT	0x18,R24
(0022) 
(0023) /*bit7~bit0=usb_data*/	  	  
(0024)  	  DDRC =0b00000000;       /* */
    05BF 2422      CLR	R2
    05C0 BA24      OUT	0x14,R2
(0025) 	  PORTC=0b00000000;       /**/
    05C1 BA25      OUT	0x15,R2
(0026) 	  
(0027) /*bit7=FT_RXF  bi6t=FT_TXE  bit5=FT_WR  bit4=FT_RD 
(0028)   bit3=SW3     bit2=SW2     bit1=SW1    bit0=SW4*/	  	  
(0029) 	  DDRD =0b00110000;       /**/
    05C2 E380      LDI	R24,0x30
    05C3 BB81      OUT	0x11,R24
(0030) 	  PORTD=0b00101111;       /*FT_WR=0 FT_RD=1*/
    05C

⌨️ 快捷键说明

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