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

📄 usart.lst

📁 avr icc开发的avr单片机与pc机vb通讯控制程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0152) lcd_set_rs(); // Set LCD to data
    0116 9AC0      SBI	0x18,0
    0117 940E0213  CALL	<created procedures>
(0153) lcd_set_e(); // Write data to LCD
(0154) asm("nop");
(0155) asm("nop");
(0156) lcd_clear_e(); // Disable LCD
    0119 D0D6      RCALL	pop_gset2
    011A 9508      RET
(0157) }
(0158) // ********************************* //
(0159) // *** Initialize the LCD driver *** //
(0160) // ********************************* //
(0161) void Init_LCD(void)
(0162) {
(0163) LCD_INIT();
_Init_LCD:
    011B DFA6      RCALL	_LCD_INIT
(0164) LCD_WriteControl (LCD_FUNCTION_SET);
    011C E208      LDI	R16,0x28
    011D DFDF      RCALL	_LCD_WriteControl
(0165) LCD_WriteControl (LCD_OFF);
    011E E008      LDI	R16,0x8
    011F DFDD      RCALL	_LCD_WriteControl
(0166) LCD_WriteControl (LCD_CLEAR);
    0120 E001      LDI	R16,1
    0121 DFDB      RCALL	_LCD_WriteControl
(0167) LCD_WriteControl (LCD_MODE_SET);
    0122 E006      LDI	R16,6
    0123 DFD9      RCALL	_LCD_WriteControl
(0168) LCD_WriteControl (LCD_ON);
    0124 E00C      LDI	R16,0xC
    0125 DFD7      RCALL	_LCD_WriteControl
(0169) LCD_WriteControl (LCD_HOME);
    0126 E002      LDI	R16,2
    0127 DFD5      RCALL	_LCD_WriteControl
    0128 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:
    0129 E001      LDI	R16,1
    012A DFD2      RCALL	_LCD_WriteControl
    012B 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:
    012C E002      LDI	R16,2
    012D DFCF      RCALL	_LCD_WriteControl
    012E 9508      RET
_LCD_DisplayCharacter:
  Char                 --> R20
    012F D0CC      RCALL	push_gset1
    0130 2F40      MOV	R20,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);
    0131 2F04      MOV	R16,R20
    0132 DFD9      RCALL	_LCD_WriteData
    0133 D0CB      RCALL	pop_gset1
    0134 9508      RET
_LCD_DisplayString_F:
  string               --> R20
  column               --> R10
  row                  --> R22
    0135 D0C2      RCALL	push_gset3
    0136 940E0229  CALL	0x229
