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

📄 text1.lst

📁 ATmega16-ad1602
💻 LST
📖 第 1 页 / 共 4 页
字号:
Interrupt Vectors
    00000 940C 003B JMP	__text_start|__start
    0001C 940C 021E JMP	_adc_isr

Program Code (text area)
__text_start|__start:
    0003B E5CF      LDI	R28,0x5F
    0003C E0D4      LDI	R29,4
    0003D BFCD      OUT	0x3D,R28
    0003E BFDE      OUT	0x3E,R29
    0003F 51C0      SUBI	R28,0x10
    00040 40D0      SBCI	R29,0
    00041 EA0A      LDI	R16,0xAA
    00042 8308      ST	Y,R16
    00043 2400      CLR	R0
    00044 E7EA      LDI	R30,0x7A
    00045 E0F0      LDI	R31,0
    00046 E010      LDI	R17,0
    00047 38EE      CPI	R30,0x8E
    00048 07F1      CPC	R31,R17
    00049 F011      BEQ	0x004C
    0004A 9201      ST	Z+,R0
    0004B CFFB      RJMP	0x0047
    0004C 8300      ST	Z,R16
    0004D E5EC      LDI	R30,0x5C
    0004E E0F0      LDI	R31,0
    0004F E6A0      LDI	R26,0x60
    00050 E0B0      LDI	R27,0
    00051 E010      LDI	R17,0
    00052 E000      LDI	R16,0
    00053 BF0B      OUT	0x3B,R16
    00054 37E6      CPI	R30,0x76
    00055 07F1      CPC	R31,R17
    00056 F021      BEQ	0x005B
    00057 95C8      LPM
    00058 9631      ADIW	R30,1
    00059 920D      ST	X+,R0
    0005A CFF9      RJMP	0x0054
    0005B 940E 005E CALL	_main
_exit:
    0005D CFFF      RJMP	_exit
_main:
  test                 --> R20
    0005E 9722      SBIW	R28,2
