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

📄 lcd.lst

📁 avr单片机与flash存储器通信程序,调试通过,希望对大家有所帮助.
💻 LST
字号:
__text_start:
__start:
    0027 E5CF      LDI	R28,0x5F
    0028 E0D2      LDI	R29,2
    0029 BFCD      OUT	0x3D,R28
    002A BFDE      OUT	0x3E,R29
    002B 51C0      SUBI	R28,0x10
    002C 40D0      SBCI	R29,0
    002D EA0A      LDI	R16,0xAA
    002E 8308      STD	Y+0,R16
    002F 2400      CLR	R0
    0030 E7EB      LDI	R30,0x7B
    0031 E0F0      LDI	R31,0
    0032 E010      LDI	R17,0
    0033 37EB      CPI	R30,0x7B
    0034 07F1      CPC	R31,R17
    0035 F011      BEQ	0x0038
    0036 9201      ST	R0,Z+
    0037 CFFB      RJMP	0x0033
    0038 8300      STD	Z+0,R16
    0039 E3E2      LDI	R30,0x32
    003A E0F0      LDI	R31,0
    003B E6A0      LDI	R26,0x60
    003C E0B0      LDI	R27,0
    003D E010      LDI	R17,0
    003E 34ED      CPI	R30,0x4D
    003F 07F1      CPC	R31,R17
    0040 F021      BEQ	0x0045
    0041 95C8      LPM
    0042 9631      ADIW	R30,1
    0043 920D      ST	R0,X+
    0044 CFF9      RJMP	0x003E
    0045 D018      RCALL	_main
_exit:
    0046 CFFF      RJMP	_exit
FILE: C:\ATMega8515\LCD\init.c
(0001) //ICC-AVR application builder : 2006-4-27 13:29:25
(0002) // Target : M8515
(0003) // Crystal: 11.059Mhz
(0004) 
(0005) #include <iom8515v.h>
(0006) #include <macros.h>
(0007) 
(0008) void port_init(void)
(0009) {
(0010)  PORTA = 0x00;
_port_init:
    0047 2422      CLR	R2
    0048 BA2B      OUT	0x1B,R2
(0011)  DDRA  = 0xFF;
    0049 EF8F      LDI	R24,0xFF
    004A BB8A      OUT	0x1A,R24
(0012)  PORTB = 0x00;
    004B BA28      OUT	0x18,R2
(0013)  DDRB  = 0x00;
    004C BA27      OUT	0x17,R2
(0014)  PORTC = 0x00;
    004D BA25      OUT	0x15,R2
(0015)  DDRC  = 0x1C;
    004E E18C      LDI	R24,0x1C
    004F BB84      OUT	0x14,R24
(0016)  PORTD = 0x00;
    0050 BA22      OUT	0x12,R2
(0017)  DDRD  = 0x00; 
    0051 BA21      OUT	0x11,R2
(0018)  PORTE = 0x00;
    0052 B827      OUT	0x07,R2
(0019)  DDRE  = 0x00; 
    0053 B826      OUT	0x06,R2
    0054 9508      RET
(0020) }
(0021) 
(0022) //call this routine to initialize all peripherals
(0023) void init_devices(void)
(0024) {
(0025)  //stop errant interrupts until set up
(0026)  CLI(); //disable all interrupts
_init_devices:
    0055 94F8      BCLR	7
(0027)  port_init();
    0056 DFF0      RCALL	_port_init
(0028) 
(0029)  MCUCR = 0x00;
    0057 2422      CLR	R2
    0058 BE25      OUT	0x35,R2
(0030)  EMCUCR = 0x00;
    0059 BE26      OUT	0x36,R2
(0031)  GICR = 0x00;
    005A BE2B      OUT	0x3B,R2
(0032)  TIMSK = 0x00;
    005B BE29      OUT	0x39,R2
(0033)  SEI(); //re-enable interrupts
    005C 9478      BSET	7
    005D 9508      RET
FILE: C:\ATMega8515\LCD\main.c
(0001) #include <iom8515v.h>
(0002) #include"ForATmega8515.h"
(0003) 
(0004) void delay(uint ticks);
(0005) ///////////////////////
(0006) void writedata(uchar lcddata);//写数据到LCD
(0007) void writecom(uchar lcddata);//写命令到LCD
(0008) void writeline(uchar *str); //写一串数据到LCD
(0009) void initlcd();		   //初始话LCD
(0010) ////////////////////////////
(0011) void main()
(0012) { 
(0013)  uint softdelay=1000;
_main:
  softdelay            --> R20
    005E EE48      LDI	R20,0xE8
    005F E053      LDI	R21,3
(0014)  init_devices();
    0060 DFF4      RCALL	_init_devices
(0015)  initlcd();
    0061 D05C      RCALL	_initlcd
    0062 C028      RJMP	0x008B
(0016) 
(0017)  while(1)
(0018)  {
(0019)  writeline("Hello World!");//在LCD上面显示Hello World!
    0063 E60E      LDI	R16,0x6E
    0064 E010      LDI	R17,0
    0065 D04B      RCALL	_writeline
    0066 C003      RJMP	0x006A
(0020)  while(softdelay--)delay(30);softdelay=1000;//延时
    0067 E10E      LDI	R16,0x1E
    0068 E010      LDI	R17,0
    0069 D023      RCALL	_delay
    006A 011A      MOVW	R2,R20
    006B 5041      SUBI	R20,1
    006C 4050      SBCI	R21,0
    006D 2022      TST	R2
    006E F7C1      BNE	0x0067
    006F 2033      TST	R3
    0070 F7B1      BNE	0x0067
    0071 EE48      LDI	R20,0xE8
    0072 E053      LDI	R21,3
(0021)  writecom(0x01);//清屏
    0073 E001      LDI	R16,1
    0074 D031      RCALL	_writecom
(0022)  writecom(0x80);//回车
    0075 E800      LDI	R16,0x80
    0076 D02F      RCALL	_writecom
(0023)  writeline("ForATMega8515");//在LCD上面显示ForATMega8515
    0077 E600      LDI	R16,0x60
    0078 E010      LDI	R17,0
    0079 D037      RCALL	_writeline
    007A C003      RJMP	0x007E
(0024)  while(softdelay--)delay(30);softdelay=1000;//延时
    007B E10E      LDI	R16,0x1E
    007C E010      LDI	R17,0
    007D D00F      RCALL	_delay
    007E 011A      MOVW	R2,R20
    007F 5041      SUBI	R20,1
    0080 4050      SBCI	R21,0
    0081 2022      TST	R2
    0082 F7C1      BNE	0x007B
    0083 2033      TST	R3
    0084 F7B1      BNE	0x007B
    0085 EE48      LDI	R20,0xE8
    0086 E053      LDI	R21,3
(0025)  writecom(0x01);//清屏
    0087 E001      LDI	R16,1
    0088 D01D      RCALL	_writecom
(0026)  writecom(0x80);//回车
    0089 E800      LDI	R16,0x80
    008A D01B      RCALL	_writecom
    008B CFD7      RJMP	0x0063
    008C 9508      RET
_delay:
  i                    --> R20
  ticks                --> R16
    008D D045      RCALL	push_gset1
(0027) 
(0028)  }
(0029) }
(0030) 
(0031) 
(0032) void delay(uint ticks)
(0033) {
(0034)  uchar i;
(0035)  for(;ticks!=0;ticks--)for(i=200;i!=0;i--);
    008E C007      RJMP	0x0096
    008F EC48      LDI	R20,0xC8
    0090 C001      RJMP	0x0092
    0091 954A      DEC	R20
    0092 2344      TST	R20
    0093 F7E9      BNE	0x0091
    0094 5001      SUBI	R16,1
    0095 4010      SBCI	R17,0
    0096 3000      CPI	R16,0
    0097 0701      CPC	R16,R17
    0098 F7B1      BNE	0x008F
    0099 D03C      RCALL	pop_gset1
    009A 9508      RET
_writedata:
  lcddata              --> R20
    009B D037      RCALL	push_gset1
    009C 2F40      MOV	R20,R16
(0036) }
(0037) 
(0038) 
(0039) 
(0040) ///////////////////////////////
(0041) void writedata(uchar lcddata)
(0042) {
(0043) // E=1;
(0044)  PORTC|=E;
    009D 9AAC      SBI	0x15,4
(0045) // RS=1;
(0046)  PORTC|=RS;
    009E 9AAA      SBI	0x15,2
(0047) // RW=0;
(0048)  PORTA=lcddata;
    009F BB4B      OUT	0x1B,R20
(0049) // E=0;
(0050)  PORTC&=~E;
    00A0 98AC      CBI	0x15,4
(0051)  delay(100);
    00A1 E604      LDI	R16,0x64
    00A2 E010      LDI	R17,0
    00A3 DFE9      RCALL	_delay
    00A4 D031      RCALL	pop_gset1
    00A5 9508      RET
_writecom:
  lcddata              --> R20
    00A6 D02C      RCALL	push_gset1
    00A7 2F40      MOV	R20,R16
(0052) }
(0053) /////////////////////////////////
(0054) void writecom(uchar lcddata)
(0055) {
(0056) // E=1;
(0057)  PORTC|=E;
    00A8 9AAC      SBI	0x15,4
(0058) // RS=0;
(0059)  PORTC&=~RS;
    00A9 98AA      CBI	0x15,2
(0060) // RW=0;
(0061)  PORTA=lcddata;
    00AA BB4B      OUT	0x1B,R20
(0062) // E=0; 
(0063)  PORTC&=~E;
    00AB 98AC      CBI	0x15,4
(0064)  delay(100);
    00AC E604      LDI	R16,0x64
    00AD E010      LDI	R17,0
    00AE DFDE      RCALL	_delay
    00AF D026      RCALL	pop_gset1
    00B0 9508      RET
_writeline:
  str                  --> R20
    00B1 D021      RCALL	push_gset1
    00B2 01A8      MOVW	R20,R16
(0065) }
(0066) 
(0067) void writeline(uchar *str)
(0068) {
    00B3 C004      RJMP	0x00B8
(0069)  while(*str)writedata(*str++);
    00B4 01FA      MOVW	R30,R20
    00B5 9101      LD	R16,Z+
    00B6 01AF      MOVW	R20,R30
    00B7 DFE3      RCALL	_writedata
    00B8 01FA      MOVW	R30,R20
    00B9 8020      LDD	R2,Z+0
    00BA 2022      TST	R2
    00BB F7C1      BNE	0x00B4
    00BC D019      RCALL	pop_gset1
    00BD 9508      RET
(0070) }
(0071) 
(0072) ///////////////////////////////////
(0073) void initlcd()
(0074) {
(0075) 
(0076)  writecom(0x01);	//清屏
_initlcd:
    00BE E001      LDI	R16,1
    00BF DFE6      RCALL	_writecom
(0077)  writecom(0x38);	//功能设置
    00C0 E308      LDI	R16,0x38
    00C1 DFE4      RCALL	_writecom
(0078)  writecom(0x0f);	//显示开关控制
    00C2 E00F      LDI	R16,0xF
    00C3 DFE2      RCALL	_writecom
(0079)  writecom(0x06);	//设置输入模式
    00C4 E006      LDI	R16,6
    00C5 DFE0      RCALL	_writecom
(0080)  writecom(0x01);	//清屏
    00C6 E001      LDI	R16,1
    00C7 DFDE      RCALL	_writecom
(0081)  writecom(0x80);	//回车
FILE: <library>
    00C8 E800      LDI	R16,0x80
    00C9 DFDC      RCALL	_writecom
    00CA 9508      RET
push_gset5:
    00CB 92FA      ST	R15,-Y
    00CC 92EA      ST	R14,-Y
push_gset4:
    00CD 92DA      ST	R13,-Y
    00CE 92CA      ST	R12,-Y
push_gset3:
    00CF 92BA      ST	R11,-Y
    00D0 92AA      ST	R10,-Y
push_gset2:
    00D1 937A      ST	R23,-Y
    00D2 936A      ST	R22,-Y
push_gset1:
    00D3 935A      ST	R21,-Y
    00D4 934A      ST	R20,-Y
    00D5 9508      RET
pop_gset1:
    00D6 E0E1      LDI	R30,1
pop:
    00D7 9149      LD	R20,Y+
    00D8 9159      LD	R21,Y+
    00D9 FDE0      SBRC	R30,0
    00DA 9508      RET
    00DB 9169      LD	R22,Y+
    00DC 9179      LD	R23,Y+
    00DD FDE1      SBRC	R30,1
    00DE 9508      RET
    00DF 90A9      LD	R10,Y+
    00E0 90B9      LD	R11,Y+
    00E1 FDE2      SBRC	R30,2
    00E2 9508      RET
    00E3 90C9      LD	R12,Y+
    00E4 90D9      LD	R13,Y+
    00E5 FDE3      SBRC	R30,3
    00E6 9508      RET
    00E7 90E9      LD	R14,Y+
    00E8 90F9      LD	R15,Y+
    00E9 9508      RET

⌨️ 快捷键说明

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