(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 const *string)
(0196) {
(0197) LCD_Cursor (row, column);
    0138 D01C      RCALL	_LCD_Cursor
    0139 C006      RJMP	0x0140
(0198) while (*string)
(0199) {
(0200) LCD_DisplayCharacter (*string++);
    013A 011A      MOVW	R2,R20
    013B 5F4F      SUBI	R20,0xFF
    013C 4F5F      SBCI	R21,0xFF
    013D 01F1      MOVW	R30,R2
    013E 9104      LPM	R16,0(Z)
    013F DFEF      RCALL	_LCD_DisplayCharacter
    0140 01FA      MOVW	R30,R20
    0141 91E4      LPM	R30,0(Z)
    0142 23EE      TST	R30
    0143 F7B1      BNE	0x013A
    0144 D0AD      RCALL	pop_gset3
    0145 9508      RET
_LCD_DisplayString:
  string               --> R20
  column               --> R10
  row                  --> R22
    0146 D0B1      RCALL	push_gset3
    0147 940E0229  CALL	0x229
(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);
    0149 D00B      RCALL	_LCD_Cursor
    014A C004      RJMP	0x014F
(0209) while (*string)
(0210) LCD_DisplayCharacter (*string++);
    014B 01FA      MOVW	R30,R20
    014C 9101      LD	R16,Z+
    014D 01AF      MOVW	R20,R30
    014E DFE0      RCALL	_LCD_DisplayCharacter
    014F 01FA      MOVW	R30,R20
    0150 8020      LDD	R2,Z+0
    0151 2022      TST	R2
    0152 F7C1      BNE	0x014B
    0153 D09E      RCALL	pop_gset3
    0154 9508      RET
_LCD_Cursor:
  column               --> R20
  row                  --> R22
    0155 D0A4      RCALL	push_gset2
    0156 2F42      MOV	R20,R18
    0157 2F60      MOV	R22,R16
(0211) }
(0212) // *************************************************** //
(0213) // *** Position the LCD cursor at "row", "column". *** //
(0214) // *************************************************** //
(0215) void LCD_Cursor (char row, char column)
(0216) {
(0217) switch (row) {
    0158 2777      CLR	R23
    0159 3061      CPI	R22,1
    015A E0E0      LDI	R30,0
    015B 077E      CPC	R23,R30
    015C F069      BEQ	0x016A
    015D 3062      CPI	R22,2
    015E E0E0      LDI	R30,0
    015F 077E      CPC	R23,R30
    0160 F071      BEQ	0x016F
    0161 3063      CPI	R22,3
    0162 E0E0      LDI	R30,0
    0163 077E      CPC	R23,R30
    0164 F079      BEQ	0x0174
    0165 3064      CPI	R22,4
    0166 E0E0      LDI	R30,0
    0167 077E      CPC	R23,R30
    0168 F081      BEQ	0x0179
    0169 C013      RJMP	0x017D
(0218) case 1: LCD_WriteControl (0x80 + column - 1); break;
    016A 2F04      MOV	R16,R20
    016B 5800      SUBI	R16,0x80
    016C 5001      SUBI	R16,1
    016D DF8F      RCALL	_LCD_WriteControl
    016E C00E      RJMP	0x017D
(0219) case 2: LCD_WriteControl (0xc0 + column - 1); break;
    016F 2F04      MOV	R16,R20
    0170 5400      SUBI	R16,0x40
    0171 5001      SUBI	R16,1
    0172 DF8A      RCALL	_LCD_WriteControl
    0173 C009      RJMP	0x017D
(0220) case 3: LCD_WriteControl (0x94 + column - 1); break;
    0174 2F04      MOV	R16,R20
    0175 560C      SUBI	R16,0x6C
    0176 5001      SUBI	R16,1
    0177 DF85      RCALL	_LCD_WriteControl
    0178 C004      RJMP	0x017D
(0221) case 4: LCD_WriteControl (0xd4 + column - 1); break;
    0179 2F04      MOV	R16,R20
    017A 520C      SUBI	R16,0x2C
    017B 5001      SUBI	R16,1
    017C DF80      RCALL	_LCD_WriteControl
(0222) default: break;
    017D D072      RCALL	pop_gset2
    017E 9508      RET
(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:
    017F E00D      LDI	R16,0xD
    0180 DF7C      RCALL	_LCD_WriteControl
    0181 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:
    0182 E00C      LDI	R16,0xC
    0183 DF79      RCALL	_LCD_WriteControl
    0184 9508      RET
(0238) }
(0239) // ******************** //
(0240) // *** Turn Off LCD *** //
(0241) // ******************** //
(0242) void LCD_Display_Off (void)
(0243) {
(0244) LCD_WriteControl(LCD_OFF);
_LCD_Display_Off:
    0185 E008      LDI	R16,0x8
    0186 DF76      RCALL	_LCD_WriteControl
    0187 9508      RET
(0245) }
(0246) // ******************* //
(0247) // *** Turn On LCD *** //
(0248) // ******************* //
(0249) void LCD_Display_On (void)
(0250) {
(0251) LCD_WriteControl(LCD_ON);
_LCD_Display_On:
    0188 E00C      LDI	R16,0xC
    0189 DF73      RCALL	_LCD_WriteControl
    018A 9508      RET
_main:
  msg                  --> R20
    018B 9722      SBIW	R28,2
FILE: D:\dai\AVR_USART\main.c
(0001) #define MAIN_C
(0002) #include "includes.h"
(0003) /***************************/
(0004) /*串口通信*/
(0005) /*晶振为4MHz*/
(0006) /*波特率为9600bps*/
(0007) /*发送采用查询方式,接收采用中断方式*/
(0008) /*当收到的字符达到所定义的长度时,则在LCD上显示收到的字符*/
(0009) /***************************/
(0010) #define BufSize 10
(0011) unsigned char RsBuf[BufSize];  //定义接收缓冲器
(0012) int RsBytes = 0;
(0013) unsigned char flag = 0;
(0014) void main(void)
(0015) {
(0016)     unsigned char *msg = "Usart Test!\n";    
    018C E849      LDI	R20,0x89
    018D E050      LDI	R21,0
(0017)     SREG |= (1<<7);  //使能全局中断
    018E 9478      BSET	7
(0018)     UsartInit();
    018F DED5      RCALL	_UsartInit
(0019)     Init_LCD();
    0190 DF8A      RCALL	_Init_LCD
(0020)     SendNbyte(msg,12);
    0191 E02C      LDI	R18,0xC
    0192 018A      MOVW	R16,R20
    0193 DEEA      RCALL	_SendNbyte
(0021)     PutStr("Test Ok\n");   
    0194 E800      LDI	R16,0x80
    0195 E010      LDI	R17,0
    0196 DEF7      RCALL	_PutStr
(0022)     LCD_DisplayString(1,1,"Usart Test!");
    0197 E784      LDI	R24,0x74
    0198 940E0230  CALL	0x230
    019A E001      LDI	R16,1
    019B DFAA      RCALL	_LCD_DisplayString
(0023)     delay_nms(2000);
    019C ED00      LDI	R16,0xD0
    019D E017      LDI	R17,7
    019E DF16      RCALL	_delay_nms
(0024)     LCD_Clear();
    019F DF89      RCALL	_LCD_Clear
(0025)     LCD_DisplayString(1,1,"Recive is :");    
    01A0 E688      LDI	R24,0x68
    01A1 940E0230  CALL	0x230
    01A3 E001      LDI	R16,1
    01A4 DFA1      RCALL	_LCD_DisplayString
    01A5 C016      RJMP	0x01BC
(0026)     while(1)
(0027)     {PORTA =UDR-0x30 ;
    01A6 B18C      IN	R24,0x0C
    01A7 5380      SUBI	R24,0x30
    01A8 BB8B      OUT	0x1B,R24
(0028)           DDRA  = 0xff;
    01A9 EF8F      LDI	R24,0xFF
    01AA BB8A      OUT	0x1A,R24
(0029)         if(flag)
    01AB 90200067  LDS	R2,flag
    01AD 2022      TST	R2
    01AE F069      BEQ	0x01BC
(0030)         {
(0031)            PutStr(RsBuf);
    01AF E906      LDI	R16,0x96
    01B0 E010      LDI	R17,0
    01B1 DEDC      RCALL	_PutStr
(0032) 		  
(0033)            LCD_DisplayString(2,1,RsBuf);           
    01B2 E986      LDI	R24,0x96
    01B3 940E0230  CALL	0x230
    01B5 E002      LDI	R16,2
    01B6 DF8F      RCALL	_LCD_DisplayString
(0034)            PutChar('\n');
    01B7 E00A      LDI	R16,0xA
    01B8 DEB7      RCALL	_PutChar
(0035)            flag = 0;
    01B9 2422      CLR	R2
    01BA 92200067  STS	flag,R2
    01BC CFE9      RJMP	0x01A6
    01BD 9622      ADIW	R28,2
    01BE 9508      RET
_uart0_rx_isr:
    01BF 922A      ST	R2,-Y
    01C0 923A      ST	R3,-Y
    01C1 938A      ST	R24,-Y
    01C2 939A      ST	R25,-Y
    01C3 93EA      ST	R30,-Y
    01C4 93FA      ST	R31,-Y
    01C5 B62F      IN	R2,0x3F
    01C6 922A      ST	R2,-Y
(0036)         }
(0037)     }
(0038) }
(0039) 
(0040) //接收中断子程序  
(0041) 
(0042) 
(0043) 
(0044) #pragma interrupt_handler uart0_rx_isr:12
(0045) void uart0_rx_isr(void)
(0046) {
(0047)  //uart has received a character in UDR
(0048)   RsBuf[RsBytes] = UDR;
    01C7 E986      LDI	R24,0x96
    01C8 E090      LDI	R25,0
    01C9 91E00065  LDS	R30,RsBytes
    01CB 91F00066  LDS	R31,RsBytes+1
    01CD 0FE8      ADD	R30,R24
    01CE 1FF9      ADC	R31,R25
    01CF B02C      IN	R2,0x0C
    01D0 8220      STD	Z+0,R2
(0049)     RsBytes ++;
    01D1 91800065  LDS	R24,RsBytes
    01D3 91900066  LDS	R25,RsBytes+1
    01D5 9601      ADIW	R24,1
    01D6 93900066  STS	RsBytes+1,R25
    01D8 93800065  STS	RsBytes,R24
(0050)    // PutChar(RsBuf[RsBytes]); //回显
(0051)     if(RsBytes >= BufSize)
    01DA 308A      CPI	R24,0xA
    01DB E0E0      LDI	R30,0
    01DC 079E      CPC	R25,R30
    01DD F04C      BLT	0x01E7
(0052)     {   
(0053)         flag = 1;
    01DE E081      LDI	R24,1
    01DF 93800067  STS	flag,R24
(0054)         RsBytes = 0;
    01E1 2422      CLR	R2
    01E2 2433      CLR	R3
    01E3 92300066  STS	RsBytes+1,R3
    01E5 92200065  STS	RsBytes,R2
(0055)     }
FILE: <library>
    01E7 9029      LD	R2,Y+
    01E8 BE2F      OUT	0x3F,R2
    01E9 91F9      LD	R31,Y+
    01EA 91E9      LD	R30,Y+
    01EB 9199      LD	R25,Y+
    01EC 9189      LD	R24,Y+
    01ED 9039      LD	R3,Y+
    01EE 9029      LD	R2,Y+
    01EF 9518      RETI
pop_gset2:
    01F0 E0E2      LDI	R30,2
    01F1 C00E      RJMP	pop
pop_gset3:
    01F2 E0E4      LDI	R30,4
    01F3 C00C      RJMP	pop
push_gset5:
    01F4 92FA      ST	R15,-Y
    01F5 92EA      ST	R14,-Y
push_gset4:
    01F6 92DA      ST	R13,-Y
    01F7 92CA      ST	R12,-Y
push_gset3:
    01F8 92BA      ST	R11,-Y
    01F9 92AA      ST	R10,-Y
push_gset2:
    01FA 937A      ST	R23,-Y
    01FB 936A      ST	R22,-Y
push_gset1:
    01FC 935A      ST	R21,-Y
    01FD 934A      ST	R20,-Y
    01FE 9508      RET
pop_gset1:
    01FF E0E1      LDI	R30,1
pop:
    0200 9149      LD	R20,Y+
    0201 9159      LD	R21,Y+
    0202 FDE0      SBRC	R30,0
    0203 9508      RET
    0204 9169      LD	R22,Y+
    0205 9179      LD	R23,Y+
    0206 FDE1      SBRC	R30,1
    0207 9508      RET
    0208 90A9      LD	R10,Y+
    0209 90B9      LD	R11,Y+
    020A FDE2      SBRC	R30,2
    020B 9508      RET
    020C 90C9      LD	R12,Y+
    020D 90D9      LD	R13,Y+
    020E FDE3      SBRC	R30,3
    020F 9508      RET
    0210 90E9      LD	R14,Y+
    0211 90F9      LD	R15,Y+
    0212 9508      RET
<created procedures>:
    0213 9AC2      SBI	0x18,2
    0214 0000      NOP
    0215 0000      NOP
    0216 98C2      CBI	0x18,2
    0217 9508      RET
    0218 EF8F      LDI	R24,0xFF
    0219 BB87      OUT	0x17,R24
    021A B348      IN	R20,0x18
    021B 7048      ANDI	R20,0x8
    021C 2F86      MOV	R24,R22
    021D 7F80      ANDI	R24,0xF0
    021E 2B84      OR	R24,R20
    021F BB88      OUT	0x18,R24
    0220 98C1      CBI	0x18,1
    0221 9508      RET
    0222 2F86      MOV	R24,R22
    0223 708F      ANDI	R24,0xF
    0224 9582      SWAP	R24
    0225 2B84      OR	R24,R20
    0226 BB88      OUT	0x18,R24
    0227 98C1      CBI	0x18,1
    0228 9508      RET
    0229 2EA2      MOV	R10,R18
    022A 2F60      MOV	R22,R16
    022B 814E      LDD	R20,Y+6
    022C 815F      LDD	R21,Y+7
    022D 2D2A      MOV	R18,R10
    022E 2F06      MOV	R16,R22
    022F 9508      RET
    0230 E090      LDI	R25,0
    0231 8399      STD	Y+1,R25
    0232 8388      STD	Y+0,R24
    0233 E021      LDI	R18,1
    0234 9508      RET

⌨️ 快捷键说明

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