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

📄 test.lst

📁 ATmega16应用例子
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
    002A E5CF      LDI	R28,0x5F
    002B E0D4      LDI	R29,4
    002C BFCD      OUT	0x3D,R28
    002D BFDE      OUT	0x3E,R29
    002E 51C0      SUBI	R28,0x10
    002F 40D0      SBCI	R29,0
    0030 EA0A      LDI	R16,0xAA
    0031 8308      STD	Y+0,R16
    0032 2400      CLR	R0
    0033 E6E0      LDI	R30,0x60
    0034 E0F0      LDI	R31,0
    0035 E010      LDI	R17,0
    0036 36E0      CPI	R30,0x60
    0037 07F1      CPC	R31,R17
    0038 F011      BEQ	0x003B
    0039 9201      ST	R0,Z+
    003A CFFB      RJMP	0x0036
    003B 8300      STD	Z+0,R16
    003C E5E4      LDI	R30,0x54
    003D E0F0      LDI	R31,0
    003E E6A0      LDI	R26,0x60
    003F E0B0      LDI	R27,0
    0040 E010      LDI	R17,0
    0041 35E4      CPI	R30,0x54
    0042 07F1      CPC	R31,R17
    0043 F021      BEQ	0x0048
    0044 95C8      LPM
    0045 9631      ADIW	R30,1
    0046 920D      ST	R0,X+
    0047 CFF9      RJMP	0x0041
    0048 940E00D3  CALL	_main
_exit:
    004A CFFF      RJMP	_exit
