📄 atmega103.lst
字号:
.even
0D06 _InitADC::
0D06 .dbline 47{
;
; void InitADC( void )
; {
0D06 .dbline 48
; ACSR = BIT(ACD); /* comparator and input capture disabled */
0D06 E880 ldi R24,128
0D07 B988 out 0x8,R24
0D08 .dbline 49
; ADMUX = 0;
0D08 2422 clr R2
0D09 B827 out 0x7,R2
0D0A .dbline 50
; ADCSR = BIT(ADEN) | BIT(ADPS2);
0D0A E884 ldi R24,132
0D0B B986 out 0x6,R24
0D0C .dbline 51
; ADCSR |= BIT(ADSC);
0D0C 9A36 sbi 0x6,6
0D0D L6:
0D0D .dbline 52
0D0D L7:
0D0D .dbline 52
; while ( ADCSR & BIT(ADSC) );
0D0D 9936 sbic 0x6,6
0D0E CFFE rjmp L6
0D0F .dbline 53}
; }
0D0F L5:
0D0F 9508 ret
0D10 .dbfunc s InitWatchdog _InitWatchdog fI
.even
0D10 _InitWatchdog::
0D10 .dbline 56{
;
; void InitWatchdog( void )
; {
0D10 .dbline 57
; WDTCR = BIT(WDP1) | BIT(WDP0);
0D10 E083 ldi R24,3
0D11 BD81 out 0x21,R24
0D12 .dbline 58
; WDTCR |= BIT(WDE);
0D12 B581 in R24,0x21
0D13 6088 ori R24,8
0D14 BD81 out 0x21,R24
0D15 .dbline 59}
; }
0D15 L9:
0D15 9508 ret
0D16 .dbfunc s InitPort _InitPort fI
.even
0D16 _InitPort::
0D16 .dbline 62{
;
; void InitPort( void )
; {
0D16 .dbline 63
; MCUCR = 0x00;
0D16 2422 clr R2
0D17 BE25 out 0x35,R2
0D18 .dbline 65
;
; PORTD = INITIALISE_PORTD;
0D18 EE80 ldi R24,224
0D19 BB82 out 0x12,R24
0D1A .dbline 66
; DDRD = CONFIGURE_PORTD;
0D1A BA21 out 0x11,R2
0D1B .dbline 68
;
; PORTE = INITIALISE_PORTE;
0D1B B823 out 0x3,R2
0D1C .dbline 69
; DDRE = CONFIGURE_PORTE;
0D1C B822 out 0x2,R2
0D1D .dbline 70}
; }
0D1D L10:
0D1D 9508 ret
.module lcd.c
.text
--- 0000 .dbfile C:\Documents\Software\AVR\ATmega103\code\lcd.c
.area text
--- 0000 .dbfile C:\Documents\Software\AVR\ATmega103\code\lcd.c
--- 0000 .dbfunc s LCDInitialise _LCDInitialise fI
.even
0D1E _LCDInitialise::
0D1E .dbline 20{
; /* ATmega103 lcd.c file
;
; Author : Robert Stuart
; Company : PDL Industries Ltd
; Date of Creation : 22 July 1999
; Tested : 13 March 2000
;
; Function :
; This module controls the operation of a 16x2 lcd for the ATmega603/103.
;
; Auto detection of lcd added. Reads the last character of each line to
; determine whether write was successful.
; */
;
; /* include */
; #include "lcd.h"
;
; /* Initialises the lcd */
; void LCDInitialise( void )
; {
0D1E .dbline 21
; MCUCR |= BIT(SRE) | BIT(SRW);
0D1E B785 in R24,0x35
0D1F 6C80 ori R24,192
0D20 BF85 out 0x35,R24
0D21 .dbline 22
; LCDCounter = _50MS; /* delay counter for lcd initialisation */
0D21 E382 ldi R24,50
0D22 938001A2 sts _LCDCounter,R24
0D24 .dbline 23
; LCDStatus = 0; /* lcd status flags are reset */
0D24 2422 clr R2
0D25 92200157 sts _LCDStatus,R2
0D27 .dbline 24}
; }
0D27 L1:
0D27 9508 ret
0D28 .dbfunc s LCDPrintf _LCDPrintf fI
; Ptr2 -> R20,R21
; Ptr1 -> R22,R23
.even
0D28 _LCDPrintf::
0D28 940E0728 call push_gset2
0D2A 2F42 mov R20,R18
0D2B 2F53 mov R21,R19
0D2C 2F60 mov R22,R16
0D2D 2F71 mov R23,R17
0D2E .dbline 28{
;
; /* global function called when writing to the lcd */
; void LCDPrintf( char *Ptr1, char *Ptr2 )
; {
0D2E .dbline 29
; if ( !CHECKBIT( LCDStatus, LCD_UPDATE ) )
0D2E 90200157 lds R2,_LCDStatus
0D30 FC21 sbrc R2,1
0D31 C031 rjmp L3
0D32 .dbline 30
; { /* check that lcd is not currently updating */
0D32 .dbline 31
; strcpy( LCDStr1, Ptr1 ); /* copy strings into local variables */
0D32 2F26 mov R18,R22
0D33 2F37 mov R19,R23
0D34 E900 ldi R16,<_LCDStr1
0D35 E011 ldi R17,>_LCDStr1
0D36 940E0A79 call _strcpy
0D38 .dbline 32
; strcpy( LCDStr2, Ptr2 );
0D38 2F24 mov R18,R20
0D39 2F35 mov R19,R21
0D3A E70F ldi R16,<_LCDStr2
0D3B E011 ldi R17,>_LCDStr2
0D3C 940E0A79 call _strcpy
0D3E .dbline 34
;
; if ( LCDStr1[0] == CHARACTER_NULL ) /* line 1 not updated */
0D3E 90200190 lds R2,_LCDStr1
0D40 2022 tst R2
0D41 F459 brne L5
0D42 .dbline 35
; {
0D42 .dbline 36
; strcpy( LCDStr1, LCDStr2 );
0D42 E72F ldi R18,<_LCDStr2
0D43 E031 ldi R19,>_LCDStr2
0D44 E900 ldi R16,<_LCDStr1
0D45 E011 ldi R17,>_LCDStr1
0D46 940E0A79 call _strcpy
0D48 .dbline 37
; LCDLine = LINE2;
0D48 E082 ldi R24,2
0D49 938001A1 sts _LCDLine,R24
0D4B .dbline 38
; }
0D4B 940C0D59 jmp L6
0D4D L5:
0D4D .dbline 39
; else if ( LCDStr2[0] == CHARACTER_NULL )
0D4D 9020017F lds R2,_LCDStr2
0D4F 2022 tst R2
0D50 F429 brne L7
0D51 .dbline 40
; LCDLine = LINE1; /* line 2 not updated */
0D51 E081 ldi R24,1
0D52 938001A1 sts _LCDLine,R24
0D54 940C0D59 jmp L8
0D56 L7:
0D56 .dbline 42
; else
; LCDLine = LINE1_AND_LINE2;
0D56 E083 ldi R24,3
0D57 938001A1 sts _LCDLine,R24
0D59 L8:
0D59 L6:
0D59 .dbline 44
;
; SETBIT( LCDStatus, LCD_UPDATE ); /* set flags */
0D59 91800157 lds R24,_LCDStatus
0D5B 6082 ori R24,2
0D5C 93800157 sts _LCDStatus,R24
0D5E .dbline 45
; CLEARBIT( LCDStatus, LCD_QUEUE );
0D5E 7E8F andi R24,239
0D5F 93800157 sts _LCDStatus,R24
0D61 .dbline 46
; }
0D61 940C0D78 jmp L4
0D63 L3:
0D63 .dbline 47
; else if ( !CHECKBIT( LCDStatus, LCD_QUEUE ) )
0D63 90200157 lds R2,_LCDStatus
0D65 FC24 sbrc R2,4
0D66 C011 rjmp L9
0D67 .dbline 48
; { /* update after existing update has been completed */
0D67 .dbline 49
; strcpy( LCDQueueStr1, Ptr1);
0D67 2F26 mov R18,R22
0D68 2F37 mov R19,R23
0D69 E60E ldi R16,<_LCDQueueStr1
0D6A E011 ldi R17,>_LCDQueueStr1
0D6B 940E0A79 call _strcpy
0D6D .dbline 50
; strcpy( LCDQueueStr2, Ptr2);
0D6D 2F24 mov R18,R20
0D6E 2F35 mov R19,R21
0D6F E50D ldi R16,<_LCDQueueStr2
0D70 E011 ldi R17,>_LCDQueueStr2
0D71 940E0A79 call _strcpy
0D73 .dbline 52
;
; SETBIT( LCDStatus, LCD_QUEUE );
0D73 91800157 lds R24,_LCDStatus
0D75 6180 ori R24,16
0D76 93800157 sts _LCDStatus,R24
0D78 .dbline 53
; }
0D78 L9:
0D78 L4:
0D78 .dbline 54}
; }
0D78 L2:
0D78 940E0734 call pop_gset2
0D7A 9508 ret
0D7B .dbsym r Ptr2 20 pc
0D7B .dbsym r Ptr1 22 pc
0D7B .dbfunc s DelayLCDStartup _DelayLCDStartup fI
.even
0D7B _DelayLCDStartup::
0D7B .dbline 58{
;
; /* called from the main 1ms interrupt, must allow at least 40ms before lcd can be initialised */
; void DelayLCDStartup( void )
; {
0D7B .dbline 59
; if ( LCDCounter && !CHECKBIT( LCDStatus, LCD_BUSY ) )
0D7B 902001A2 lds R2,_LCDCounter
0D7D 2022 tst R2
0D7E F049 breq L12
0D7F 90200157 lds R2,_LCDStatus
0D81 FC22 sbrc R2,2
0D82 C005 rjmp L12
0D83 .dbline 60
; LCDCounter--; /* count down delay timer */
0D83 918001A2 lds R24,_LCDCounter
0D85 5081 subi R24,1
0D86 938001A2 sts _LCDCounter,R24
0D88 L12:
0D88 .dbline 62
;
; if ( CHECKBIT( LCDStatus, LCD_INITIALISE ) && LCDCounter == 1 )
0D88 90200157 lds R2,_LCDStatus
0D8A FE23 sbrs R2,3
0D8B C006 rjmp L14
0D8C 918001A2 lds R24,_LCDCounter
0D8E 3081 cpi R24,1
0D8F F411 brne L14
0D90 .dbline 63
; InitScreen(); /* initialise lcd */
0D90 940E0D93 call _InitScreen
0D92 L14:
0D92 .dbline 64}
; }
0D92 L11:
0D92 9508 ret
0D93 .dbfunc s InitScreen _InitScreen fI
.even
0D93 _InitScreen::
0D93 9722 sbiw R28,2
0D94 .dbline 67{
;
; void InitScreen( void )
; {
0D94 .dbline 68
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -