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

📄 ac15-1.lst

📁 AVR学习资料
💻 LST
📖 第 1 页 / 共 3 页
字号:
__start:
__text_start:
    0033 E5CF      LDI	R28,0x5F
    0034 E0D4      LDI	R29,4
    0035 BFCD      OUT	0x3D,R28
    0036 BFDE      OUT	0x3E,R29
    0037 51C0      SUBI	R28,0x10
    0038 40D0      SBCI	R29,0
    0039 EA0A      LDI	R16,0xAA
    003A 8308      STD	Y+0,R16
    003B 2400      CLR	R0
    003C E6E0      LDI	R30,0x60
    003D E0F0      LDI	R31,0
    003E E010      LDI	R17,0
    003F 36E2      CPI	R30,0x62
    0040 07F1      CPC	R31,R17
    0041 F011      BEQ	0x0044
    0042 9201      ST	R0,Z+
    0043 CFFB      RJMP	0x003F
    0044 8300      STD	Z+0,R16
    0045 E6E5      LDI	R30,0x65
    0046 E0F0      LDI	R31,0
    0047 E6A0      LDI	R26,0x60
    0048 E0B0      LDI	R27,0
    0049 E010      LDI	R17,0
    004A 36E5      CPI	R30,0x65
    004B 07F1      CPC	R31,R17
    004C F021      BEQ	0x0051
    004D 95C8      LPM
    004E 9631      ADIW	R30,1
    004F 920D      ST	R0,X+
    0050 CFF9      RJMP	0x004A
    0051 940E0255  CALL	_main
_exit:
    0053 CFFF      RJMP	_exit
_ePutstr:
  l                    --> R20
  i                    --> R22
  ptr                  --> R10
  y                    --> R12
  x                    --> R14
    0054 940E0345  CALL	push_gset5
    0056 2EC2      MOV	R12,R18
    0057 2EE0      MOV	R14,R16
    0058 9721      SBIW	R28,1
    0059 84AB      LDD	R10,Y+11
    005A 84BC      LDD	R11,Y+12
