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

📄 lcd16x2.lst

📁 使用iccavr的例子
💻 LST
📖 第 1 页 / 共 4 页
字号:
 0B74  E091              ldi R25,>_LCDStr1
 0B75  91E000E1          lds R30,L32
 0B77  27FF              clr R31
 0B78  0FE8              add R30,R24
 0B79  1FF9              adc R31,R25
 0B7A  E280              ldi R24,32
 0B7B  8380              std z+0,R24
 0B7C                  L44:
 0B7C                    .dbline 119
 0B7C  918000E1          lds R24,L32
 0B7E  5F8F              subi R24,255    ; addi 1
 0B7F  938000E1          sts L32,R24
 0B81                  L46:
 0B81                    .dbline 119
 0B81  918000E1          lds R24,L32
 0B83  3180              cpi R24,16
 0B84  F370              brlo L43
 0B85                  L41:
 0B85                  L38:
 0B85                    .dbline 117
 0B85  918000E1          lds R24,L32
 0B87  5F8F              subi R24,255    ; addi 1
 0B88  938000E1          sts L32,R24
 0B8A                  L40:
 0B8A                    .dbline 117
 0B8A  918000E1          lds R24,L32
 0B8C  3180              cpi R24,16
 0B8D  F2C8              brlo L37
 0B8E                    .dbline 121
                       ;           LCDStr1[i] = CHARACTER_SPACE;
                       ;     i = 0;
 0B8E  2422              clr R2
 0B8F  922000E1          sts L32,R2
 0B91                    .dbline 122
                       ;     SETBIT( LCDStatus, LCD_BUSY );
 0B91  918000E0          lds R24,_LCDStatus
 0B93  6084              ori R24,4
 0B94  938000E0          sts _LCDStatus,R24
 0B96                    .dbline 123
                       ;   } 
 0B96                  L33:
 0B96                    .dbline 125
                       ; 
                       ;   CheckIfBusy();
 0B96  940E0C07          call _CheckIfBusy
 0B98                    .dbline 126
                       ;   WriteToDevice( LCDStr1[i++], DATA );  /* write character to screen */
 0B98  E021              ldi R18,1
 0B99  E030              ldi R19,0
 0B9A  902000E1          lds R2,L32
 0B9C  2433              clr R3
 0B9D  2D82              mov R24,R2
 0B9E  2D93              mov R25,R3
 0B9F  9601              adiw R24,1
 0BA0  938000E1          sts L32,R24
 0BA2  E185              ldi R24,<_LCDStr1
 0BA3  E091              ldi R25,>_LCDStr1
 0BA4  2DE2              mov R30,R2
 0BA5  2DF3              mov R31,R3
 0BA6  0FE8              add R30,R24
 0BA7  1FF9              adc R31,R25
 0BA8  8100              ldd R16,z+0
 0BA9  2711              clr R17
 0BAA  940E0BF7          call _WriteToDevice
 0BAC                    .dbline 128
                       ;   
                       ;   if ( i>15 )                 /* finished line */               
 0BAC  E08F              ldi R24,15
 0BAD  902000E1          lds R2,L32
 0BAF  1582              cp R24,R2
 0BB0  F010              brlo X0
 0BB1  940C0BF6          jmp L47
 0BB3                  X0:
 0BB3                    .dbline 129
                       ;   {
 0BB3                    .dbline 130
                       ;     CheckIfBusy();          /* check is lcd is connected */
 0BB3  940E0C07          call _CheckIfBusy
 0BB5                    .dbline 131
                       ;     if ( LCDLine == LINE2 )
 0BB5  91800126          lds R24,_LCDLine
 0BB7  3082              cpi R24,2
 0BB8  F441              brne L49
 0BB9                    .dbline 132
                       ;       WriteToDevice( SECOND_LINE, INSTRUCTION );
 0BB9  2722              clr R18
 0BBA  2733              clr R19
 0BBB  EC00              ldi R16,192
 0BBC  E010              ldi R17,0
 0BBD  940E0BF7          call _WriteToDevice
 0BBF  940C0BC7          jmp L50
 0BC1                  L49:
 0BC1                    .dbline 134
                       ;     else
                       ;       WriteToDevice( FIRST_LINE, INSTRUCTION );
 0BC1  2722              clr R18
 0BC2  2733              clr R19
 0BC3  E800              ldi R16,128
 0BC4  E010              ldi R17,0
 0BC5  940E0BF7          call _WriteToDevice
 0BC7                  L50:
 0BC7                    .dbline 136
                       ; 
                       ;     CheckIfBusy();                /* check if first character is correct */
 0BC7  940E0C07          call _CheckIfBusy
 0BC9                    .dbline 137
                       ;     if ( ReadDevice( DATA ) != LCDStr1[0] )
 0BC9  E001              ldi R16,1
 0BCA  E010              ldi R17,0
 0BCB  940E0C0E          call _ReadDevice
 0BCD  90200115          lds R2,_LCDStr1
 0BCF  1502              cp R16,R2
 0BD0  F011              breq L51
 0BD1                    .dbline 138
                       ;       LCDInitialise();                    /* reinitialise lcd otherwise */    
 0BD1  940E0A75          call _LCDInitialise
 0BD3                  L51:
 0BD3                    .dbline 140
                       ; 
                       ;     if ( LCDLine == LINE1_AND_LINE2 )
 0BD3  91800126          lds R24,_LCDLine
 0BD5  3083              cpi R24,3
 0BD6  F459              brne L53
 0BD7                    .dbline 141
                       ;     {
 0BD7                    .dbline 142
                       ;       strcpy( LCDStr1, LCDStr2 );       /* load str2 into str1 and update line 2 */
 0BD7  E024              ldi R18,<_LCDStr2
 0BD8  E031              ldi R19,>_LCDStr2
 0BD9  E105              ldi R16,<_LCDStr1
 0BDA  E011              ldi R17,>_LCDStr1
 0BDB  940E09AE          call _strcpy
 0BDD                    .dbline 143
                       ;       LCDLine = LINE2;
 0BDD  E082              ldi R24,2
 0BDE  93800126          sts _LCDLine,R24
 0BE0                    .dbline 144
                       ;     }
 0BE0  940C0BF1          jmp L54
 0BE2                  L53:
 0BE2                    .dbline 146
                       ;     else
                       ;     {
 0BE2                    .dbline 147
                       ;       if ( CHECKBIT( LCDStatus, LCD_QUEUE ) )
 0BE2  902000E0          lds R2,_LCDStatus
 0BE4  FE24              sbrs R2,4
 0BE5  C006              rjmp L55
 0BE6                    .dbline 148
                       ;         LCDPrintf( LCDQueueStr1, LCDQueueStr2 );
 0BE6  EE22              ldi R18,<_LCDQueueStr2
 0BE7  E030              ldi R19,>_LCDQueueStr2
 0BE8  EF03              ldi R16,<_LCDQueueStr1
 0BE9  E010              ldi R17,>_LCDQueueStr1
 0BEA  940E0A7F          call _LCDPrintf
 0BEC                  L55:
 0BEC                    .dbline 150
                       ;           
                       ;       CLEARBIT( LCDStatus, LCD_UPDATE );
 0BEC  918000E0          lds R24,_LCDStatus
 0BEE  7F8D              andi R24,253
 0BEF  938000E0          sts _LCDStatus,R24
 0BF1                    .dbline 151
                       ;     }
 0BF1                  L54:
 0BF1                    .dbline 153
                       ;    
                       ;    CLEARBIT( LCDStatus, LCD_BUSY );
 0BF1  918000E0          lds R24,_LCDStatus
 0BF3  7F8B              andi R24,251
 0BF4  938000E0          sts _LCDStatus,R24
 0BF6                    .dbline 154
                       ;   }
 0BF6                  L47:
 0BF6                    .dbline 155}
                       ; }
 0BF6                  L31:
 0BF6  9508              ret
 0BF7                    .dbfunc s WriteToDevice _WriteToDevice fI
                       ;         LCD_IO -> R20,R21
                       ;         select -> R18
                       ;           data -> R16
                         .even
 0BF7                  _WriteToDevice::
 0BF7  940E06D2          call push_gset1
 0BF9                    .dbline 159{
                       ; 
                       ; /* writes to lcd */
                       ; void WriteToDevice( char data, unsigned char select )
                       ; {
 0BF9                    .dbline 162
                       ;   char *LCD_IO;
                       ;   
                       ;   if ( select == INSTRUCTION )          /* set RS */
 0BF9  2322              tst R18
 0BFA  F421              brne L58
 0BFB                    .dbline 163
                       ;     LCD_IO = ( char * ) 0x8000;        
 0BFB  E040              ldi R20,0
 0BFC  E850              ldi R21,128
 0BFD  940C0C01          jmp L59
 0BFF                  L58:
 0BFF                    .dbline 165
                       ;   else
                       ;     LCD_IO = ( char * ) 0xC000;        
 0BFF  E040              ldi R20,0
 0C00  EC50              ldi R21,192
 0C01                  L59:
 0C01                    .dbline 167
                       ; 
                       ;   *LCD_IO = data;
 0C01  2FE4              mov R30,R20
 0C02  2FF5              mov R31,R21
 0C03  8300              std z+0,R16
 0C04                    .dbline 168}
                       ; }
 0C04                  L57:
 0C04  940E06D5          call pop_gset1
 0C06  9508              ret
 0C07                    .dbsym r LCD_IO 20 pc
 0C07                    .dbsym r select 18 c
 0C07                    .dbsym r data 16 c
 0C07                    .dbfunc s CheckIfBusy _CheckIfBusy fI
                         .even
 0C07                  _CheckIfBusy::
 0C07                    .dbline 171{
                       ; 
                       ; void CheckIfBusy( void )
                       ; {
 0C07                  L61:
 0C07                    .dbline 172
 0C07                  L62:
 0C07                    .dbline 172
                       ;   while ( ReadDevice( INSTRUCTION ) & BUSY_FLAG );
 0C07  2700              clr R16
 0C08  2711              clr R17
 0C09  940E0C0E          call _ReadDevice
 0C0B  FD07              sbrc R16,7
 0C0C  CFFA              rjmp L61
 0C0D                    .dbline 173}
                       ; }
 0C0D                  L60:
 0C0D  9508              ret
 0C0E                    .dbfunc s ReadDevice _ReadDevice fI
                       ;         LCD_IO -> R20,R21
                       ;         select -> R16
                         .even
 0C0E                  _ReadDevice::
 0C0E  940E06D2          call push_gset1
 0C10                    .dbline 177{
                       ; 
                       ; /* reads from lcd */
                       ; char ReadDevice( unsigned char select )
                       ; {
 0C10                    .dbline 180
                       ;   char *LCD_IO;
                       ;   
                       ;   if ( select == INSTRUCTION )          /* set RS */
 0C10  2300              tst R16
 0C11  F421              brne L65
 0C12                    .dbline 181
                       ;     LCD_IO = ( char * ) 0x8000;           
 0C12  E040              ldi R20,0
 0C13  E850              ldi R21,128
 0C14  940C0C18          jmp L66
 0C16                  L65:
 0C16                    .dbline 183
                       ;   else
                       ;     LCD_IO = ( char * ) 0xC000;           
 0C16  E040              ldi R20,0
 0C17  EC50              ldi R21,192
 0C18                  L66:
 0C18                    .dbline 185
                       ;   

⌨️ 快捷键说明

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