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

📄 attest.lst

📁 使用atmel128对45db161读写程序加LM2009R大液晶显示
💻 LST
📖 第 1 页 / 共 5 页
字号:
    02AA B388      IN	R24,0x18
    02AB 7E8F      ANDI	R24,0xEF
    02AC BB88      OUT	0x18,R24
(0256) 	spi_write(0x81);  //页擦除
    02AD E801      LDI	R16,0x81
    02AE E010      LDI	R17,0
    02AF DE42      RCALL	_spi_write
(0257) 	spi_write((uint)(page>>6));  //2个无关位,12位页地址 PA11~PA0 与10个无关位
    02B0 E026      LDI	R18,6
    02B1 E030      LDI	R19,0
    02B2 018A      MOVW	R16,R20
    02B3 940E0677  CALL	lsr16
    02B5 DE3C      RCALL	_spi_write
(0258) 	spi_write((uint)(page<<2));
    02B6 018A      MOVW	R16,R20
    02B7 0F00      LSL	R16
    02B8 1F11      ROL	R17
    02B9 0F00      LSL	R16
    02BA 1F11      ROL	R17
    02BB DE36      RCALL	_spi_write
(0259) 	spi_write(0x00);  // don't cares
    02BC 2700      CLR	R16
    02BD 2711      CLR	R17
    02BE DE33      RCALL	_spi_write
(0260) 	
(0261) 	UNSELECT_CHIP;
    02BF 9AC4      SBI	0x18,4
(0262) 	
(0263) 	df_wait_busy();
    02C0 DE37      RCALL	_df_wait_busy
    02C1 940E0653  CALL	pop_gset1
    02C3 9508      RET
