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

📄 avr.lst

📁 Atmega64单片机程序(完整工程)
💻 LST
📖 第 1 页 / 共 5 页
字号:
__start:
__text_start:
    0F06 EFCF      LDI	R28,0xFF
    0F07 E1D0      LDI	R29,0x10
    0F08 BFCD      OUT	0x3D,R28
    0F09 BFDE      OUT	0x3E,R29
    0F0A 54C0      SUBI	R28,0x40
    0F0B 40D0      SBCI	R29,0
    0F0C EA0A      LDI	R16,0xAA
    0F0D 8308      STD	Y+0,R16
    0F0E 2400      CLR	R0
    0F0F EDE8      LDI	R30,0xD8
    0F10 E0F6      LDI	R31,6
    0F11 E01B      LDI	R17,0xB
    0F12 3BE8      CPI	R30,0xB8
    0F13 07F1      CPC	R31,R17
    0F14 F011      BEQ	0x0F17
    0F15 9201      ST	R0,Z+
    0F16 CFFB      RJMP	0x0F12
    0F17 8300      STD	Z+0,R16
    0F18 E3E3      LDI	R30,0x33
    0F19 E1F8      LDI	R31,0x18
    0F1A E0A0      LDI	R26,0
    0F1B E0B1      LDI	R27,1
    0F1C E11E      LDI	R17,0x1E
    0F1D 30EB      CPI	R30,0xB
    0F1E 07F1      CPC	R31,R17
    0F1F F021      BEQ	0x0F24
    0F20 95C8      LPM
    0F21 9631      ADIW	R30,1
    0F22 920D      ST	R0,X+
    0F23 CFF9      RJMP	0x0F1D
    0F24 D012      RCALL	_main
_exit:
    0F25 CFFF      RJMP	_exit
__StackOverflowed:
  c                    --> R20
    0F26 940E43BD  CALL	push_gset1
    0F28 2F40      MOV	R20,R16