FILE: F:\file\数控电源3\ad_da\cfile\main.c
(0001) #include "includes.h"
(0002) void main()
(0003) {   
(0004) 	unsigned char *test = "The Voltage is: ";
    0005F E640      LDI	R20,0x60
    00060 E050      LDI	R21,0
(0005) 	//unsigned char *test1 = "zhm";
(0006)    // unsigned char *value = "0.000 V";	
(0007) 	Init_LCD();
    00061 940E 00F9 CALL	_Init_LCD
(0008)     init_adc();
    00063 940E 0212 CALL	_init_adc
(0009)     LCD_DisplayString(1,1,test);	      
    00065 8359      STD	Y+1,R21
    00066 8348      ST	Y,R20
    00067 E021      LDI	R18,1
    00068 E001      LDI	R16,1
    00069 940E 0126 CALL	_LCD_DisplayString
(0010)    
(0011) 	delay_nms(2000);
    0006B ED00      LDI	R16,0xD0
    0006C E017      LDI	R17,7
    0006D 940E 0189 CALL	_delay_nms
(0012) 	 SREG |= (1<<7);	
    0006F 9478      BSET	7
    00070 9622      ADIW	R28,2
    00071 9508      RET
FILE: F:\file\数控电源3\ad_da\cfile\LCD.c
(0001) // ************************************************
(0002) // *** 采用4位数据线的1602液晶驱动程序 ***
(0003) // *** LCD.C ***
(0004) // ************************************************
(0005) #define ENABLE_BIT_DEFINITIONS
(0006) #define LCD_C
(0007) #include "includes.h"
(0008) // ***** Define I/O pins ***** //
(0009) #define BIT7 0x80
(0010) #define BIT6 0x40
(0011) #define BIT5 0x20
(0012) #define BIT4 0x10
(0013) #define BIT3 0x08
(0014) #define BIT2 0x04
(0015) #define BIT1 0x02
(0016) #define BIT0 0x01
(0017) // *** Set port for LCD Data Bus 8 bit mode *** //
(0018) #define LCD_OP_PORT PORTB
(0019) #define LCD_IP_PORT PINB
(0020) #define LCD_DIR_PORT DDRB
(0021) // *** Set LCD Enable Port and Bit values *** //
(0022) //#define LCD_EN LCD_OP_PORT.2
(0023) // *** Set LCD Register Select Port and Bit values *** //
(0024) //#define LCD_RS LCD_OP_PORT.0
(0025) // *** Set LCD Read/Write Port and Bit values *** //
(0026) //#define LCD_RW LCD_OP_PORT.1
(0027) /****************************************************************/
(0028)  
(0029)  #define LCD_EN  (1 << 2)     //引脚定义
(0030)  #define LCD_RS (1 << 0)
(0031)  #define LCD_RW (1 << 1)
(0032)  
(0033)  #define lcd_set_e()  (LCD_OP_PORT |= LCD_EN)   //置位与清零
(0034)  #define lcd_set_rs() (LCD_OP_PORT |= LCD_RS)
(0035)  #define lcd_set_rw() (LCD_OP_PORT |= LCD_RW)
(0036)  #define lcd_clear_e()  (LCD_OP_PORT &= ~LCD_EN)
(0037)  #define lcd_clear_rs() (LCD_OP_PORT &= ~LCD_RS)
(0038)  #define lcd_clear_rw() (LCD_OP_PORT &= ~LCD_RW)
(0039) /****************************************************************/
(0040) 
(0041) #define LCD_ON 0x0C
(0042) #define LCD_CURS_ON 0x0D
(0043) #define LCD_OFF 0x08
(0044) #define LCD_HOME 0x02
(0045) #define LCD_CLEAR 0x01
(0046) #define LCD_NEW_LINE 0xC0
(0047) #define LCD_FUNCTION_SET 0x28
(0048) #define LCD_MODE_SET 0x06
(0049) 
(0050) 
(0051) void LCD_INIT(void)
(0052) {
(0053) LCD_DIR_PORT = 0xff; // LCD port output
_LCD_INIT:
    00072 EF8F      LDI	R24,0xFF
    00073 BB87      OUT	0x17,R24
(0054) LCD_OP_PORT = 0x30; // Load high-data to port
    00074 E380      LDI	R24,0x30
    00075 BB88      OUT	0x18,R24
(0055) lcd_clear_rw(); // Set LCD to write
    00076 98C1      CBI	0x18,1
(0056) lcd_clear_rs(); // Set LCD to command
    00077 98C0      CBI	0x18,0
(0057) lcd_set_e(); // Write data to LCD
    00078 9AC2      SBI	0x18,2
(0058) asm("nop");
    00079 0000      NOP
(0059) asm("nop");
    0007A 0000      NOP
(0060) lcd_clear_e(); // Disable LCD
    0007B 98C2      CBI	0x18,2
(0061) delay_nus(40);
    0007C E208      LDI	R16,0x28
    0007D E010      LDI	R17,0
    0007E 940E 0170 CALL	_delay_nus
(0062) lcd_clear_rw() ; // Set LCD to write
    00080 98C1      CBI	0x18,1
(0063) lcd_clear_rs(); // Set LCD to command
    00081 98C0      CBI	0x18,0
(0064) lcd_set_e(); // Write data to LCD
    00082 9AC2      SBI	0x18,2
(0065) asm("nop");
    00083 0000      NOP
(0066) asm("nop");
    00084 0000      NOP
(0067) lcd_clear_e(); // Disable LCD
    00085 98C2      CBI	0x18,2
(0068) delay_nus(40);
    00086 E208      LDI	R16,0x28
    00087 E010      LDI	R17,0
    00088 940E 0170 CALL	_delay_nus
(0069) lcd_set_e(); // Write data to LCD
    0008A 9AC2      SBI	0x18,2
(0070) asm("nop");
    0008B 0000      NOP
(0071) asm("nop");
    0008C 0000      NOP
(0072) lcd_clear_e(); // Disable LCD
    0008D 98C2      CBI	0x18,2
(0073) delay_nus(40);
    0008E E208      LDI	R16,0x28
    0008F E010      LDI	R17,0
    00090 940E 0170 CALL	_delay_nus
(0074) LCD_OP_PORT = 0x20;
    00092 E280      LDI	R24,0x20
    00093 BB88      OUT	0x18,R24
(0075) lcd_set_e(); // Write data to LCD
    00094 9AC2      SBI	0x18,2
(0076) asm("nop");
    00095 0000      NOP
(0077) asm("nop");
    00096 0000      NOP
(0078) lcd_clear_e(); // Disable LCD
    00097 98C2      CBI	0x18,2
(0079) delay_nus(40);
    00098 E208      LDI	R16,0x28
    00099 E010      LDI	R17,0
    0009A 940C 0170 JMP	_delay_nus
_LCD_Busy:
  low                  --> R12
  high                 --> R10
  temp                 --> R20
    0009C 940E 02F1 CALL	push_xgset303C
(0080) }
(0081) //*****************************************************//
(0082) // This routine will return the busy flag from the LCD //
(0083) //*****************************************************//
(0084) void LCD_Busy ( void )
(0085) {
(0086) unsigned char temp,high;
(0087) unsigned char low;
(0088) LCD_DIR_PORT = 0x0f; // Make I/O Port input
    0009E E08F      LDI	R24,0xF
    0009F BB87      OUT	0x17,R24
(0089) do
(0090) {
(0091) temp=LCD_OP_PORT;
    000A0 B348      IN	R20,0x18
(0092) temp=temp&BIT3;
    000A1 7048      ANDI	R20,0x8
(0093) LCD_OP_PORT=temp;
    000A2 BB48      OUT	0x18,R20
(0094) lcd_set_rw(); // Set LCD to READ
    000A3 9AC1      SBI	0x18,1
(0095) lcd_clear_rs();
    000A4 98C0      CBI	0x18,0
(0096) lcd_set_e();
    000A5 9AC2      SBI	0x18,2
(0097) delay_nus(3);
    000A6 E003      LDI	R16,3
    000A7 E010      LDI	R17,0
    000A8 940E 0170 CALL	_delay_nus
(0098) high = LCD_IP_PORT; // read the high nibble.
    000AA B2A6      IN	R10,0x16
(0099) lcd_clear_e(); // Disable LCD
    000AB 98C2      CBI	0x18,2
(0100) lcd_set_e();
    000AC 9AC2      SBI	0x18,2
(0101) asm("nop");
    000AD 0000      NOP
(0102) asm("nop");
    000AE 0000      NOP
(0103) low = LCD_IP_PORT; // read the low nibble.
    000AF B2C6      IN	R12,0x16
(0104) lcd_clear_e(); // Disable LCD
    000B0 98C2      CBI	0x18,2
(0105) } while(high & 0x80);
    000B1 FCA7      SBRC	R10,7
    000B2 CFED      RJMP	0x00A0
(0106) delay_nus(20);
    000B3 E104      LDI	R16,0x14
    000B4 E010      LDI	R17,0
    000B5 940E 0170 CALL	_delay_nus
    000B7 940C 02F8 JMP	pop_xgset303C
_LCD_WriteControl:
  temp                 --> R20
  CMD                  --> R22
    000B9 934A      ST	-Y,R20
    000BA 936A      ST	-Y,R22
    000BB 2F60      MOV	R22,R16
(0107) }
(0108) // ********************************************** //
(0109) // *** Write a control instruction to the LCD *** //
(0110) // ********************************************** //
(0111) void LCD_WriteControl (unsigned char CMD)
(0112) {
(0113) char temp;
(0114) LCD_Busy(); // Test if LCD busy
    000BC DFDF      RCALL	_LCD_Busy
(0115) LCD_DIR_PORT = 0xff; // LCD port output
    000BD EF8F      LDI	R24,0xFF
    000BE BB87      OUT	0x17,R24
(0116) temp=LCD_OP_PORT;
    000BF B348      IN	R20,0x18
(0117) temp=temp&BIT3;
    000C0 7048      ANDI	R20,0x8
(0118) LCD_OP_PORT =(CMD & 0xf0)|temp; // Load high-data to port
    000C1 2F86      MOV	R24,R22
    000C2 7F80      ANDI	R24,0xF0
    000C3 2B84      OR	R24,R20
    000C4 BB88      OUT	0x18,R24
(0119) lcd_clear_rw(); // Set LCD to write
    000C5 98C1      CBI	0x18,1
(0120) lcd_clear_rs(); // Set LCD to command
    000C6 98C0      CBI	0x18,0
(0121) lcd_set_e(); // Write data to LCD
    000C7 9AC2      SBI	0x18,2
(0122) asm("nop");
    000C8 0000      NOP
(0123) asm("nop");
    000C9 0000      NOP
(0124) lcd_clear_e(); // Disable LCD
    000CA 98C2      CBI	0x18,2
(0125) LCD_OP_PORT =(CMD<<4)|temp; // Load low-data to port
    000CB 2F86      MOV	R24,R22
    000CC 708F      ANDI	R24,0xF
    000CD 9582      SWAP	R24
    000CE 2B84      OR	R24,R20
    000CF BB88      OUT	0x18,R24
(0126) lcd_clear_rw(); // Set LCD to write
    000D0 98C1      CBI	0x18,1
(0127) lcd_clear_rs(); // Set LCD to command
    000D1 98C0      CBI	0x18,0
(0128) lcd_set_e(); // Write data to LCD
    000D2 9AC2      SBI	0x18,2
(0129) asm("nop");
    000D3 0000      NOP
(0130) asm("nop");
    000D4 0000      NOP
(0131) lcd_clear_e(); // Disable LCD
    000D5 98C2      CBI	0x18,2
    000D6 9169      LD	R22,Y+
    000D7 9149      LD	R20,Y+
    000D8 9508      RET
_LCD_WriteData:
  temp                 --> R20
  Data                 --> R22
    000D9 934A      ST	-Y,R20
    000DA 936A      ST	-Y,R22
    000DB 2F60      MOV	R22,R16
(0132) }
(0133) // ***************************************** //
(0134) // *** Write one byte of data to the LCD *** //
(0135) // ***************************************** //
(0136) void LCD_WriteData (unsigned char Data)
(0137) {
(0138) char temp;
(0139) LCD_Busy(); // Test if LCD Busy
    000DC DFBF      RCALL	_LCD_Busy
(0140) LCD_DIR_PORT = 0xFF; // LCD port output
    000DD EF8F      LDI	R24,0xFF
    000DE BB87      OUT	0x17,R24
(0141) temp=LCD_OP_PORT;
    000DF B348      IN	R20,0x18
(0142) temp=temp&BIT3;
    000E0 7048      ANDI	R20,0x8
(0143) LCD_OP_PORT =(Data & 0xf0)|temp; // Load high-data to port
    000E1 2F86      MOV	R24,R22
    000E2 7F80      ANDI	R24,0xF0
    000E3 2B84      OR	R24,R20
    000E4 BB88      OUT	0x18,R24
(0144) lcd_clear_rw() ; // Set LCD to write
    000E5 98C1      CBI	0x18,1
(0145) lcd_set_rs(); // Set LCD to data
    000E6 9AC0      SBI	0x18,0
(0146) lcd_set_e(); // Write data to LCD
    000E7 9AC2      SBI	0x18,2
(0147) asm("nop");
    000E8 0000      NOP
(0148) asm("nop");
    000E9 0000      NOP
(0149) lcd_clear_e(); // Disable LCD
    000EA 98C2      CBI	0x18,2
(0150) LCD_OP_PORT = (Data << 4)|temp; // Load low-data to port
    000EB 2F86      MOV	R24,R22
    000EC 708F      ANDI	R24,0xF
    000ED 9582      SWAP	R24
    000EE 2B84      OR	R24,R20
    000EF BB88      OUT	0x18,R24
(0151) lcd_clear_rw() ; // Set LCD to write
    000F0 98C1      CBI	0x18,1
(0152) lcd_set_rs(); // Set LCD to data
    000F1 9AC0      SBI	0x18,0
(0153) lcd_set_e(); // Write data to LCD
    000F2 9AC2      SBI	0x18,2
(0154) asm("nop");
    000F3 0000      NOP
(0155) asm("nop");
    000F4 0000      NOP
(0156) lcd_clear_e(); // Disable LCD
    000F5 98C2      CBI	0x18,2
    000F6 9169      LD	R22,Y+
    000F7 9149      LD	R20,Y+
    000F8 9508      RET
(0157) }
(0158) // ********************************* //
(0159) // *** Initialize the LCD driver *** //
(0160) // ********************************* //
(0161) void Init_LCD(void)
(0162) {
(0163) LCD_INIT();
_Init_LCD:
    000F9 DF78      RCALL	_LCD_INIT
(0164) LCD_WriteControl (LCD_FUNCTION_SET);
    000FA E208      LDI	R16,0x28
    000FB DFBD      RCALL	_LCD_WriteControl
(0165) LCD_WriteControl (LCD_OFF);
    000FC E008      LDI	R16,0x8
    000FD DFBB      RCALL	_LCD_WriteControl
(0166) LCD_WriteControl (LCD_CLEAR);
    000FE E001      LDI	R16,1
    000FF DFB9      RCALL	_LCD_WriteControl
(0167) LCD_WriteControl (LCD_MODE_SET);
    00100 E006      LDI	R16,6
    00101 DFB7      RCALL	_LCD_WriteControl
(0168) LCD_WriteControl (LCD_ON);
    00102 E00C      LDI	R16,0xC
    00103 DFB5      RCALL	_LCD_WriteControl
(0169) LCD_WriteControl (LCD_HOME);
    00104 E002      LDI	R16,2
    00105 CFB3      RJMP	_LCD_WriteControl
(0170) }
(0171) // ************************************************ //
(0172) // *** Clear the LCD screen (also homes cursor) *** //
(0173) // ************************************************ //
(0174) void LCD_Clear(void)
(0175) {
(0176) LCD_WriteControl(0x01);
_LCD_Clear:
    00106 E001      LDI	R16,1
    00107 CFB1      RJMP	_LCD_WriteControl
(0177) }

⌨️ 快捷键说明

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