FILE: d:\MYDOCU~1\ac15-1\ac15-1.c
(0001) #include <iom16v.h>			
(0002) #include <macros.h>
(0003) //-----------------------------------------------
(0004) #define uchar unsigned char	
(0005) #define uint unsigned int
(0006) //-------------------引脚电平的宏定义---------
(0007) #define LCM_RS_1 PORTB|=BIT(PB0)	
(0008) #define LCM_RS_0 PORTB&=~BIT(PB0) 
(0009) #define LCM_RW_1 PORTB|=BIT(PB1)	
(0010) #define LCM_RW_0 PORTB&=~BIT(PB1) 
(0011) #define LCM_EN_1 PORTB|=BIT(PB2)	
(0012) #define LCM_EN_0 PORTB&=~BIT(PB2)  
(0013) #define SCL_1 PORTC|=BIT(PC0)
(0014) #define SCL_0 PORTC&=~BIT(PC0)
(0015) #define SDA_1 PORTC|=BIT(PC1)
(0016) #define SDA_0 PORTC&=~BIT(PC1)
(0017) //======================================
(0018) #define PIN_SDA (PINC&0x02)
(0019) #define DataPort PORTA		
(0020) #define Busy 0x80			
(0021) #define xtal 8   			
(0022) #define Some_NOP();  _NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();
(0023) //=====================================
(0024) const uchar str0[]={"Write : "};//待显字符串
(0025) const uchar str1[]={"Read : "};//待显字符串
(0026) //========函数声明=========
(0027) void Delay_1ms(void);
(0028) void Delay_nms(uint n);
(0029) void WaitForEnable(void);
(0030) void LcdWriteData(uchar W);
(0031) void LcdWriteCommand(uchar CMD,uchar Attribc);
(0032) void InitLcd(void);
(0033) void Display(uchar dd);
(0034) void DisplayOneChar(uchar x,uchar y,uchar Wdata);
(0035) void ePutstr(uchar x,uchar y,uchar const *ptr);
(0036) void port_init(void);
(0037) //**********************显示指定座标的一串字符子函数**************
(0038) void ePutstr(uchar x,uchar y,uchar const *ptr)
(0039) {
(0040) uchar i,l=0;
    005B 2744      CLR	R20
    005C C001      RJMP	0x005E
(0041) 	while(ptr[l]>31){l++;}
    005D 9543      INC	R20
    005E 2FE4      MOV	R30,R20
    005F 27FF      CLR	R31
    0060 0DEA      ADD	R30,R10
    0061 1DFB      ADC	R31,R11
    0062 91E4      LPM	R30,0(Z)
    0063 E18F      LDI	R24,0x1F
    0064 178E      CP	R24,R30
    0065 F3B8      BCS	0x005D
(0042) 	for(i=0;i<l;i++){
    0066 2766      CLR	R22
    0067 C014      RJMP	0x007C
(0043) 	DisplayOneChar(x++,y,ptr[i]);
    0068 2FE6      MOV	R30,R22
    0069 27FF      CLR	R31
    006A 0DEA      ADD	R30,R10
    006B 1DFB      ADC	R31,R11
    006C 91E4      LPM	R30,0(Z)
    006D 83E8      STD	Y+0,R30
    006E 2D2C      MOV	R18,R12
    006F 2C2E      MOV	R2,R14
    0070 2D82      MOV	R24,R2
    0071 5F8F      SUBI	R24,0xFF
    0072 2EE8      MOV	R14,R24
    0073 2D02      MOV	R16,R2
    0074 D01E      RCALL	_DisplayOneChar
(0044) 	if(x==16){
    0075 2D8E      MOV	R24,R14
    0076 3180      CPI	R24,0x10
    0077 F419      BNE	0x007B
(0045) 		x=0;y^=1;
    0078 24EE      CLR	R14
    0079 E081      LDI	R24,1
    007A 26C8      EOR	R12,R24
    007B 9563      INC	R22
    007C 1764      CP	R22,R20
    007D F350      BCS	0x0068
    007E 9621      ADIW	R28,1
    007F 940E0342  CALL	pop_gset5
    0081 9508      RET
_LocateXY:
  temp                 --> R20
  posy                 --> R22
  posx                 --> R10
    0082 940E0349  CALL	push_gset3
    0084 2F62      MOV	R22,R18
    0085 2EA0      MOV	R10,R16
(0046) 	}
(0047)   }
(0048) }
(0049) //*******************显示光标定位子函数******************
(0050) void LocateXY(char posx,char posy)
(0051) {
(0052) uchar temp;
(0053) 	temp&=0x7f;
    0086 774F      ANDI	R20,0x7F
(0054) 	temp=posx&0x0f;
    0087 2D4A      MOV	R20,R10
    0088 704F      ANDI	R20,0xF
(0055) 	posy&=0x01;
    0089 7061      ANDI	R22,1
(0056) 	if(posy)temp|=0x40;
    008A F009      BEQ	0x008C
    008B 6440      ORI	R20,0x40
(0057) 	temp|=0x80;
    008C 6840      ORI	R20,0x80
(0058) 	LcdWriteCommand(temp,0);
    008D 2722      CLR	R18
    008E 2F04      MOV	R16,R20
    008F D031      RCALL	_LcdWriteCommand
    0090 940E033F  CALL	pop_gset3
    0092 9508      RET
_DisplayOneChar:
  Wdata                --> Y+4
  y                    --> R22
  x                    --> R20
    0093 940E034B  CALL	push_gset2
    0095 2F62      MOV	R22,R18
    0096 2F40      MOV	R20,R16
(0059) }
(0060) //*******************显示指定座标的一个字符子函数*******************
(0061) void DisplayOneChar(uchar x,uchar y,uchar Wdata)
(0062) {
(0063) LocateXY(x,y);
    0097 2F26      MOV	R18,R22
    0098 2F04      MOV	R16,R20
    0099 DFE8      RCALL	_LocateXY
(0064) LcdWriteData(Wdata);
    009A 810C      LDD	R16,Y+4
    009B D038      RCALL	_LcdWriteData
    009C 940E033C  CALL	pop_gset2
    009E 9508      RET
(0065) }
(0066) //*******************LCD初始化子函数*********************
(0067) void InitLcd(void) 
(0068) {
(0069) LcdWriteCommand(0x38,0); 
_InitLcd:
    009F 2722      CLR	R18
    00A0 E308      LDI	R16,0x38
    00A1 D01F      RCALL	_LcdWriteCommand
(0070) Delay_nms(5);
    00A2 E005      LDI	R16,5
    00A3 E010      LDI	R17,0
    00A4 D05C      RCALL	_Delay_nms
(0071) LcdWriteCommand(0x38,0); 
    00A5 2722      CLR	R18
    00A6 E308      LDI	R16,0x38
    00A7 D019      RCALL	_LcdWriteCommand
(0072) Delay_nms(5);
    00A8 E005      LDI	R16,5
    00A9 E010      LDI	R17,0
    00AA D056      RCALL	_Delay_nms
(0073) LcdWriteCommand(0x38,0); 
    00AB 2722      CLR	R18
    00AC E308      LDI	R16,0x38
    00AD D013      RCALL	_LcdWriteCommand
(0074) Delay_nms(5);
    00AE E005      LDI	R16,5
    00AF E010      LDI	R17,0
    00B0 D050      RCALL	_Delay_nms
(0075) LcdWriteCommand(0x38,1); 
    00B1 E021      LDI	R18,1
    00B2 E308      LDI	R16,0x38
    00B3 D00D      RCALL	_LcdWriteCommand
(0076) LcdWriteCommand(0x08,1); 
    00B4 E021      LDI	R18,1
    00B5 E008      LDI	R16,0x8
    00B6 D00A      RCALL	_LcdWriteCommand
(0077) LcdWriteCommand(0x01,1); 
    00B7 E021      LDI	R18,1
    00B8 E001      LDI	R16,1
    00B9 D007      RCALL	_LcdWriteCommand
(0078) LcdWriteCommand(0x06,1); 
    00BA E021      LDI	R18,1
    00BB E006      LDI	R16,6
    00BC D004      RCALL	_LcdWriteCommand
(0079) LcdWriteCommand(0x0c,1); 
    00BD E021      LDI	R18,1
    00BE E00C      LDI	R16,0xC
    00BF D001      RCALL	_LcdWriteCommand
    00C0 9508      RET
_LcdWriteCommand:
  Attribc              --> R22
  CMD                  --> R20
    00C1 940E034B  CALL	push_gset2
    00C3 2F62      MOV	R22,R18
    00C4 2F40      MOV	R20,R16
(0080) }
(0081) //********************写命令到LCM子函数********************
(0082) void LcdWriteCommand(uchar CMD,uchar Attribc)
(0083) {
(0084) if(Attribc)WaitForEnable();
    00C5 2366      TST	R22
    00C6 F009      BEQ	0x00C8
    00C7 D01C      RCALL	_WaitForEnable
(0085) LCM_RS_0;LCM_RW_0;_NOP();
    00C8 98C0      CBI	0x18,0
    00C9 98C1      CBI	0x18,1
    00CA 0000      NOP
(0086) DataPort=CMD;_NOP();
    00CB BB4B      OUT	0x1B,R20
    00CC 0000      NOP
(0087) LCM_EN_1;_NOP();_NOP();LCM_EN_0;
    00CD 9AC2      SBI	0x18,2
    00CE 0000      NOP
    00CF 0000      NOP
    00D0 98C2      CBI	0x18,2
    00D1 940E033C  CALL	pop_gset2
    00D3 9508      RET
_LcdWriteData:
  dataW                --> R20
    00D4 940E034D  CALL	push_gset1
    00D6 2F40      MOV	R20,R16
(0088) }
(0089) //*******************写数据到LCM子函数********************
(0090) void LcdWriteData(uchar dataW)
(0091) {
(0092) WaitForEnable();
    00D7 D00C      RCALL	_WaitForEnable
(0093) LCM_RS_1;LCM_RW_0;_NOP();
    00D8 9AC0      SBI	0x18,0
    00D9 98C1      CBI	0x18,1
    00DA 0000      NOP
(0094) DataPort=dataW;_NOP();
    00DB BB4B      OUT	0x1B,R20
    00DC 0000      NOP
(0095) LCM_EN_1;_NOP();_NOP();LCM_EN_0;
    00DD 9AC2      SBI	0x18,2
    00DE 0000      NOP
    00DF 0000      NOP
    00E0 98C2      CBI	0x18,2
    00E1 940E0350  CALL	pop_gset1
    00E3 9508      RET
(0096) }
(0097) //*******************检测LCD忙信号子函数*********************
(0098) void WaitForEnable(void)
(0099) {
(0100) uchar val;
(0101) DataPort=0xff;
_WaitForEnable:
  val                  --> R16
    00E4 EF8F      LDI	R24,0xFF
    00E5 BB8B      OUT	0x1B,R24
(0102) LCM_RS_0;LCM_RW_1;_NOP();
    00E6 98C0      CBI	0x18,0
    00E7 9AC1      SBI	0x18,1
    00E8 0000      NOP
(0103) LCM_EN_1;_NOP();_NOP();
    00E9 9AC2      SBI	0x18,2
    00EA 0000      NOP
    00EB 0000      NOP
(0104) DDRA=0x00;
    00EC 2422      CLR	R2
    00ED BA2A      OUT	0x1A,R2
(0105) val=PINA;
    00EE B309      IN	R16,0x19
    00EF C001      RJMP	0x00F1
(0106) while(val&Busy)val=PINA;
    00F0 B309      IN	R16,0x19
    00F1 FD07      SBRC	R16,7
    00F2 CFFD      RJMP	0x00F0
(0107) LCM_EN_0;
    00F3 98C2      CBI	0x18,2
(0108) DDRA=0xff;
    00F4 EF8F      LDI	R24,0xFF
    00F5 BB8A      OUT	0x1A,R24
    00F6 9508      RET
(0109) }
(0110) //****************************************
(0111) void Delay_1ms(void)		//1mS延时子函数
(0112) { uint i;
(0113)  for(i=1;i<(uint)(xtal*143-2);i++)
_Delay_1ms:
  i                    --> R16
    00F7 E001      LDI	R16,1
    00F8 E010      LDI	R17,0
    00F9 C002      RJMP	0x00FC
    00FA 5F0F      SUBI	R16,0xFF
    00FB 4F1F      SBCI	R17,0xFF
    00FC 3706      CPI	R16,0x76
    00FD E0E4      LDI	R30,4
    00FE 071E      CPC	R17,R30
    00FF F3D0      BCS	0x00FA
    0100 9508      RET
_Delay_nms:
  i                    --> R20
  n                    --> R22
    0101 940E034B  CALL	push_gset2
    0103 01B8      MOVW	R22,R16
(0114)     ;
(0115) }
(0116) //====================================
(0117) void Delay_nms(uint n)		//n*1mS延时子函数
(0118) {
(0119)  uint i=0;
    0104 2744      CLR	R20
    0105 2755      CLR	R21
    0106 C003      RJMP	0x010A
(0120)    while(i<n)
(0121)    {Delay_1ms();
    0107 DFEF      RCALL	_Delay_1ms
(0122)     i++;
    0108 5F4F      SUBI	R20,0xFF
    0109 4F5F      SBCI	R21,0xFF
    010A 1746      CP	R20,R22
    010B 0757      CPC	R21,R23
    010C F3D0      BCS	0x0107
    010D 940E033C  CALL	pop_gset2
    010F 9508      RET
(0123)    }
(0124) }
(0125) /*****************端口初始化********************/
(0126) void port_init(void)
(0127) {
(0128)  PORTA = 0x00;
_port_init:
    0110 2422      CLR	R2
    0111 BA2B      OUT	0x1B,R2
(0129)  DDRA  = 0xFF;
    0112 EF8F      LDI	R24,0xFF
    0113 BB8A      OUT	0x1A,R24
(0130)  PORTB = 0x00;
    0114 BA28      OUT	0x18,R2
(0131)  DDRB  = 0xFF;
    0115 BB87      OUT	0x17,R24
(0132)  PORTC = 0x00; 
    0116 BA25      OUT	0x15,R2
(0133)  DDRC  = 0x03;
    0117 E083      LDI	R24,3

⌨️ 快捷键说明

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