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

📄 ledtest.lis

📁 使用ATMEGA128加CH375对U盘扇区进行读写,本程序在ICCAVR上调试,并在相应硬件电路上调试通过!供参考用
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module ledtest.c
                        .area data(ram, con, rel)
 0000           _I_Timer::
 0000                   .blkb 2
                        .area idata
 0000 0000              .word 0
                        .area data(ram, con, rel)
 0002                   .dbfile E:\ICC128\2008控制台\2008console0TEST\U盘扇区读写\ledtest.c
 0002                   .dbsym e I_Timer _I_Timer I
                        .area text(rom, con, rel)
 0000                   .dbfile E:\ICC128\2008控制台\2008console0TEST\U盘扇区读写\ledtest.c
 0000                   .dbfunc e port_init _port_init fV
                        .even
 0000           _port_init::
 0000                   .dbline -1
 0000                   .dbline 14
 0000           ; 
 0000           ; //ICC-AVR application builder : 2008-1-23 9:13:29
 0000           ; // Target : M128
 0000           ; // Crystal: 8.0000Mhz
 0000           ; //#include <iom128v.h>
 0000           ; //#include <macros.h>
 0000           ; #include "2008.h"
 0000           ; 
 0000           ; int I_Timer=0;
 0000           ; 
 0000           ; //#define portout (*(volatile unsigned char*)0x1100)
 0000           ; 
 0000           ; void port_init(void)
 0000           ; {
 0000                   .dbline 15
 0000           ;  PORTA = 0XFF;
 0000 8FEF              ldi R24,255
 0002 8BBB              out 0x1b,R24
 0004                   .dbline 16
 0004           ;  DDRA  = 0XFF;
 0004 8ABB              out 0x1a,R24
 0006                   .dbline 17
 0006           ;  PORTF = 0XFF;
 0006 80936200          sts 98,R24
 000A                   .dbline 18
 000A           ;  DDRF  = 0XFF;
 000A 80936100          sts 97,R24
 000E                   .dbline 19
 000E           ;  PORTB = 0xFF;
 000E 88BB              out 0x18,R24
 0010                   .dbline 20
 0010           ;  DDRB  = 0xF7;
 0010 87EF              ldi R24,247
 0012 87BB              out 0x17,R24
 0014                   .dbline 21
 0014           ;  PORTD = 0xFF;
 0014 8FEF              ldi R24,255
 0016 82BB              out 0x12,R24
 0018                   .dbline 22
 0018           ;  DDRD  = 0xE3;
 0018 83EE              ldi R24,227
 001A 81BB              out 0x11,R24
 001C                   .dbline 23
 001C           ;  PORTE = 0xFF;
 001C 8FEF              ldi R24,255
 001E 83B9              out 0x3,R24
 0020                   .dbline 24
 0020           ;  DDRE  = 0xFF;
 0020 82B9              out 0x2,R24
 0022                   .dbline 25
 0022           ;  PORTG = 0XFF;
 0022 80936500          sts 101,R24
 0026                   .dbline 26
 0026           ;  DDRG  = 0Xf7;
 0026 87EF              ldi R24,247
 0028 80936400          sts 100,R24
 002C                   .dbline -2
 002C           L1:
 002C                   .dbline 0 ; func end
 002C 0895              ret
 002E                   .dbend
 002E                   .dbfunc e timer0_init _timer0_init fV
                        .even
 002E           _timer0_init::
 002E                   .dbline -1
 002E                   .dbline 34
 002E           ; }
 002E           ; 
 002E           ; //TIMER0 initialize - prescale:1024
 002E           ; // WGM: Normal
 002E           ; // desired value: 20mSec
 002E           ; // actual value: 19.968mSec (0.2%)
 002E           ; void timer0_init(void)
 002E           ; {
 002E                   .dbline 35
 002E           ;  TCCR0 = 0x00; //stop
 002E 2224              clr R2
 0030 23BE              out 0x33,R2
 0032                   .dbline 36
 0032           ;  ASSR  = 0x00; //set async mode
 0032 20BE              out 0x30,R2
 0034                   .dbline 37
 0034           ;  TCNT0 = 0x64; //set count
 0034 84E6              ldi R24,100
 0036 82BF              out 0x32,R24
 0038                   .dbline 38
 0038           ;  OCR0  = 0x9C;
 0038 8CE9              ldi R24,156
 003A 81BF              out 0x31,R24
 003C                   .dbline 39
 003C           ;  TCCR0 = 0x07; //start timer
 003C 87E0              ldi R24,7
 003E 83BF              out 0x33,R24
 0040                   .dbline -2
 0040           L2:
 0040                   .dbline 0 ; func end
 0040 0895              ret
 0042                   .dbend
                        .area vector(rom, abs)
                        .org 64
 0040 0C942100          jmp _timer0_ovf_isr
                        .area text(rom, con, rel)
 0042                   .dbfile E:\ICC128\2008控制台\2008console0TEST\U盘扇区读写\ledtest.c
 0042                   .dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
                        .even
 0042           _timer0_ovf_isr::
 0042 2A92              st -y,R2
 0044 3A92              st -y,R3
 0046 8A93              st -y,R24
 0048 9A93              st -y,R25
 004A EA93              st -y,R30
 004C 2FB6              in R2,0x3f
 004E 2A92              st -y,R2
 0050                   .dbline -1
 0050                   .dbline 44
 0050           ; }
 0050           ; 
 0050           ; #pragma interrupt_handler timer0_ovf_isr:17
 0050           ; void timer0_ovf_isr(void)
 0050           ; {  
 0050                   .dbline 45
 0050           ;   I_Timer++;
 0050 80910000          lds R24,_I_Timer
 0054 90910100          lds R25,_I_Timer+1
 0058 0196              adiw R24,1
 005A 90930100          sts _I_Timer+1,R25
 005E 80930000          sts _I_Timer,R24
 0062                   .dbline 46
 0062           ;   if(I_Timer == 50)
 0062 8233              cpi R24,50
 0064 E0E0              ldi R30,0
 0066 9E07              cpc R25,R30
 0068 61F4              brne L4
 006A                   .dbline 47
 006A           ;   {
 006A                   .dbline 48
 006A           ;    PORTG ^= 0x10;
 006A 80E1              ldi R24,16
 006C 20906500          lds R2,101
 0070 2826              eor R2,R24
 0072 20926500          sts 101,R2
 0076                   .dbline 49
 0076           ;    I_Timer =0;
 0076 2224              clr R2
 0078 3324              clr R3
 007A 30920100          sts _I_Timer+1,R3
 007E 20920000          sts _I_Timer,R2
 0082                   .dbline 50
 0082           ;   }
 0082           L4:
 0082                   .dbline 51
 0082           ;   TCNT0 = 0x64; //reload counter value
 0082 84E6              ldi R24,100
 0084 82BF              out 0x32,R24
 0086                   .dbline -2
 0086           L3:
 0086 2990              ld R2,y+
 0088 2FBE              out 0x3f,R2
 008A E991              ld R30,y+
 008C 9991              ld R25,y+
 008E 8991              ld R24,y+
 0090 3990              ld R3,y+
 0092 2990              ld R2,y+
 0094                   .dbline 0 ; func end
 0094 1895              reti
 0096                   .dbend
 0096                   .dbfunc e init_devices _init_devices fV
                        .even
 0096           _init_devices::
 0096                   .dbline -1
 0096                   .dbline 56
 0096           ; }
 0096           ; 
 0096           ; //call this routine to initialize all peripherals
 0096           ; void init_devices(void)
 0096           ; {
 0096                   .dbline 58
 0096           ;  //stop errant interrupts until set up
 0096           ;  CLI(); //disable all interrupts
 0096 F894              cli
 0098                   .dbline 59
 0098           ;  XDIV  = 0x00; //xtal divider
 0098 2224              clr R2
 009A 2CBE              out 0x3c,R2
 009C                   .dbline 60
 009C           ;  XMCRA = 0x00; //external memory
 009C 20926D00          sts 109,R2
 00A0                   .dbline 61
 00A0           ;  port_init();
 00A0 AFDF              xcall _port_init
 00A2                   .dbline 63
 00A2           ;  //timer0_init();
 00A2           ;  MCUCR = 0x00;
 00A2 2224              clr R2
 00A4 25BE              out 0x35,R2
 00A6                   .dbline 64
 00A6           ;  EICRA = 0x00; //extended ext ints
 00A6 20926A00          sts 106,R2
 00AA                   .dbline 65
 00AA           ;  EICRB = 0x00; //extended ext ints
 00AA 2ABE              out 0x3a,R2
 00AC                   .dbline 66
 00AC           ;  EIMSK = 0x00;
 00AC 29BE              out 0x39,R2
 00AE                   .dbline 68
 00AE           ;  //TIMSK = 0x01; //timer interrupt sources
 00AE           ;  ETIMSK = 0x00; //extended timer interrupt sources
 00AE 20927D00          sts 125,R2
 00B2                   .dbline 69
 00B2           ;  SEI(); //re-enable interrupts
 00B2 7894              sei
 00B4                   .dbline -2
 00B4           L6:
 00B4                   .dbline 0 ; func end
 00B4 0895              ret
 00B6                   .dbend
 00B6                   .dbfunc e initLCDM _initLCDM fV
                        .even
 00B6           _initLCDM::
 00B6                   .dbline -1
 00B6                   .dbline 93
 00B6           ;  //all peripherals are now initialized
 00B6           ; }
 00B6           ; /*void main()
 00B6           ; {
 00B6           ;     int i;
 00B6           ;       unsigned char readXDIV;
 00B6           ;       
 00B6           ;     init_devices();
 00B6           ;       initLCDM();     //初始化LCD
 00B6           ;       Welcome_interface();  //显示欢迎界面 
 00B6           ;  for ( i=1; i<=48;i++) 
 00B6           ;   {
 00B6           ;      PORTG &= 0x04;
 00B6           ;      PORTG ^= 0X01;
 00B6           ;      PORTG ^= 0x02;
 00B6           ;   }
 00B6           ;  while(1)
 00B6           ;  { 
 00B6           ;   ;// portout = 0xaa;
 00B6           ;  }
 00B6           ; }*/
 00B6           ; //============================
 00B6           ; void initLCDM(void)
 00B6           ; {
 00B6                   .dbline 94
 00B6           ;     PORTF |= 0XFF;
 00B6 80916200          lds R24,98
 00BA 8F6F              ori R24,255
 00BC 80936200          sts 98,R24
 00C0                   .dbline 95
 00C0           ;     SetCS;
 00C0 969A              sbi 0x12,6
 00C2                   .dbline 95
 00C2                   .dbline 96
 00C2           ;       SetRD;
 00C2 959A              sbi 0x12,5
 00C4                   .dbline 96
 00C4                   .dbline 97
 00C4           ;       SetWR;
 00C4 979A              sbi 0x12,7
 00C6                   .dbline 97
 00C6                   .dbline 98
 00C6           ;       SetRS;
 00C6 189A              sbi 0x3,0
 00C8                   .dbline 98
 00C8                   .dbline 105
 00C8           ;    // SetRST;
 00C8           ;       //delay_ms(30);
 00C8           ;       //ClrRST;
 00C8           ;       //delay_ms(800);
 00C8           ;   //  SetRST;
 00C8           ;       //delay_ms(10);//
 00C8           ;       SdCmd(0xa0,0x07); LCD_ChkBusy();  //使能 BUSY 输出
 00C8 27E0              ldi R18,7
 00CA 30E0              ldi R19,0
 00CC 00EA              ldi R16,160
 00CE 10E0              ldi R17,0
 00D0 62D0              xcall _SdCmd
 00D2                   .dbline 105
 00D2 99D0              xcall _LCD_ChkBusy
 00D4                   .dbline 106
 00D4           ;       SdCmd(0x81,0x40); LCD_ChkBusy();   //by default 
 00D4 20E4              ldi R18,64
 00D6 30E0              ldi R19,0
 00D8 01E8              ldi R16,129
 00DA 10E0              ldi R17,0
 00DC 5CD0              xcall _SdCmd
 00DE                   .dbline 106
 00DE 93D0              xcall _LCD_ChkBusy
 00E0                   .dbline 107
 00E0           ;       SdCmd(0x00,0xCD); LCD_ChkBusy();  //Whole Chip LCD Controller Reg(Char Mode)
 00E0 2DEC              ldi R18,205
 00E2 30E0              ldi R19,0
 00E4 0027              clr R16
 00E6 1127              clr R17
 00E8 56D0              xcall _SdCmd
 00EA                   .dbline 107
 00EA 8DD0              xcall _LCD_ChkBusy
 00EC                   .dbline 108
 00EC           ;       SdCmd(0x01,0xf2); LCD_ChkBusy();   //BUSY=HiPolity, ClockOut=enable, InternalFreq=4MHz  
 00EC 22EF              ldi R18,242
 00EE 30E0              ldi R19,0
 00F0 01E0              ldi R16,1
 00F2 10E0              ldi R17,0
 00F4 50D0              xcall _SdCmd
 00F6                   .dbline 108
 00F6 87D0              xcall _LCD_ChkBusy
 00F8                   .dbline 109
 00F8           ;       SdCmd(0x10,0x29); LCD_ChkBusy();   //Whole Chip Cursor Control Reg(disable cursor)
 00F8 29E2              ldi R18,41
 00FA 30E0              ldi R19,0
 00FC 00E1              ldi R16,16
 00FE 10E0              ldi R17,0
 0100 4AD0              xcall _SdCmd
 0102                   .dbline 109
 0102 81D0              xcall _LCD_ChkBusy
 0104                   .dbline 110
 0104           ;       SdCmd(0x11,0x10); LCD_ChkBusy();  //Distance of Words or Lines Reg(cursor=1,gap=0)
 0104 20E1              ldi R18,16
 0106 30E0              ldi R19,0
 0108 01E1              ldi R16,17
 010A 10E0              ldi R17,0
 010C 44D0              xcall _SdCmd
 010E                   .dbline 110
 010E 7BD0              xcall _LCD_ChkBusy
 0110                   .dbline 111
 0110           ;       SdCmd(0x90,0x05); LCD_ChkBusy();  //Shift Clock Control Reg(320x240,69Hz)
 0110 25E0              ldi R18,5
 0112 30E0              ldi R19,0
 0114 00E9              ldi R16,144
 0116 10E0              ldi R17,0
 0118 3ED0              xcall _SdCmd
 011A                   .dbline 111

⌨️ 快捷键说明

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