FILE: E:\ICC128\2008控制台\2008console0TEST\flashTest\ledtest.c
(0001) 
(0002) //ICC-AVR application builder : 2008-1-23 9:13:29
(0003) // Target : M128
(0004) // Crystal: 8.0000Mhz
(0005) //#include <iom128v.h>
(0006) //#include <macros.h>
(0007) #include "2008.h"
(0008) 
(0009) int I_Timer=0;
(0010) int Field = 512;
(0011) uint xx[512];
(0012) //#define portout (*(volatile unsigned char*)0x1100)
(0013) 
(0014) void port_init(void)
(0015) {
(0016)  PORTA = 0XFF;
_port_init:
    02C4 EF8F      LDI	R24,0xFF
    02C5 BB8B      OUT	0x1B,R24
(0017)  DDRA  = 0XFF;
    02C6 BB8A      OUT	0x1A,R24
(0018)  PORTF = 0XFF;
    02C7 93800062  STS	0x62,R24
(0019)  DDRF  = 0XFF;
    02C9 93800061  STS	0x61,R24
(0020)  PORTB = 0xFF;
    02CB BB88      OUT	0x18,R24
(0021)  DDRB  = 0xF7;
    02CC EF87      LDI	R24,0xF7
    02CD BB87      OUT	0x17,R24
(0022)  PORTD = 0xFF;
    02CE EF8F      LDI	R24,0xFF
    02CF BB82      OUT	0x12,R24
(0023)  DDRD  = 0xFF;
    02D0 BB81      OUT	0x11,R24
(0024)  PORTE = 0xFF;
    02D1 B983      OUT	0x03,R24
(0025)  DDRE  = 0xFF;
    02D2 B982      OUT	0x02,R24
(0026)  PORTG = 0XFF;
    02D3 93800065  STS	0x65,R24
(0027)  DDRG  = 0Xf7;
    02D5 EF87      LDI	R24,0xF7
    02D6 93800064  STS	0x64,R24
    02D8 9508      RET
(0028) }
(0029) 
(0030) //TIMER0 initialize - prescale:1024
(0031) // WGM: Normal
(0032) // desired value: 20mSec
(0033) // actual value: 19.968mSec (0.2%)
(0034) void timer0_init(void)
(0035) {
(0036)  TCCR0 = 0x00; //stop
_timer0_init:
    02D9 2422      CLR	R2
    02DA BE23      OUT	0x33,R2
(0037)  ASSR  = 0x00; //set async mode
    02DB BE20      OUT	0x30,R2
(0038)  TCNT0 = 0x64; //set count
    02DC E684      LDI	R24,0x64
    02DD BF82      OUT	0x32,R24
(0039)  OCR0  = 0x9C;
    02DE E98C      LDI	R24,0x9C
    02DF BF81      OUT	0x31,R24
(0040)  TCCR0 = 0x07; //start timer
    02E0 E087      LDI	R24,7
    02E1 BF83      OUT	0x33,R24
    02E2 9508      RET
_timer0_ovf_isr:
    02E3 922A      ST	R2,-Y
    02E4 923A      ST	R3,-Y
    02E5 938A      ST	R24,-Y
    02E6 939A      ST	R25,-Y
    02E7 93EA      ST	R30,-Y
    02E8 B62F      IN	R2,0x3F
    02E9 922A      ST	R2,-Y
(0041) }
(0042) 
(0043) #pragma interrupt_handler timer0_ovf_isr:17
(0044) void timer0_ovf_isr(void)
(0045) {  
(0046)   I_Timer++;
    02EA 91800100  LDS	R24,0x100
    02EC 91900101  LDS	R25,0x101
    02EE 9601      ADIW	R24,1
    02EF 93900101  STS	0x101,R25
    02F1 93800100  STS	0x100,R24
(0047)   if(I_Timer == 50)
    02F3 3382      CPI	R24,0x32
    02F4 E0E0      LDI	R30,0
    02F5 079E      CPC	R25,R30
    02F6 F461      BNE	0x0303
(0048)   {
(0049)    PORTG ^= 0x10;
    02F7 E180      LDI	R24,0x10
    02F8 90200065  LDS	R2,0x65
    02FA 2628      EOR	R2,R24
    02FB 92200065  STS	0x65,R2
(0050)    I_Timer =0;
    02FD 2422      CLR	R2
    02FE 2433      CLR	R3
    02FF 92300101  STS	0x101,R3
    0301 92200100  STS	0x100,R2
(0051)   }
(0052)   TCNT0 = 0x64; //reload counter value
    0303 E684      LDI	R24,0x64
    0304 BF82      OUT	0x32,R24
    0305 9029      LD	R2,Y+
    0306 BE2F      OUT	0x3F,R2
    0307 91E9      LD	R30,Y+
    0308 9199      LD	R25,Y+
    0309 9189      LD	R24,Y+
    030A 9039      LD	R3,Y+
    030B 9029      LD	R2,Y+
    030C 9518      RETI
(0053) }
(0054) 
(0055) //call this routine to initialize all peripherals
(0056) void init_devices(void)
(0057) {
(0058)  //stop errant interrupts until set up
(0059)  CLI(); //disable all interrupts
_init_devices:
    030D 94F8      BCLR	7
(0060)  XDIV  = 0x00; //xtal divider
    030E 2422      CLR	R2
    030F BE2C      OUT	0x3C,R2
(0061)  XMCRA = 0x00; //external memory
    0310 9220006D  STS	0x6D,R2
(0062)  port_init();
    0312 DFB1      RCALL	_port_init
(0063)  timer0_init();
    0313 DFC5      RCALL	_timer0_init
(0064)  MCUCR = 0x00;
    0314 2422      CLR	R2
    0315 BE25      OUT	0x35,R2
(0065)  EICRA = 0x00; //extended ext ints
    0316 9220006A  STS	0x6A,R2
(0066)  EICRB = 0x00; //extended ext ints
    0318 BE2A      OUT	0x3A,R2
(0067)  EIMSK = 0x00;
    0319 BE29      OUT	0x39,R2
(0068)  TIMSK = 0x01; //timer interrupt sources
    031A E081      LDI	R24,1
    031B BF87      OUT	0x37,R24
(0069)  ETIMSK = 0x00; //extended timer interrupt sources
    031C 9220007D  STS	0x7D,R2
(0070)  SEI(); //re-enable interrupts
    031E 9478      BSET	7
    031F 9508      RET
_main:
  readXDIV             --> Y+5
  j                    --> R22
  i                    --> R20
    0320 9724      SBIW	R28,4
(0071)  //all peripherals are now initialized
(0072) }
(0073) void main()
(0074) {
(0075)  int i,j;
(0076)  unsigned char readXDIV;
(0077) 	
(0078)  init_devices();
    0321 DFEB      RCALL	_init_devices
(0079) 	
(0080) 	
(0081) 	
(0082)  initLCDM();     //初始化LCD
    0322 D054      RCALL	_initLCDM
(0083)  Welcome_interface();  //显示欢迎界面 
    0323 D109      RCALL	_Welcome_interface
(0084)  
(0085)  SdCmd(0x10,0x29); LCD_ChkBusy();
    0324 E229      LDI	R18,0x29
    0325 E030      LDI	R19,0
    0326 E100      LDI	R16,0x10
    0327 E010      LDI	R17,0
    0328 D0BE      RCALL	_SdCmd
    0329 D0F5      RCALL	_LCD_ChkBusy
(0086)  SdCmd(0xf1,0x0f);LCD_ChkBusy();     //设置字型大小
    032A E02F      LDI	R18,0xF
    032B E030      LDI	R19,0
    032C EF01      LDI	R16,0xF1
    032D E010      LDI	R17,0
    032E D0B8      RCALL	_SdCmd
    032F D0EF      RCALL	_LCD_ChkBusy
(0087)  ShowText(6,2,"测试 Flash AT45DB161D 读写");
    0330 E283      LDI	R24,0x23
    0331 E091      LDI	R25,1
    0332 8399      STD	Y+1,R25
    0333 8388      STD	Y+0,R24
    0334 E022      LDI	R18,2
    0335 E030      LDI	R19,0
    0336 E006      LDI	R16,6
    0337 E010      LDI	R17,0
    0338 D147      RCALL	_ShowText
(0088)  for ( i=1; i<=48;i++) 
    0339 E041      LDI	R20,1
    033A E050      LDI	R21,0
(0089)   {
(0090)      PORTG &= 0x04;
    033B 91800065  LDS	R24,0x65
    033D 7084      ANDI	R24,4
    033E 93800065  STS	0x65,R24
(0091)      PORTG ^= 0X01;
    0340 E081      LDI	R24,1
    0341 90200065  LDS	R2,0x65
    0343 2628      EOR	R2,R24
    0344 92200065  STS	0x65,R2
(0092)      PORTG ^= 0x02;
    0346 E082      LDI	R24,2
    0347 90200065  LDS	R2,0x65
    0349 2628      EOR	R2,R24
    034A 92200065  STS	0x65,R2
    034C 5F4F      SUBI	R20,0xFF
    034D 4F5F      SBCI	R21,0xFF
    034E E380      LDI	R24,0x30
    034F E090      LDI	R25,0
    0350 1784      CP	R24,R20
    0351 0795      CPC	R25,R21
    0352 F744      BGE	0x033B
(0093)   }
(0094)   //=============================
(0095)   
(0096)    df_init();  //端口初始化
    0353 940E0086  CALL	_df_init
(0097)    j=0;
    0355 2766      CLR	R22
    0356 2777      CLR	R23
(0098)  /*kl:
(0099)   for(i=0;i<512;i++)
(0100) 	xx[i]=3;    //初始化
(0101) 
(0102)   //测试写
(0103) 	df_write_open(4099*Field);
(0104) 	//for(i=0;i<5;i++)
(0105) 	// {
(0106) 	    df_write(xx,512);
(0107) 	// }
(0108) 	df_write_close();
(0109) 	j++;
(0110) 
(0111)    if(j<10)
(0112)    {
(0113)     goto kl;
(0114)    }
(0115) 
(0116) */
(0117) //	Write_page(2049,0,xx,512); //读页 一 页地址,  二页内地址,  三 数组存放取出来的数,  四 取多少个字节
(0118) 	//=============================================
(0119)   df_read_open(4099*Field);
    0357 91200102  LDS	R18,0x102
    0359 91300103  LDS	R19,0x103
    035B E003      LDI	R16,3
    035C E110      LDI	R17,0x10
    035D 940E0637  CALL	empy16s
    035F 940E00AE  CALL	_df_read_open
(0120) //	for(j=0;j<5;j++)
(0121) //	{
(0122) 	 df_read(xx,512);
    0361 E020      LDI	R18,0
    0362 E032      LDI	R19,2
    0363 E406      LDI	R16,0x46
    0364 E011      LDI	R17,1
    0365 940E01DE  CALL	_df_read
(0123) //	}
(0124) //	df_read_close();
(0125) //   Page_Scrape(2049);  //页擦除
(0126)  	//  Read_Page(2049,0,xx,512); //读页 一 页地址,  二页内地址,  三 数组存放取出来的数,  四 取多少个字节
(0127)  	//  df_read(1,1,xx,128);
(0128) 
(0129)   ShowNumber(0,0,512,xx);
    0367 E486      LDI	R24,0x46
    0368 E091      LDI	R25,1
    0369 839B      STD	Y+3,R25
    036A 838A      STD	Y+2,R24
    036B E080      LDI	R24,0
    036C E092      LDI	R25,2
    036D 8399      STD	Y+1,R25
    036E 8388      STD	Y+0,R24
    036F 2722      CLR	R18
    0370 2733      CLR	R19
    0371 2700      CLR	R16
    0372 2711      CLR	R17
    0373 D12D      RCALL	_ShowNumber
(0130) 
(0131)   //=========================
(0132)  while(1)
    0374 CFFF      RJMP	0x0374
    0375 9624      ADIW	R28,4
    0376 9508      RET
(0133)  { 
(0134)   ;// portout = 0xaa;
(0135)  }
(0136) }
(0137) //============================
(0138) void initLCDM(void)
(0139) {
(0140)     PORTF |= 0XFF;
_initLCDM:
    0377 91800062  LDS	R24,0x62
    0379 6F8F      ORI	R24,0xFF
    037A 93800062  STS	0x62,R24
(0141)     SetCS;
    037C 9A96      SBI	0x12,6
(0142) 	SetRD;
    037D 9A95      SBI	0x12,5
(0143) 	SetWR;
    037E 9A97      SBI	0x12,7
(0144) 	SetRS;
    037F 9A18      SBI	0x03,0
(0145)    // SetRST;
(0146) 	//delay_ms(30);
(0147) 	//ClrRST;
(0148) 	//delay_ms(800);
(0149)   //  SetRST;
(0150) 	//delay_ms(10);//
(0151) 	SdCmd(0xa0,0x07); LCD_ChkBusy();  //使能 BUSY 输出
    0380 E027      LDI	R18,7
    0381 E030      LDI	R19,0
    0382 EA00      LDI	R16,0xA0
    0383 E010      LDI	R17,0
    0384 D062      RCALL	_SdCmd
    0385 D099      RCALL	_LCD_ChkBusy
(0152) 	SdCmd(0x81,0x40); LCD_ChkBusy();   //by default	
    0386 E420      LDI	R18,0x40
    0387 E030      LDI	R19,0
    0388 E801      LDI	R16,0x81
    0389 E010      LDI	R17,0
    038A D05C      RCALL	_SdCmd
    038B D093      RCALL	_LCD_ChkBusy
(0153) 	SdCmd(0x00,0xCD); LCD_ChkBusy();  //Whole Chip LCD Controller Reg(Char Mode)
    038C EC2D      LDI	R18,0xCD
    038D E030      LDI	R19,0
    038E 2700      CLR	R16
    038F 2711      CLR	R17
    0390 D056      RCALL	_SdCmd
    0391 D08D      RCALL	_LCD_ChkBusy
(0154) 	SdCmd(0x01,0xf2); LCD_ChkBusy();   //BUSY=HiPolity, ClockOut=enable, InternalFreq=4MHz 	
    0392 EF22      LDI	R18,0xF2
    0393 E030      LDI	R19,0
    0394 E001      LDI	R16,1
    0395 E010      LDI	R17,0
    0396 D050      RCALL	_SdCmd
    0397 D087      RCALL	_LCD_ChkBusy
(0155) 	SdCmd(0x10,0x29); LCD_ChkBusy();   //Whole Chip Cursor Control Reg(disable cursor)
    0398 E229      LDI	R18,0x29
    0399 E030      LDI	R19,0
    039A E100      LDI	R16,0x10
    039B E010      LDI	R17,0
    039C D04A      RCALL	_SdCmd
    039D D081      RCALL	_LCD_ChkBusy
(0156) 	SdCmd(0x11,0x10); LCD_ChkBusy();  //Distance of Words or Lines Reg(cursor=1,gap=0)
    039E E120      LDI	R18,0x10
    039F E030      LDI	R19,0
    03A0 E101      LDI	R16,0x11
    03A1 E010      LDI	R17,0
    03A2 D044      RCALL	_SdCmd
    03A3 D07B      RCALL	_LCD_ChkBusy
(0157) 	SdCmd(0x90,0x05); LCD_ChkBusy();  //Shift Clock Control Reg(320x240,69Hz)
    03A4 E025      LDI	R18,5
    03A5 E030      LDI	R19,0

⌨️ 快捷键说明

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