FILE: E:\WaveShare\微雪电子CD1\开发板试验器\SD系列\M16SD\试验教程\外围模块相关试验\NOKIA3~1\Nokia3510i\test\test.c
(0001) //ICC-AVR application builder : 2005-4-16 21:20:40
(0002) // Target : M8
(0003) // Crystal: 8.0000Mhz
(0004) 
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007) 
(0008) #define csl asm("cbi 0x18,0") //PB0
(0009) #define csh asm("sbi 0x18,0")
(0010) 
(0011) #define restl asm("cbi 0x12,1") //PB4
(0012) #define resth asm("sbi 0x12,1")
(0013) 
(0014) #define sclkl asm("cbi 0x18,7") //PB5
(0015) #define sclkh asm("sbi 0x18,7")
(0016) 
(0017) #define sdatal asm("cbi 0x18,5") //PB3
(0018) #define sdatah asm("sbi 0x18,5")
(0019) #define CS      3 
(0020) #define SCLK    7 
(0021) #define SDATA   5 
(0022) #define RESET   2 
(0023) 
(0024) #define CMD     0 
(0025) #define DATA    1 
(0026) 
(0027) void port_init(void)
(0028) {
(0029)  PORTB = 0xFF;
_port_init:
    004B EF8F      LDI	R24,0xFF
    004C BB88      OUT	0x18,R24
(0030)  DDRB  = 0x00;
    004D 2422      CLR	R2
    004E BA27      OUT	0x17,R2
(0031)  PORTC = 0x7F; //m103 output only
    004F E78F      LDI	R24,0x7F
    0050 BB85      OUT	0x15,R24
(0032)  DDRC  = 0x00;
    0051 BA24      OUT	0x14,R2
(0033)  PORTD = 0xFF;
    0052 EF8F      LDI	R24,0xFF
    0053 BB82      OUT	0x12,R24
(0034)  DDRD  = 0x00;
    0054 BA21      OUT	0x11,R2
    0055 9508      RET
(0035) }
(0036) 
(0037) //call this routine to initialise all peripherals
(0038) void init_devices(void)
(0039) {
(0040)  //stop errant interrupts until set up
(0041)  //CLI(); //disable all interrupts
(0042)  port_init();
_init_devices:
    0056 DFF4      RCALL	_port_init
(0043) 
(0044)  MCUCR = 0x00;
    0057 2422      CLR	R2
    0058 BE25      OUT	0x35,R2
(0045)  GICR  = 0x00;
    0059 BE2B      OUT	0x3B,R2
(0046)  TIMSK = 0x00; //timer interrupt sources
    005A BE29      OUT	0x39,R2
    005B 9508      RET
_delay5ms:
  i                    --> Y+0
    005C 9722      SBIW	R28,2
(0047)  //SEI(); //re-enable interrupts
(0048)  //all peripherals are now initialised
(0049) }
(0050) 
(0051) //
(0052) //ICC-AVR application builder : 2005-4-16 21:20:40
(0053) // Target : M8
(0054) // Crystal: 8.0000Mhz
(0055) 
(0056) 
(0057)  
(0058) 
(0059) void delay5ms(void) { 
(0060)    volatile int i; 
(0061)    for(i=0; i<2200; i++); 
    005D 2422      CLR	R2
    005E 2433      CLR	R3
    005F 8239      STD	Y+1,R3
    0060 8228      STD	Y+0,R2
    0061 8188      LDD	R24,Y+0
    0062 8199      LDD	R25,Y+1
    0063 9601      ADIW	R24,1
    0064 8399      STD	Y+1,R25
    0065 8388      STD	Y+0,R24
    0066 3988      CPI	R24,0x98
    0067 E0E8      LDI	R30,0x8
    0068 079E      CPC	R25,R30
    0069 F3BC      BLT	0x0061
    006A 9622      ADIW	R28,2
    006B 9508      RET
(0062) } 
(0063) 
(0064) //----------------------------
(0065) //发送指令或数据       硬件SPI
(0066) //速度快,没有刷屏现象
(0067) //----------------------------
(0068) void send(unsigned char myData,unsigned char cd)
(0069) {
(0070) if(cd==DATA)
_send:
  cd                   --> R18
  myData               --> R16
    006C 3021      CPI	R18,1
    006D F429      BNE	0x0073
(0071) {
(0072) 	csl;
    006E 98C0      CBI	0x18,0
(0073) 	sclkl;
    006F 98C7      CBI	0x18,7
(0074) 	sdatah;
    0070 9AC5      SBI	0x18,5
(0075) 	sclkh; 
    0071 9AC7      SBI	0x18,7
(0076) }
    0072 C004      RJMP	0x0077
(0077) else
(0078) {
(0079) 	csl;
    0073 98C0      CBI	0x18,0
(0080) 
(0081) 	sclkl;
    0074 98C7      CBI	0x18,7
(0082) 	sdatal;
    0075 98C5      CBI	0x18,5
(0083) 	sclkh;
    0076 9AC7      SBI	0x18,7
(0084) 
(0085) }	
(0086) 	 SPCR = 0x50; //setup SPI
    0077 E580      LDI	R24,0x50
    0078 B98D      OUT	0x0D,R24
(0087) 
(0088) 	 SPDR = myData;
    0079 B90F      OUT	0x0F,R16
(0089) 
(0090) 	  while(!(SPSR & 0x80));
    007A 9B77      SBIS	0x0E,7
    007B CFFE      RJMP	0x007A
(0091) 	
(0092) 	  csh;
    007C 9AC0      SBI	0x18,0
(0093) 	  SPCR = 0x00;
    007D 2422      CLR	R2
    007E B82D      OUT	0x0D,R2
    007F 9508      RET
(0094) 
(0095) 	
(0096) }
(0097) 
(0098) //----------------------------
(0099) //发送指令或数据   软件模拟SPI
(0100) //速度较慢,有刷屏现象
(0101) //----------------------------
(0102) void send2(char data, char cd)
(0103) { 
(0104)    // CS auf Low setzen 
(0105)    PORTD &= ~(0x01 << CS); 
_send2:
  cd                   --> R18
  data                 --> R16
    0080 9893      CBI	0x12,3
(0106)     
(0107)    // Kommando oder Daten? 
(0108)    PORTB &= ~(0x01 << SCLK); 
    0081 98C7      CBI	0x18,7
(0109)    if(cd == CMD) 
    0082 2322      TST	R18
    0083 F411      BNE	0x0086
(0110)       PORTB &= ~(0x01 << SDATA); 
    0084 98C5      CBI	0x18,5
    0085 C001      RJMP	0x0087
(0111)    else 
(0112)       PORTB |= 0x01 << SDATA; 
    0086 9AC5      SBI	0x18,5
(0113)    PORTB |= 0x01 << SCLK; 
    0087 9AC7      SBI	0x18,7
(0114)     
(0115)    // 1. Bit (MSB) 
(0116)    PORTB &= ~(0x01 << SCLK); 
    0088 98C7      CBI	0x18,7
(0117)    if((data & 0x80) == 0x80) 
    0089 2F80      MOV	R24,R16
    008A 7880      ANDI	R24,0x80
    008B 3880      CPI	R24,0x80
    008C F411      BNE	0x008F
(0118)       PORTB |= 0x01 << SDATA; 
    008D 9AC5      SBI	0x18,5
    008E C001      RJMP	0x0090
(0119)    else 
(0120)       PORTB &= ~(0x01 << SDATA); 
    008F 98C5      CBI	0x18,5
(0121)    PORTB |= 0x01 << SCLK; 
    0090 9AC7      SBI	0x18,7
(0122)     
(0123)    // 2. Bit (MSB) 
(0124)    PORTB &= ~(0x01 << SCLK); 
    0091 98C7      CBI	0x18,7
(0125)    if((data & 0x40) == 0x40) 
    0092 2F80      MOV	R24,R16
    0093 7480      ANDI	R24,0x40
    0094 3480      CPI	R24,0x40
    0095 F411      BNE	0x0098
(0126)       PORTB |= 0x01 << SDATA; 
    0096 9AC5      SBI	0x18,5
    0097 C001      RJMP	0x0099
(0127)    else 
(0128)       PORTB &= ~(0x01 << SDATA); 
    0098 98C5      CBI	0x18,5
(0129)    PORTB |= 0x01 << SCLK; 
    0099 9AC7      SBI	0x18,7
(0130)     
(0131)    // 3. Bit (MSB) 
(0132)    PORTB &= ~(0x01 << SCLK); 
    009A 98C7      CBI	0x18,7
(0133)    if((data & 0x20) == 0x20) 
    009B 2F80      MOV	R24,R16
    009C 7280      ANDI	R24,0x20
    009D 3280      CPI	R24,0x20
    009E F411      BNE	0x00A1
(0134)       PORTB |= 0x01 << SDATA; 
    009F 9AC5      SBI	0x18,5
    00A0 C001      RJMP	0x00A2
(0135)    else 
(0136)       PORTB &= ~(0x01 << SDATA); 
    00A1 98C5      CBI	0x18,5
(0137)    PORTB |= 0x01 << SCLK; 
    00A2 9AC7      SBI	0x18,7
(0138)     
(0139)    // 4. Bit (MSB) 
(0140)    PORTB &= ~(0x01 << SCLK); 
    00A3 98C7      CBI	0x18,7
(0141)    if((data & 0x10) == 0x10) 
    00A4 2F80      MOV	R24,R16
    00A5 7180      ANDI	R24,0x10
    00A6 3180      CPI	R24,0x10
    00A7 F411      BNE	0x00AA
(0142)       PORTB |= 0x01 << SDATA; 
    00A8 9AC5      SBI	0x18,5
    00A9 C001      RJMP	0x00AB
(0143)    else 
(0144)       PORTB &= ~(0x01 << SDATA); 
    00AA 98C5      CBI	0x18,5
(0145)    PORTB |= 0x01 << SCLK; 
    00AB 9AC7      SBI	0x18,7
(0146)     
(0147)    // 5. Bit (MSB) 
(0148)    PORTB &= ~(0x01 << SCLK); 
    00AC 98C7      CBI	0x18,7
(0149)    if((data & 0x08) == 0x08) 
    00AD 2F80      MOV	R24,R16
    00AE 7088      ANDI	R24,0x8
    00AF 3088      CPI	R24,0x8
    00B0 F411      BNE	0x00B3
(0150)       PORTB |= 0x01 << SDATA; 
    00B1 9AC5      SBI	0x18,5
    00B2 C001      RJMP	0x00B4
(0151)    else 
(0152)       PORTB &= ~(0x01 << SDATA); 
    00B3 98C5      CBI	0x18,5
(0153)    PORTB |= 0x01 << SCLK; 
    00B4 9AC7      SBI	0x18,7
(0154)     
(0155)    // 6. Bit (MSB) 
(0156)    PORTB &= ~(0x01 << SCLK); 
    00B5 98C7      CBI	0x18,7
(0157)    if((data & 0x04) == 0x04) 
    00B6 2F80      MOV	R24,R16
    00B7 7084      ANDI	R24,4
    00B8 3084      CPI	R24,4
    00B9 F411      BNE	0x00BC
(0158)       PORTB |= 0x01 << SDATA; 
    00BA 9AC5      SBI	0x18,5
    00BB C001      RJMP	0x00BD
(0159)    else 
(0160)       PORTB &= ~(0x01 << SDATA); 
    00BC 98C5      CBI	0x18,5
(0161)    PORTB |= 0x01 << SCLK; 
    00BD 9AC7      SBI	0x18,7
(0162)     
(0163)    // 7. Bit (MSB) 
(0164)    PORTB &= ~(0x01 << SCLK); 
    00BE 98C7      CBI	0x18,7
(0165)    if((data & 0x02) == 0x02) 
    00BF 2F80      MOV	R24,R16
    00C0 7082      ANDI	R24,2
    00C1 3082      CPI	R24,2
    00C2 F411      BNE	0x00C5
(0166)       PORTB |= 0x01 << SDATA; 
    00C3 9AC5      SBI	0x18,5
    00C4 C001      RJMP	0x00C6
(0167)    else 
(0168)       PORTB &= ~(0x01 << SDATA); 
    00C5 98C5      CBI	0x18,5
(0169)    PORTB |= 0x01 << SCLK; 
    00C6 9AC7      SBI	0x18,7
(0170)     
(0171)    // 8. Bit (MSB) 
(0172)    PORTB &= ~(0x01 << SCLK); 
    00C7 98C7      CBI	0x18,7
(0173)    if((data & 0x01) == 0x01) 
    00C8 2F80      MOV	R24,R16
    00C9 7081      ANDI	R24,1
    00CA 3081      CPI	R24,1
    00CB F411      BNE	0x00CE
(0174)       PORTB |= 0x01 << SDATA; 
    00CC 9AC5      SBI	0x18,5
    00CD C001      RJMP	0x00CF
(0175)    else 
(0176)       PORTB &= ~(0x01 << SDATA); 
    00CE 98C5      CBI	0x18,5
(0177)    PORTB |= 0x01 << SCLK; 
    00CF 9AC7      SBI	0x18,7
    00D0 9508      RET
(0178) } 
(0179) 
(0180) void cs(void) { 
(0181)    PORTD |= 0x01 << CS;   // CS wieder auf 1 
_cs:
    00D1 9A93      SBI	0x12,3
    00D2 9508      RET
(0182) } 
(0183) 
(0184) int main(void) { 
(0185)    int i; 
(0186)    char  s; 
(0187)      init_devices();
_main:
  s                    --> R22
  i                    --> R20
    00D3 DF82      RCALL	_init_devices
(0188)    DDRB = 0xFF;      // PortB = Output 
    00D4 EF8F      LDI	R24,0xFF
    00D5 BB87      OUT	0x17,R24
(0189)    DDRD = 0xff;
    00D6 BB81      OUT	0x11,R24
(0190)    // LCD Hardware Reset 
(0191)    PORTD &= ~(0x01 << 0); 
    00D7 9890      CBI	0x12,0
(0192)    delay5ms(); 
    00D8 DF83      RCALL	_delay5ms
(0193)    PORTD |= 0x01 << 0; 
    00D9 9A90      SBI	0x12,0
(0194)     
(0195)    PORTD |= 0x01 << CS; 
    00DA 9A93      SBI	0x12,3
(0196)    PORTB |= 0x01 << SCLK; 
    00DB 9AC7      SBI	0x18,7
(0197)    PORTB |= 0x01 << SDATA; 
    00DC 9AC5      SBI	0x18,5
(0198)     
(0199)    send(0x01, CMD);      // LCD Software Reset 
    00DD 2722      CLR	R18
    00DE E001      LDI	R16,1
    00DF DF8C      RCALL	_send
(0200)    cs(); 
    00E0 DFF0      RCALL	_cs
(0201)    delay5ms(); 
    00E1 DF7A      RCALL	_delay5ms
(0202)     
(0203)    send(0xC6, CMD);      // Initial Escape 
    00E2 2722      CLR	R18
    00E3 EC06      LDI	R16,0xC6
    00E4 DF87      RCALL	_send
(0204)    cs(); 
    00E5 DFEB      RCALL	_cs
(0205)     
(0206)    send(0xB9, CMD);      // Refresh set 
    00E6 2722      CLR	R18
    00E7 EB09      LDI	R16,0xB9
    00E8 DF83      RCALL	_send
(0207)    send(0x00, DATA); 
    00E9 E021      LDI	R18,1
    00EA 2700      CLR	R16
    00EB DF80      RCALL	_send
(0208)    cs(); 
    00EC DFE4      RCALL	_cs
(0209)     
(0210)    send(0xB6, CMD);      // Display Control 
    00ED 2722      CLR	R18
    00EE EB06      LDI	R16,0xB6
    00EF DF7C      RCALL	_send
(0211)    send(128, DATA); 
    00F0 E021      LDI	R18,1
    00F1 E800      LDI	R16,0x80
    00F2 DF79      RCALL	_send
(0212)    send(128, DATA); 
    00F3 E021      LDI	R18,1
    00F4 E800      LDI	R16,0x80
    00F5 DF76      RCALL	_send
(0213)    send(129, DATA); 
    00F6 E021      LDI	R18,1
    00F7 E801      LDI	R16,0x81
    00F8 DF73      RCALL	_send
(0214)    send(84, DATA); 
    00F9 E021      LDI	R18,1
    00FA E504      LDI	R16,0x54
    00FB DF70      RCALL	_send
(0215)    send(69, DATA); 
    00FC E021      LDI	R18,1
    00FD E405      LDI	R16,0x45
    00FE DF6D      RCALL	_send
(0216)    send(82, DATA); 
    00FF E021      LDI	R18,1
    0100 E502      LDI	R16,0x52
    0101 DF6A      RCALL	_send
(0217)    send(67, DATA); 
    0102 E021      LDI	R18,1
    0103 E403      LDI	R16,0x43
    0104 DF67      RCALL	_send
(0218)    cs(); 
    0105 DFCB      RCALL	_cs
(0219)     
(0220)    send(0xB3, CMD);      // Gray Scale Position 
    0106 2722      CLR	R18
    0107 EB03      LDI	R16,0xB3
    0108 DF63      RCALL	_send
(0221)    send(1, DATA); 
    0109 E021      LDI	R18,1
    010A E001      LDI	R16,1
    010B DF60      RCALL	_send
(0222)    send(2, DATA); 
    010C E021      LDI	R18,1

⌨️ 快捷键说明

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