📄 text1.lst
字号:
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 + -