FILE: E:\电子制作\FAT_SD_MENU\Main\main.c
(0001) #include "SYS_Config.h"
(0002) #include "GUI_Config.h"
(0003) #include "FS_Config.h"
(0004) #include "time.h"
(0005) #include "KeyScan.h"
(0006) 
(0007) #include "SD_Config.h"
(0008) 
(0009) #include "GUI.h"
(0010) #include "Picture.h"
(0011) 
(0012) #include "SD_EEPROM.h"
(0013) #include "SD_Drive.h"
(0014) #include "USART1.h"
(0015) #include "TEST_SD.h"
(0016) 
(0017) #include "fat.h"
(0018) 
(0019) INT8U Data_Buf[SD_BLOCKSIZE];
(0020) INT8U WritFileData[]="File system test!!!\n";
(0021) 
(0022) //注明:堆在设为64,设为32会出现硬件堆在溢出的情况!!!
(0023) extern void MenuMainLoop(void);
(0024) //编译时间
(0025) extern void DispBuildTime(void);
(0026) 
(0027) void _StackOverflowed(char c)
(0028) {
(0029)    if (c == 1)
    0F29 3041      CPI	R20,1
    0F2A F429      BNE	0x0F30
(0030)        Uart1_SendString("\ntrashed HW stack\n");
    0F2B E800      LDI	R16,0x80
    0F2C E011      LDI	R17,1
    0F2D 940E413C  CALL	_Uart1_SendString
    0F2F C004      RJMP	0x0F34
(0031)    else
(0032)        Uart1_SendString("\ntrashed SW stack\n");
    0F30 E60D      LDI	R16,0x6D
    0F31 E011      LDI	R17,1
    0F32 940E413C  CALL	_Uart1_SendString
    0F34 940E43C0  CALL	pop_gset1
    0F36 9508      RET
_main:
  i                    --> Y+4
    0F37 9723      SBIW	R28,3
(0033) }
(0034) 
(0035) 
(0036) HANDLE FHandle;//文件系统句柄
(0037) void main(void)
(0038) {
(0039)     INT8U i;
(0040) 	
(0041)     GUI_Delay(500);//等待系统稳定,再作初始化
    0F38 EF04      LDI	R16,0xF4
    0F39 E011      LDI	R17,1
    0F3A 940E3AAF  CALL	_GUI_Delay
(0042) 
(0043)     CLI();//关中断,对模块函数进行初始化
    0F3C 94F8      BCLR	7
(0044) 	timer0_init();
    0F3D D055      RCALL	_timer0_init
(0045) 	timer2_init();
    0F3E 940E327B  CALL	_timer2_init
(0046) 	
(0047)     #if USART1_EN
(0048)         Uart1_Init();
    0F40 940E412D  CALL	_Uart1_Init
(0049)     #endif
(0050)     
(0051)     #if (USART1_EN==1&&SD_MMC_TEST_EN==1)
(0052)         Test_SD_Initialize();   //SD卡初始化(带串口输出功能)
(0053)     #else
(0054)         SD_Initialize();
    0F42 940E33BB  CALL	_SD_Initialize
(0055)     #endif
(0056)     
(0057)     GUI_Init();
    0F44 940E3A98  CALL	_GUI_Init
(0058) 	//编译时间
(0059)     DispBuildTime();
    0F46 940E164A  CALL	_DispBuildTime
    0F48 940E4AA8  CALL	0x4AA8
(0060) 	GUI_Delay(10000);
(0061)     
(0062)     SEI();//开中断 
    0F4A 9478      BSET	7
(0063)     
(0064) 	//GUI_Display_Image(PIC_FAT);
(0065)     
(0066)     #if SD_MMC_TEST_EN
(0067)         SD_MMC_TEST();          //测试SD卡各项功能函数,正常使用时使SD_MMC_TEST_EN=0
(0068)     #endif
(0069)      
(0070)     DiskInit();                 //初始化磁盘管理模块
    0F4B 940E1986  CALL	_DiskInit
(0071)     AddFileDriver( SD_Command );//加载SD卡驱动程序
    0F4D E80C      LDI	R16,0x8C
    0F4E E010      LDI	R17,0
    0F4F 940E19C8  CALL	_AddFileDriver
(0072)     FileInit();
    0F51 940E2872  CALL	_FileInit
(0073)        
(0074)     Uart1_SendString("\n\nMakeDir:");    
    0F53 E602      LDI	R16,0x62
    0F54 E011      LDI	R17,1
    0F55 940E413C  CALL	_Uart1_SendString
(0075)     MakeDir("a:\\蒋金雄");
    0F57 E508      LDI	R16,0x58
    0F58 E011      LDI	R17,1
    0F59 940E1828  CALL	_MakeDir
(0076)     
(0077)     //Uart1_SendString("\n\nFileOpen_W:");    
(0078)     //FHandle = FileOpen("a:\\蒋金雄\\JJX.txt","w");
(0079)     
(0080)     //Uart1_SendString("\n\nFileWrite:");    
(0081)     //FileWrite(WritFileData,sizeof(WritFileData), FHandle);
(0082)     
(0083)     //Uart1_SendString("\n\nFileClose:");    
(0084)     //FileClose(FHandle);
(0085)     
(0086)     Uart1_SendString("\n\nFileOpen:");    
    0F5B E40C      LDI	R16,0x4C
    0F5C E011      LDI	R17,1
    0F5D 940E413C  CALL	_Uart1_SendString
(0087)     FHandle = FileOpen("a:\\蒋金雄\\JJX.txt","r");
    0F5F E328      LDI	R18,0x38
    0F60 E031      LDI	R19,1
    0F61 E30A      LDI	R16,0x3A
    0F62 E011      LDI	R17,1
    0F63 940E2B35  CALL	_FileOpen
    0F65 930006D8  STS	FHandle,R16
(0088)     
(0089)     Uart1_SendString("\n\nFileRead:");    
    0F67 E20C      LDI	R16,0x2C
    0F68 E011      LDI	R17,1
    0F69 940E413C  CALL	_Uart1_SendString
(0090)     FileRead(Data_Buf,512,FHandle);
    0F6B 902006D8  LDS	R2,FHandle
    0F6D 822A      STD	Y+2,R2
    0F6E E040      LDI	R20,0
    0F6F E052      LDI	R21,2
    0F70 940E48FD  CALL	0x48FD
    0F72 ED09      LDI	R16,0xD9
    0F73 E016      LDI	R17,6
    0F74 940E2CE8  CALL	_FileRead
(0091)     
(0092)     Uart1_SendString("\n\nFileClose:"); 
    0F76 E10F      LDI	R16,0x1F
    0F77 E011      LDI	R17,1
    0F78 940E413C  CALL	_Uart1_SendString
(0093)     FileClose(FHandle);
    0F7A 910006D8  LDS	R16,FHandle
    0F7C 940E2B62  CALL	_FileClose
(0094)     
(0095)     Uart1_SendString("\n\nOUTPUT:");  
    0F7E E105      LDI	R16,0x15
    0F7F E011      LDI	R17,1
    0F80 940E413C  CALL	_Uart1_SendString
(0096)     Uart1_SendString(Data_Buf);    
    0F82 ED09      LDI	R16,0xD9
    0F83 E016      LDI	R17,6
    0F84 940E413C  CALL	_Uart1_SendString
(0097) 
(0098) 
(0099)     AllCacheWriteBack();
    0F86 940E30D5  CALL	_AllCacheWriteBack
(0100)     RemoveFileDriver(0);
    0F88 2700      CLR	R16
    0F89 940E1C1C  CALL	_RemoveFileDriver
    0F8B C004      RJMP	0x0F90
(0101)     
(0102)     while(1)
(0103)     {
(0104)        _StackCheck();//堆在检查函数
    0F8C 940E44AC  CALL	__StackCheck
(0105)        
(0106) 	   MenuMainLoop();
    0F8E 940E1664  CALL	_MenuMainLoop
    0F90 CFFB      RJMP	0x0F8C
    0F91 9623      ADIW	R28,3
    0F92 9508      RET
FILE: E:\电子制作\FAT_SD_MENU\MENU\KeyScan.C
(0001) #include "SYS_Config.h"
(0002) #include "KeyScan.h"
(0003) 
(0004) /****************************************************************************
(0005) * KeyScan - 键盘扫描函数
(0006) * 判4个按键那个有按下
(0007) * @Return :有按键 返回键值 无按键 返回FALSE 因此键值定义不能为FALSE
(0008) *****************************************************************************/
(0009) //ICC-AVR application builder : 2008-5-20 上午 09:01:00
(0010) // Target : M64
(0011) // Crystal: 16.000Mhz
(0012) // TIMER0 initialize - prescale:1024
(0013) // WGM: Normal
(0014) // desired value: 10mSec
(0015) // actual value:  9.984mSec (0.2%)
(0016) void timer0_init(void)
(0017) {
(0018)     Key0_IN();
_timer0_init:
    0F93 91800061  LDS	R24,0x61
    0F95 7F8E      ANDI	R24,0xFE
    0F96 940E4B92  CALL	0x4B92
    0F98 6081      ORI	R24,1
    0F99 940E4CA3  CALL	0x4CA3
(0019) 	Key1_IN();
    0F9B 7F8D      ANDI	R24,0xFD
    0F9C 940E4B92  CALL	0x4B92
    0F9E 6082      ORI	R24,2
    0F9F 940E4CA3  CALL	0x4CA3
(0020) 	Key2_IN();
    0FA1 7F8B      ANDI	R24,0xFB
    0FA2 940E4B92  CALL	0x4B92
    0FA4 6084      ORI	R24,4
    0FA5 940E4CA3  CALL	0x4CA3
(0021) 	Key3_IN();
    0FA7 7F87      ANDI	R24,0xF7
    0FA8 940E4B92  CALL	0x4B92
    0FAA 6088      ORI	R24,0x8
    0FAB 93800062  STS	0x62,R24
(0022) 	
(0023)     TCCR0 = 0x00; //stop
    0FAD 2422      CLR	R2
    0FAE BE23      OUT	0x33,R2
(0024)     ASSR  = 0x00; //set async mode
    0FAF BE20      OUT	0x30,R2
(0025)     TCNT0 = 0x64; //set count
    0FB0 E684      LDI	R24,0x64
    0FB1 BF82      OUT	0x32,R24
(0026)     OCR0  = 0x9C;
    0FB2 E98C      LDI	R24,0x9C
    0FB3 BF81      OUT	0x31,R24
(0027)     TCCR0 = 0x07; //start timer
    0FB4 E087      LDI	R24,7
    0FB5 BF83      OUT	0x33,R24
(0028)  
(0029) 	TIMSK|= 0x01; //timer interrupt sources
    0FB6 B787      IN	R24,0x37
    0FB7 6081      ORI	R24,1
    0FB8 BF87      OUT	0x37,R24
    0FB9 9508      RET
_timer0_ovf_isr:
    0FBA 922A      ST	R2,-Y
    0FBB 923A      ST	R3,-Y
    0FBC 930A      ST	R16,-Y
    0FBD 931A      ST	R17,-Y
    0FBE 938A      ST	R24,-Y
    0FBF 939A      ST	R25,-Y
    0FC0 93EA      ST	R30,-Y
    0FC1 B62F      IN	R2,0x3F
    0FC2 922A      ST	R2,-Y
(0030) }
(0031) 
(0032) INT8U Keyvalue=0;
(0033) INT8U Key_Deal_Flag=0;
(0034) INT8U Keyvalue_first,Keyvalue_second;
(0035) INT8U Count0=0,Key_time=0;
(0036) 
(0037) #pragma interrupt_handler timer0_ovf_isr:17
(0038) void timer0_ovf_isr(void)
(0039) {
(0040)     TCNT0 = 0x64; //reload counter value
    0FC3 E684      LDI	R24,0x64
    0FC4 BF82      OUT	0x32,R24
(0041) 	
(0042) 	Count0++;
    0FC5 91800195  LDS	R24,Count0
    0FC7 5F8F      SUBI	R24,0xFF
    0FC8 93800195  STS	Count0,R24
(0043) 	if(Count0==1)
    0FCA 3081      CPI	R24,1
    0FCB F449      BNE	0x0FD5
(0044) 	{
(0045) 	    Keyvalue_first=Key_STATUS();
    0FCC B180      IN	R24,0x00
    0FCD 708F      ANDI	R24,0xF
    0FCE 938008DA  STS	Keyvalue_first,R24
(0046) 		if(Keyvalue_first==0x0F)
    0FD0 308F      CPI	R24,0xF
    0FD1 F419      BNE	0x0FD5
(0047) 		    Count0=0;
    0FD2 2422      CLR	R2
    0FD3 92200195  STS	Count0,R2
(0048) 	}
(0049) 	if(Count0>=15)//隔140ms再来检测一次
    0FD5 91800195  LDS	R24,Count0
    0FD7 308F      CPI	R24,0xF
    0FD8 F1A0      BCS	0x100D
(0050) 	{
(0051) 	    Count0=0;
    0FD9 2422      CLR	R2
    0FDA 92200195  STS	Count0,R2
(0052) 	    Keyvalue_second=Key_STATUS();
    0FDC B180      IN	R24,0x00
    0FDD 708F      ANDI	R24,0xF
    0FDE 938008D9  STS	Keyvalue_second,R24
(0053) 	    if(Keyvalue_first==Keyvalue_second)//如果相等,则为有效按键
    0FE0 903008DA  LDS	R3,Keyvalue_first
    0FE2 1638      CP	R3,R24
    0FE3 F549      BNE	0x100D
(0054) 		{
(0055) 		    Key_Deal_Flag=1;
    0FE4 E081      LDI	R24,1
    0FE5 93800194  STS	Key_Deal_Flag,R24
(0056) 	        switch(Keyvalue_first)
    0FE7 2D03      MOV	R16,R3
    0FE8 2711      CLR	R17
    0FE9 3007      CPI	R16,7
    0FEA E0E0      LDI	R30,0
    0FEB 071E      CPC	R17,R30
    0FEC F0C9      BEQ	0x1006
    0FED 300B      CPI	R16,0xB
    0FEE E0E0      LDI	R30,0
    0FEF 071E      CPC	R17,R30
    0FF0 F089      BEQ	0x1002
    0FF1 300D      CPI	R16,0xD
    0FF2 E0E0      LDI	R30,0
    0FF3 071E      CPC	R17,R30
    0FF4 F049      BEQ	0x0FFE
    0FF5 300E      CPI	R16,0xE
    0FF6 E0E0      LDI	R30,0
    0FF7 071E      CPC	R17,R30
    0FF8 F009      BEQ	0x0FFA
    0FF9 C010      RJMP	0x100A
(0057)             {
(0058)                 case 0x0E:Keyvalue=Key_Up;   break;
    0FFA E182      LDI	R24,0x12
    0FFB 93800193  STS	Keyvalue,R24
    0FFD C00F      RJMP	0x100D
(0059) 	            case 0x0D:Keyvalue=Key_Right;break;
    0FFE E184      LDI	R24,0x14
    0FFF 93800193  STS	Keyvalue,R24
    1001 C00B      RJMP	0x100D
(0060) 	            case 0x0B:Keyvalue=Key_Left; break;
    1002 E183      LDI	R24,0x13
    1003 93800193  STS	Keyvalue,R24
    1005 C007      RJMP	0x100D
(0061) 	            case 0x07:Keyvalue=Key_Down; break;
    1006 E181      LDI	R24,0x11
    1007 93800193  STS	Keyvalue,R24
    1009 C003      RJMP	0x100D
(0062) 	            default:  Keyvalue=FALSE ;   break;//同时有两个以上按键,视为无效
    100A 2422      CLR	R2
    100B 92200193  STS	Keyvalue,R2

⌨️ 快捷键说明

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