📄 atmega103.lst
字号:
; sprintf( LCDStr1, "%s", LCDHeader1 ); /* initialise lcd lines */
0D94 903000B0 lds R3,_LCDHeader1+1
0D96 902000AF lds R2,_LCDHeader1
0D98 8228 std y+0,R2
0D99 8239 std y+1,R3
0D9A E121 ldi R18,<L17
0D9B E031 ldi R19,>L17
0D9C E900 ldi R16,<_LCDStr1
0D9D E011 ldi R17,>_LCDStr1
0D9E 940E0769 call _sprintf
0DA0 .dbline 69
; sprintf( LCDStr2, "%s", LCDHeader2 );
0DA0 903000B2 lds R3,_LCDHeader2+1
0DA2 902000B1 lds R2,_LCDHeader2
0DA4 8228 std y+0,R2
0DA5 8239 std y+1,R3
0DA6 E121 ldi R18,<L17
0DA7 E031 ldi R19,>L17
0DA8 E70F ldi R16,<_LCDStr2
0DA9 E011 ldi R17,>_LCDStr2
0DAA 940E0769 call _sprintf
0DAC .dbline 70
; LCDLine = LINE1_AND_LINE2; /* both lines to be updated */
0DAC E083 ldi R24,3
0DAD 938001A1 sts _LCDLine,R24
0DAF .dbline 71
; LCDCounter--;
0DAF 918001A2 lds R24,_LCDCounter
0DB1 5081 subi R24,1
0DB2 938001A2 sts _LCDCounter,R24
0DB4 .dbline 72
; SETBIT( LCDStatus, LCD_UPDATE );
0DB4 91800157 lds R24,_LCDStatus
0DB6 6082 ori R24,2
0DB7 93800157 sts _LCDStatus,R24
0DB9 .dbline 73}
; }
0DB9 L16:
0DB9 9622 adiw R28,2
0DBA 9508 ret
0DBB .dbfunc s RefreshLCD _RefreshLCD fI
.even
0DBB _RefreshLCD::
0DBB .dbline 77{
;
; /* continously called when not serving interrupts and the micro is doing nothing */
; void RefreshLCD( void )
; {
0DBB .dbline 78
; if ( CHECKBIT( LCDStatus, LCD_OK ) )
0DBB 90200157 lds R2,_LCDStatus
0DBD FE20 sbrs R2,0
0DBE C006 rjmp L19
0DBF .dbline 79
; {
0DBF .dbline 80
; if ( CHECKBIT( LCDStatus, LCD_UPDATE ) )
0DBF FE21 sbrs R2,1
0DC0 C00A rjmp L20
0DC1 .dbline 81
; WriteToScreen();
0DC1 940E0DF5 call _WriteToScreen
0DC3 .dbline 82
; }
0DC3 940C0DCB jmp L20
0DC5 L19:
0DC5 .dbline 83
; else if ( LCDCounter == _20MS )
0DC5 918001A2 lds R24,_LCDCounter
0DC7 3184 cpi R24,20
0DC8 F411 brne L23
0DC9 .dbline 84
; ConfigureLCD(); /* configure lcd to 2 lines, 8bit interface */
0DC9 940E0DCC call _ConfigureLCD
0DCB L23:
0DCB L20:
0DCB .dbline 85}
; }
0DCB L18:
0DCB 9508 ret
.area lit
--- 0000 L26:
--- 0000 380C .byte 56,12
--- 0001 01 .byte 1
.area text
--- 00AE .dbfile C:\Documents\Software\AVR\ATmega103\code\lcd.c
--- 00AE .dbfunc s ConfigureLCD _ConfigureLCD fI
--- 00AE .dbsym s InitialiseTable L26 Ac[3:3]
; Index -> R20
.even
0DCC _ConfigureLCD::
0DCC 940E0711 call push_gset1
0DCE .dbline 89{
;
; /* sets the lcd to 2-line 16-character mode with 8-bit interface and auto incrementation */
; void ConfigureLCD( void )
; {
0DCE .dbline 93
; static const unsigned char InitialiseTable[] = {FUNCTION_SET, DISPLAY_ON, DISPLAY_CLEAR};
; unsigned char Index;
;
; for ( Index=0; Index<3; Index++ )
0DCE 2744 clr R20
0DCF 940C0DE3 jmp L30
0DD1 L27:
0DD1 .dbline 94
0DD1 .dbline 95
0DD1 940E0EB0 call _CheckIfBusy
0DD3 .dbline 96
0DD3 2722 clr R18
0DD4 2733 clr R19
0DD5 E785 ldi R24,<L26
0DD6 E091 ldi R25,>L26
0DD7 2E24 mov R2,R20
0DD8 2433 clr R3
0DD9 0E28 add R2,R24
0DDA 1E39 adc R3,R25
0DDB 2DE2 mov R30,R2
0DDC 2DF3 mov R31,R3
0DDD 95C8 lpm
0DDE 2D00 mov R16,R0
0DDF 2711 clr R17
0DE0 940E0EA0 call _WriteToDevice
0DE2 .dbline 97
0DE2 L28:
0DE2 .dbline 93
0DE2 5F4F subi R20,255 ; addi 1
0DE3 L30:
0DE3 .dbline 93
0DE3 3043 cpi R20,3
0DE4 F360 brlo L27
0DE5 .dbline 99
; {
; CheckIfBusy();
; WriteToDevice( InitialiseTable[Index], INSTRUCTION );
; }
;
; LCDCounter--;
0DE5 918001A2 lds R24,_LCDCounter
0DE7 5081 subi R24,1
0DE8 938001A2 sts _LCDCounter,R24
0DEA .dbline 100
; SETBIT( LCDStatus, LCD_OK );
0DEA 91800157 lds R24,_LCDStatus
0DEC 6081 ori R24,1
0DED 93800157 sts _LCDStatus,R24
0DEF .dbline 101
; SETBIT( LCDStatus, LCD_INITIALISE );
0DEF 6088 ori R24,8
0DF0 93800157 sts _LCDStatus,R24
0DF2 .dbline 102}
; }
0DF2 L25:
0DF2 940E0714 call pop_gset1
0DF4 9508 ret
0DF5 .dbsym r Index 20 c
.area bss
--- 0000 .dbfile C:\Documents\Software\AVR\ATmega103\code\lcd.c
--- 0000 L32:
--- 0000 .blkb 1
.area text
--- 00D7 .dbfile C:\Documents\Software\AVR\ATmega103\code\lcd.c
--- 00D7 .dbfunc s WriteToScreen _WriteToScreen fI
--- 00D7 .dbsym s Index L32 c
.even
0DF5 _WriteToScreen::
0DF5 .dbline 105{
;
; void WriteToScreen( void )
; {
0DF5 .dbline 108
; static unsigned char Index;
;
; if ( !CHECKBIT( LCDStatus, LCD_BUSY ) )
0DF5 90200157 lds R2,_LCDStatus
0DF7 FC22 sbrc R2,2
0DF8 C046 rjmp L33
0DF9 .dbline 109
; {
0DF9 .dbline 110
; if ( LCDLine == LINE2 ) /* set which line is to be updated */
0DF9 918001A1 lds R24,_LCDLine
0DFB 3082 cpi R24,2
0DFC F441 brne L35
0DFD .dbline 111
; WriteToDevice( SECOND_LINE, INSTRUCTION );
0DFD 2722 clr R18
0DFE 2733 clr R19
0DFF EC00 ldi R16,192
0E00 E010 ldi R17,0
0E01 940E0EA0 call _WriteToDevice
0E03 940C0E0B jmp L36
0E05 L35:
0E05 .dbline 113
; else
; WriteToDevice( FIRST_LINE, INSTRUCTION );
0E05 2722 clr R18
0E06 2733 clr R19
0E07 E800 ldi R16,128
0E08 E010 ldi R17,0
0E09 940E0EA0 call _WriteToDevice
0E0B L36:
0E0B .dbline 115
;
; for ( Index=0; Index<16; Index++ ) /* replace all characters after the null which space characters */
0E0B 2422 clr R2
0E0C 9220015C sts L32,R2
0E0E 940C0E33 jmp L40
0E10 L37:
0E10 .dbline 116
; if ( LCDStr1[Index] == CHARACTER_NULL )
0E10 E980 ldi R24,<_LCDStr1
0E11 E091 ldi R25,>_LCDStr1
0E12 91E0015C lds R30,L32
0E14 27FF clr R31
0E15 0FE8 add R30,R24
0E16 1FF9 adc R31,R25
0E17 8020 ldd R2,z+0
0E18 2022 tst R2
0E19 F4A1 brne L41
0E1A .dbline 117
; for ( ; Index<16; Index++ )
0E1A 940C0E2A jmp L46
0E1C L43:
0E1C .dbline 118
0E1C E980 ldi R24,<_LCDStr1
0E1D E091 ldi R25,>_LCDStr1
0E1E 91E0015C lds R30,L32
0E20 27FF clr R31
0E21 0FE8 add R30,R24
0E22 1FF9 adc R31,R25
0E23 E280 ldi R24,32
0E24 8380 std z+0,R24
0E25 L44:
0E25 .dbline 117
0E25 9180015C lds R24,L32
0E27 5F8F subi R24,255 ; addi 1
0E28 9380015C sts L32,R24
0E2A L46:
0E2A .dbline 117
0E2A 9180015C lds R24,L32
0E2C 3180 cpi R24,16
0E2D F370 brlo L43
0E2E L41:
0E2E L38:
0E2E .dbline 115
0E2E 9180015C lds R24,L32
0E30 5F8F subi R24,255 ; addi 1
0E31 9380015C sts L32,R24
0E33 L40:
0E33 .dbline 115
0E33 9180015C lds R24,L32
0E35 3180 cpi R24,16
0E36 F2C8 brlo L37
0E37 .dbline 119
; LCDStr1[Index] = CHARACTER_SPACE;
; Index = 0;
0E37 2422 clr R2
0E38 9220015C sts L32,R2
0E3A .dbline 120
; SETBIT( LCDStatus, LCD_BUSY );
0E3A 91800157 lds R24,_LCDStatus
0E3C 6084 ori R24,4
0E3D 93800157 sts _LCDStatus,R24
0E3F .dbline 121
; }
0E3F L33:
0E3F .dbline 123
;
; CheckIfBusy();
0E3F 940E0EB0 call _CheckIfBusy
0E41 .dbline 124
; WriteToDevice( LCDStr1[Index++], DATA ); /* write character to screen */
0E41 E021 ldi R18,1
0E42 E030 ldi R19,0
0E43 9020015C lds R2,L32
0E45 2433 clr R3
0E46 2D82 mov R24,R2
0E47 2D93 mov R25,R3
0E48 9601 adiw R24,1
0E49 9380015C sts L32,R24
0E4B E980 ldi R24,<_LCDStr1
0E4C E091 ldi R25,>_LCDStr1
0E4D 2DE2 mov R30,R2
0E4E 2DF3 mov R31,R3
0E4F 0FE8 add R30,R24
0E50 1FF9 adc R31,R25
0E51 8100 ldd R16,z+0
0E52 2711 clr R17
0E53 940E0EA0 call _WriteToDevice
0E55 .dbline 126
;
; if ( Index>15 ) /* finished line */
0E55 E08F ldi R24,15
0E56 9020015C lds R2,L32
0E58 1582 cp R24,R2
0E59 F010 brlo X0
0E5A 940C0E9F jmp L47
0E5C X0:
0E5C .dbline 127
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -