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

📄 usart_icc.lst

📁 M16控制,从键盘输入字符,当输入字符达到10个的时候,终端和LCD都显示所接收到的字符
💻 LST
📖 第 1 页 / 共 3 页
字号:
      EA 98C2      CBI	0x18,2
(0125) LCD_OP_PORT =(CMD<<4)|temp; // Load low-data to port
      EB 2F86      MOV	R24,R22
      EC 708F      ANDI	R24,0xF
      ED 9582      SWAP	R24
      EE 2B84      OR	R24,R20
      EF BB88      OUT	0x18,R24
(0126) lcd_clear_rw(); // Set LCD to write
      F0 98C1      CBI	0x18,1
(0127) lcd_clear_rs(); // Set LCD to command
      F1 98C0      CBI	0x18,0
(0128) lcd_set_e(); // Write data to LCD
      F2 9AC2      SBI	0x18,2
(0129) asm("nop");
      F3 0000      NOP
(0130) asm("nop");
      F4 0000      NOP
(0131) lcd_clear_e(); // Disable LCD
      F5 98C2      CBI	0x18,2
      F6 9169      LD	R22,Y+
      F7 9149      LD	R20,Y+
      F8 9508      RET
_LCD_WriteData:
  temp                 --> R20
  Data                 --> R22
      F9 934A      ST	R20,-Y
      FA 936A      ST	R22,-Y
      FB 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
      FC DFBF      RCALL	_LCD_Busy
(0140) LCD_DIR_PORT = 0xFF; // LCD port output
      FD EF8F      LDI	R24,0xFF
      FE BB87      OUT	0x17,R24
(0141) temp=LCD_OP_PORT;
      FF B348      IN	R20,0x18
(0142) temp=temp&BIT3;
     100 7048      ANDI	R20,0x8
(0143) LCD_OP_PORT =(Data & 0xf0)|temp; // Load high-data to port
     101 2F86      MOV	R24,R22
     102 7F80      ANDI	R24,0xF0
     103 2B84      OR	R24,R20
     104 BB88      OUT	0x18,R24
(0144) lcd_clear_rw() ; // Set LCD to write
     105 98C1      CBI	0x18,1
(0145) lcd_set_rs(); // Set LCD to data
     106 9AC0      SBI	0x18,0
(0146) lcd_set_e(); // Write data to LCD
     107 9AC2      SBI	0x18,2
(0147) asm("nop");
     108 0000      NOP
(0148) asm("nop");
     109 0000      NOP
(0149) lcd_clear_e(); // Disable LCD
     10A 98C2      CBI	0x18,2
(0150) LCD_OP_PORT = (Data << 4)|temp; // Load low-data to port
     10B 2F86      MOV	R24,R22
     10C 708F      ANDI	R24,0xF
     10D 9582      SWAP	R24
     10E 2B84      OR	R24,R20
     10F BB88      OUT	0x18,R24
(0151) lcd_clear_rw() ; // Set LCD to write
     110 98C1      CBI	0x18,1
(0152) lcd_set_rs(); // Set LCD to data
     111 9AC0      SBI	0x18,0
(0153) lcd_set_e(); // Write data to LCD
     112 9AC2      SBI	0x18,2
(0154) asm("nop");
     113 0000      NOP
(0155) asm("nop");
     114 0000      NOP
(0156) lcd_clear_e(); // Disable LCD
     115 98C2      CBI	0x18,2
     116 9169      LD	R22,Y+
     117 9149      LD	R20,Y+
     118 9508      RET
(0157) }
(0158) // ********************************* //
(0159) // *** Initialize the LCD driver *** //
(0160) // ********************************* //
(0161) void Init_LCD(void)
(0162) {
(0163) LCD_INIT();
_Init_LCD:
     119 DF77      RCALL	_LCD_INIT
(0164) LCD_WriteControl (LCD_FUNCTION_SET);
     11A E208      LDI	R16,0x28
     11B DFBD      RCALL	_LCD_WriteControl
(0165) LCD_WriteControl (LCD_OFF);
     11C E008      LDI	R16,0x8
     11D DFBB      RCALL	_LCD_WriteControl
(0166) LCD_WriteControl (LCD_CLEAR);
     11E E001      LDI	R16,1
     11F DFB9      RCALL	_LCD_WriteControl
(0167) LCD_WriteControl (LCD_MODE_SET);
     120 E006      LDI	R16,6
     121 DFB7      RCALL	_LCD_WriteControl
(0168) LCD_WriteControl (LCD_ON);
     122 E00C      LDI	R16,0xC
     123 DFB5      RCALL	_LCD_WriteControl
(0169) LCD_WriteControl (LCD_HOME);
     124 E002      LDI	R16,2
     125 DFB3      RCALL	_LCD_WriteControl
     126 9508      RET
(0170) }
(0171) // ************************************************ //
(0172) // *** Clear the LCD screen (also homes cursor) *** //
(0173) // ************************************************ //
(0174) void LCD_Clear(void)
(0175) {
(0176) LCD_WriteControl(0x01);
_LCD_Clear:
     127 E001      LDI	R16,1
     128 DFB0      RCALL	_LCD_WriteControl
     129 9508      RET
(0177) }
(0178) // *********************************************** //
(0179) // *** Position the LCD cursor at row 1, col 1 *** //
(0180) // *********************************************** //
(0181) void LCD_Home(void)
(0182) {
(0183) LCD_WriteControl(0x02);
_LCD_Home:
     12A E002      LDI	R16,2
     12B DFAD      RCALL	_LCD_WriteControl
     12C 9508      RET
_LCD_DisplayCharacter:
  Char                 --> R10
     12D 92AA      ST	R10,-Y
     12E 2EA0      MOV	R10,R16
(0184) }
(0185) // ****************************************************************** //
(0186) // *** Display a single character, at the current cursor location *** //
(0187) // ****************************************************************** //
(0188) void LCD_DisplayCharacter (char Char)
(0189) {
(0190) LCD_WriteData (Char);
     12F 2D0A      MOV	R16,R10
     130 DFC8      RCALL	_LCD_WriteData
     131 90A9      LD	R10,Y+
     132 9508      RET
_LCD_DisplayString_F:
  string               --> R20
  column               --> R12
  row                  --> R10
     133 940E 026E CALL	push_xgset303C
     135 2EC2      MOV	R12,R18
     136 2EA0      MOV	R10,R16
     137 814E      LDD	R20,Y+6
     138 815F      LDD	R21,Y+7
(0191) }
(0192) // ********************************************************************* //
(0193) // *** Display a string at the specified row and column, using FLASH *** //
(0194) // ********************************************************************* //
(0195) void LCD_DisplayString_F (char row, char column , unsigned char __flash *string)
(0196) {
(0197) LCD_Cursor (row, column);
     139 2D2C      MOV	R18,R12
     13A 2D0A      MOV	R16,R10
     13B D021      RCALL	_LCD_Cursor
     13C C006      RJMP	0x0143
(0198) while (*string)
(0199) {
(0200) LCD_DisplayCharacter (*string++);
     13D 011A      MOVW	R2,R20
     13E 5F4F      SUBI	R20,0xFF
     13F 4F5F      SBCI	R21,0xFF
     140 01F1      MOVW	R30,R2
     141 9104      LPM	R16,255(Z)
     142 DFEA      RCALL	_LCD_DisplayCharacter
     143 01FA      MOVW	R30,R20
     144 9024      LPM	R2,-22(Z)
     145 2022      TST	R2
     146 F7B1      BNE	0x013D
     147 940C 0275 JMP	pop_xgset303C
_LCD_DisplayString:
  string               --> R10
  column               --> R14
  row                  --> R12
     149 940E 024F CALL	push_xgset00FC
     14B 2EE2      MOV	R14,R18
     14C 2EC0      MOV	R12,R16
     14D 80AE      LDD	R10,Y+6
     14E 80BF      LDD	R11,Y+7
(0201) }
(0202) }
(0203) // ******************************************************************* //
(0204) // *** Display a string at the specified row and column, using RAM *** //
(0205) // ******************************************************************* //
(0206) void LCD_DisplayString (char row, char column ,unsigned char *string)
(0207) {
(0208) LCD_Cursor (row, column);
     14F 2D2E      MOV	R18,R14
     150 2D0C      MOV	R16,R12
     151 D00B      RCALL	_LCD_Cursor
     152 C004      RJMP	0x0157
(0209) while (*string)
(0210) LCD_DisplayCharacter (*string++);
     153 01F5      MOVW	R30,R10
     154 9101      LD	R16,Z+
     155 015F      MOVW	R10,R30
     156 DFD6      RCALL	_LCD_DisplayCharacter
     157 01F5      MOVW	R30,R10
     158 8020      LDD	R2,Z+0
     159 2022      TST	R2
     15A F7C1      BNE	0x0153
     15B 940C 0244 JMP	pop_xgset00FC
_LCD_Cursor:
  column               --> R20
  row                  --> R10
     15D 940E 0260 CALL	push_xgsetF00C
     15F 2F42      MOV	R20,R18
     160 2EA0      MOV	R10,R16
(0211) }
(0212) // *************************************************** //
(0213) // *** Position the LCD cursor at "row", "column". *** //
(0214) // *************************************************** //
(0215) void LCD_Cursor (char row, char column)
(0216) {
(0217) switch (row) {
     161 2D6A      MOV	R22,R10
     162 2777      CLR	R23
     163 3061      CPI	R22,1
     164 E0E0      LDI	R30,0
     165 077E      CPC	R23,R30
     166 F069      BEQ	0x0174
     167 3062      CPI	R22,2
     168 E0E0      LDI	R30,0
     169 077E      CPC	R23,R30
     16A F071      BEQ	0x0179
     16B 3063      CPI	R22,3
     16C E0E0      LDI	R30,0
     16D 077E      CPC	R23,R30
     16E F079      BEQ	0x017E
     16F 3064      CPI	R22,4
     170 E0E0      LDI	R30,0
     171 077E      CPC	R23,R30
     172 F081      BEQ	0x0183
     173 C013      RJMP	0x0187
(0218) case 1: LCD_WriteControl (0x80 + column - 1); break;
     174 2F04      MOV	R16,R20
     175 5800      SUBI	R16,0x80
     176 5001      SUBI	R16,1
     177 DF61      RCALL	_LCD_WriteControl
     178 C00E      RJMP	0x0187
(0219) case 2: LCD_WriteControl (0xc0 + column - 1); break;
     179 2F04      MOV	R16,R20
     17A 5400      SUBI	R16,0x40
     17B 5001      SUBI	R16,1
     17C DF5C      RCALL	_LCD_WriteControl
     17D C009      RJMP	0x0187
(0220) case 3: LCD_WriteControl (0x94 + column - 1); break;
     17E 2F04      MOV	R16,R20
     17F 560C      SUBI	R16,0x6C
     180 5001      SUBI	R16,1
     181 DF57      RCALL	_LCD_WriteControl
     182 C004      RJMP	0x0187
(0221) case 4: LCD_WriteControl (0xd4 + column - 1); break;
     183 2F04      MOV	R16,R20
     184 520C      SUBI	R16,0x2C
     185 5001      SUBI	R16,1
     186 DF52      RCALL	_LCD_WriteControl
(0222) default: break;
     187 940C 0267 JMP	pop_xgsetF00C
(0223) }
(0224) }
(0225) // ************************** //
(0226) // *** Turn the cursor on *** //
(0227) // ************************** //
(0228) void LCD_Cursor_On (void)
(0229) {
(0230) LCD_WriteControl (LCD_CURS_ON);
_LCD_Cursor_On:
     189 E00D      LDI	R16,0xD
     18A DF4E      RCALL	_LCD_WriteControl
     18B 9508      RET
(0231) }
(0232) // *************************** //
(0233) // *** Turn the cursor off *** //
(0234) // *************************** //
(0235) void LCD_Cursor_Off (void)
(0236) {
(0237) LCD_WriteControl (LCD_ON);
_LCD_Cursor_Off:
     18C E00C      LDI	R16,0xC
     18D DF4B      RCALL	_LCD_WriteControl
     18E 9508      RET
(0238) }
(0239) // ******************** //
(0240) // *** Turn Off LCD *** //
(0241) // ******************** //
(0242) void LCD_Display_Off (void)
(0243) {
(0244) LCD_WriteControl(LCD_OFF);
_LCD_Display_Off:
     18F E008      LDI	R16,0x8
     190 DF48      RCALL	_LCD_WriteControl
     191 9508      RET
(0245) }
(0246) // ******************* //
(0247) // *** Turn On LCD *** //
(0248) // ******************* //
(0249) void LCD_Display_On (void)
(0250) {
(0251) LCD_WriteControl(LCD_ON);
_LCD_Display_On:
     192 E00C      LDI	R16,0xC
     193 DF45      RCALL	_LCD_WriteControl
     194 9508      RET
_main:
  msg                  --> R20
     195 9722      SBIW	R28,2
FILE: E:\新建文件夹\usart_icc\cfile\main.c
(0001) #define MAIN_C
(0002) #include "includes.h"
(0003) /***************************/
(0004) /*串口通信*/
(0005) /*晶振为4MHz*/
(0006) /*波特率为9600bps*/

⌨️ 快捷键说明

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