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

📄 raingauge.lst

📁 ICCAVR Rainguage counter program
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0003) 
(0004) void uart_putc(unsigned char c) {
(0005)    // wait until UDR ready
(0006) 	while(!(UCSRA & (1 << UDRE))) {};
_uart_putc:
  c                    --> R16
    0162 9B5D      SBIS	0x0B,5
    0163 CFFE      RJMP	_uart_putc
(0007) 	UDR = c;    // send character
    0164 B90C      OUT	0x0C,R16
    0165 9508      RET
_uart_puts:
  s                    --> R20
    0166 940E025A  CALL	push_gset1
    0168 01A8      MOVW	R20,R16
(0008) }
(0009) 
(0010) void uart_puts(char *s) {
    0169 C005      RJMP	0x016F
(0011) 	//  loop until *s != NULL
(0012) 	while (*s) {
(0013) 		uart_putc(*s);
    016A 01FA      MOVW	R30,R20
    016B 8100      LDD	R16,Z+0
    016C DFF5      RCALL	_uart_putc
(0014) 		s++;
    016D 5F4F      SUBI	R20,0xFF
    016E 4F5F      SBCI	R21,0xFF
    016F 01FA      MOVW	R30,R20
    0170 8020      LDD	R2,Z+0
    0171 2022      TST	R2
    0172 F7B9      BNE	0x016A
    0173 940E025D  CALL	pop_gset1
    0175 9508      RET
(0015) 	}
(0016) }
(0017) 
(0018) void SPI_MasterTransmit (char cData)
(0019) {
(0020)  SPDR = cData;
_SPI_MasterTransmit:
  cData                --> R16
    0176 B90F      OUT	0x0F,R16
(0021)  while( !(SPDR & (1 <<SPIF)) );
    0177 9B7F      SBIS	0x0F,7
    0178 CFFE      RJMP	0x0177
    0179 9508      RET
_LCD_Delay:
  n                    --> Y+0
  d                    --> Y+8
    017A 940E0218  CALL	push_arg4
    017C 940E0258  CALL	push_gset2
    017E 9724      SBIW	R28,4
FILE: C:\RGauge\lcd.c
(0001) //LCD DISPLAY
(0002) #include "lcd.h"
(0003) 
(0004) void LCD_Delay (unsigned long int d) 
(0005) { 
(0006)     unsigned long int n; 
(0007)     for (n = 0; n < d; n++); 
    017F E040      LDI	R20,0
    0180 E050      LDI	R21,0
    0181 E060      LDI	R22,0
    0182 E070      LDI	R23,0
    0183 01FE      MOVW	R30,R28
    0184 8340      STD	Z+0,R20
    0185 8351      STD	Z+1,R21
    0186 8362      STD	Z+2,R22
    0187 8373      STD	Z+3,R23
    0188 C012      RJMP	0x019B
    0189 E041      LDI	R20,1
    018A E050      LDI	R21,0
    018B E060      LDI	R22,0
    018C E070      LDI	R23,0
    018D 01FE      MOVW	R30,R28
    018E 8020      LDD	R2,Z+0
    018F 8031      LDD	R3,Z+1
    0190 8042      LDD	R4,Z+2
    0191 8053      LDD	R5,Z+3
    0192 0E24      ADD	R2,R20
    0193 1E35      ADC	R3,R21
    0194 1E46      ADC	R4,R22
    0195 1E57      ADC	R5,R23
    0196 01FE      MOVW	R30,R28
    0197 8220      STD	Z+0,R2
    0198 8231      STD	Z+1,R3
    0199 8242      STD	Z+2,R4
    019A 8253      STD	Z+3,R5
    019B 01FE      MOVW	R30,R28
    019C 8420      LDD	R2,Z+8
    019D 8431      LDD	R3,Z+9
    019E 8442      LDD	R4,Z+10
    019F 8453      LDD	R5,Z+11
    01A0 01FE      MOVW	R30,R28
    01A1 8060      LDD	R6,Z+0
    01A2 8071      LDD	R7,Z+1
    01A3 8082      LDD	R8,Z+2
    01A4 8093      LDD	R9,Z+3
    01A5 1462      CP	R6,R2
    01A6 0473      CPC	R7,R3
    01A7 0484      CPC	R8,R4
    01A8 0495      CPC	R9,R5
    01A9 F2F8      BCS	0x0189
    01AA 9624      ADIW	R28,4
    01AB 940E0249  CALL	pop_gset2
    01AD 9624      ADIW	R28,4
    01AE 9508      RET
_LCD_IO_INIT:
    01AF 940E0258  CALL	push_gset2
(0008) } 
(0009) 
(0010) void LCD_IO_INIT (void) 
(0011) { 
(0012)     DataDDR = 0xFF; // Selected PORT is the LCD DATA LINES 
    01B1 EF8F      LDI	R24,0xFF
    01B2 BB8A      OUT	0x1A,R24
(0013)     DataPort = 0x00; 
    01B3 2422      CLR	R2
    01B4 BA2B      OUT	0x1B,R2
(0014)     CtrlDDR |= 0x07; // the LCD CONTROL LINES 
    01B5 B384      IN	R24,0x14
    01B6 6087      ORI	R24,7
    01B7 BB84      OUT	0x14,R24
(0015)     CtrlPort |= 0x05; // LCD_RS = HIGH, LCD_RW = LOW, LCD_E = HIGH,
    01B8 B385      IN	R24,0x15
    01B9 6085      ORI	R24,5
    01BA BB85      OUT	0x15,R24
(0016)     LCD_Delay (500); // Wait for the up LCD to power up          
    01BB EF04      LDI	R16,0xF4
    01BC E011      LDI	R17,1
    01BD E020      LDI	R18,0
    01BE E030      LDI	R19,0
    01BF DFBA      RCALL	_LCD_Delay
    01C0 940E0249  CALL	pop_gset2
    01C2 9508      RET
_LCD_INIT:
    01C3 940E0258  CALL	push_gset2
(0017) } 
(0018) 
(0019) void LCD_INIT (void) 
(0020) { 
(0021)     LCD_PutCmd (PWR_CMD); // Power up the display 
    01C5 E00C      LDI	R16,0xC
    01C6 D011      RCALL	_LCD_PutCmd
(0022)     LCD_PutCmd (DL_CMD);  // Set to 4 lines, 8 bit, no cursor 
    01C7 E308      LDI	R16,0x38
    01C8 D00F      RCALL	_LCD_PutCmd
(0023)     LCD_PutCmd (CLR_DSP); // Clear the display 
    01C9 E001      LDI	R16,1
    01CA D00D      RCALL	_LCD_PutCmd
(0024)     LCD_Delay (500); // Wait for the LCD to boot up
    01CB EF04      LDI	R16,0xF4
    01CC E011      LDI	R17,1
    01CD E020      LDI	R18,0
    01CE E030      LDI	R19,0
    01CF DFAA      RCALL	_LCD_Delay
(0025) 	
(0026) 	LCD_PutCmd(LINE1);
    01D0 E800      LDI	R16,0x80
    01D1 D006      RCALL	_LCD_PutCmd
(0027) 	LCD_PutString("System Starting"); //init message displayed on line 1
    01D2 E70F      LDI	R16,0x7F
    01D3 E010      LDI	R17,0
    01D4 D02A      RCALL	_LCD_PutString
    01D5 940E0249  CALL	pop_gset2
    01D7 9508      RET
_LCD_PutCmd:
  c                    --> R10
    01D8 940E0256  CALL	push_gset3
    01DA 2EA0      MOV	R10,R16
(0028) 
(0029) } 
(0030)   
(0031) void LCD_PutCmd (char c) 
(0032) { 
(0033)   CtrlPort &= ~(1<<LCD_RS); 
    01DB 98A8      CBI	0x15,0
(0034)   LCD_Delay (5); // Wait for the proper setup time to respond to the RS control line  
    01DC E005      LDI	R16,5
    01DD E010      LDI	R17,0
    01DE E020      LDI	R18,0
    01DF E030      LDI	R19,0
    01E0 DF99      RCALL	_LCD_Delay
(0035)   LCD_PutChar(c); 
    01E1 2D0A      MOV	R16,R10
    01E2 D009      RCALL	_LCD_PutChar
(0036)   LCD_Delay (5); // Wait for the proper setup time to respond to the command being applied 
    01E3 E005      LDI	R16,5
    01E4 E010      LDI	R17,0
    01E5 E020      LDI	R18,0
    01E6 E030      LDI	R19,0
    01E7 DF92      RCALL	_LCD_Delay
(0037)   CtrlPort |= (1<<LCD_RS); 
    01E8 9AA8      SBI	0x15,0
    01E9 940E024C  CALL	pop_gset3
    01EB 9508      RET
_LCD_PutChar:
  c                    --> R10
    01EC 940E0256  CALL	push_gset3
    01EE 2EA0      MOV	R10,R16
(0038) } 
(0039) 
(0040) void LCD_PutChar (char c) 
(0041) { 
(0042)     CtrlPort |= (1<<LCD_E); 
    01EF 9AAA      SBI	0x15,2
(0043)     LCD_Delay (5); // Wait for the proper setup time to respond to the E pulse    
    01F0 E005      LDI	R16,5
    01F1 E010      LDI	R17,0
    01F2 E020      LDI	R18,0
    01F3 E030      LDI	R19,0
    01F4 DF85      RCALL	_LCD_Delay
(0044)     DataPort = c; 
    01F5 BAAB      OUT	0x1B,R10
(0045)     LCD_Delay (5); // Wait for the proper setup time to respond to the character being applied 
    01F6 E005      LDI	R16,5
    01F7 E010      LDI	R17,0
    01F8 E020      LDI	R18,0
    01F9 E030      LDI	R19,0
    01FA DF7F      RCALL	_LCD_Delay
(0046)     CtrlPort &= ~(1<<LCD_E); 
    01FB 98AA      CBI	0x15,2
    01FC 940E024C  CALL	pop_gset3
    01FE 9508      RET
_LCD_PutString:
  p                    --> R20
    01FF 940E025A  CALL	push_gset1
    0201 01A8      MOVW	R20,R16
(0047) } 
(0048)   
(0049) void LCD_PutString (unsigned char *p) 
(0050) { 
    0202 C005      RJMP	0x0208
(0051) 
(0052)     // Keep sending data until the p pointer is end. 
(0053)         while(*p) {
(0054) 		 LCD_PutChar(*p);
    0203 01FA      MOVW	R30,R20
    0204 8100      LDD	R16,Z+0
    0205 DFE6      RCALL	_LCD_PutChar
(0055) 		 p++;
FILE: <library>
    0206 5F4F      SUBI	R20,0xFF
    0207 4F5F      SBCI	R21,0xFF
    0208 01FA      MOVW	R30,R20
    0209 8020      LDD	R2,Z+0
    020A 2022      TST	R2
    020B F7B9      BNE	0x0203
    020C 940E025D  CALL	pop_gset1
    020E 9508      RET
_strcpy:
    020F 2FA0      MOV	R26,R16
    0210 2FB1      MOV	R27,R17
    0211 2FE2      MOV	R30,R18
    0212 2FF3      MOV	R31,R19
    0213 9001      LD	R0,Z+
    0214 920D      ST	R0,X+
    0215 2000      TST	R0
    0216 F7E1      BNE	0x0213
    0217 9508      RET
push_arg4:
    0218 933A      ST	R19,-Y
    0219 932A      ST	R18,-Y
push_arg2:
    021A 931A      ST	R17,-Y
    021B 930A      ST	R16,-Y
    021C 9508      RET
mod16u:
    021D 9468      BSET	6
    021E C001      RJMP	xdiv16u
div16u:
    021F 94E8      BCLR	6
xdiv16u:
    0220 92EA      ST	R14,-Y
    0221 92FA      ST	R15,-Y
    0222 938A      ST	R24,-Y
    0223 24EE      CLR	R14
    0224 24FF      CLR	R15
    0225 E180      LDI	R24,0x10
    0226 0F00      LSL	R16
    0227 1F11      ROL	R17
    0228 1CEE      ROL	R14
    0229 1CFF      ROL	R15
    022A 16E2      CP	R14,R18
    022B 06F3      CPC	R15,R19
    022C F018      BCS	0x0230
    022D 1AE2      SUB	R14,R18
    022E 0AF3      SBC	R15,R19
    022F 9503      INC	R16
    0230 958A      DEC	R24
    0231 F7A1      BNE	0x0226
    0232 F416      BRTC	0x0235
    0233 2D0E      MOV	R16,R14
    0234 2D1F      MOV	R17,R15
    0235 9189      LD	R24,Y+
    0236 90F9      LD	R15,Y+
    0237 90E9      LD	R14,Y+
    0238 9508      RET
empy16s:
    0239 920A      ST	R0,-Y
    023A 921A      ST	R1,-Y
    023B 938A      ST	R24,-Y
    023C 939A      ST	R25,-Y
    023D 9F02      MUL	R16,R18
    023E 01C0      MOVW	R24,R0
    023F 9F12      MUL	R17,R18
    0240 0D90      ADD	R25,R0
    0241 9F03      MUL	R16,R19
    0242 0D90      ADD	R25,R0
    0243 018C      MOVW	R16,R24
    0244 9199      LD	R25,Y+
    0245 9189      LD	R24,Y+
    0246 9019      LD	R1,Y+
    0247 9009      LD	R0,Y+
    0248 9508      RET
pop_gset2:
    0249 E0E2      LDI	R30,2
    024A 940C025E  JMP	pop
pop_gset3:
    024C E0E4      LDI	R30,4
    024D 940C025E  JMP	pop
pop_gset4:
    024F E0E8      LDI	R30,0x8
    0250 940C025E  JMP	pop
push_gset5:
    0252 92FA      ST	R15,-Y
    0253 92EA      ST	R14,-Y
push_gset4:
    0254 92DA      ST	R13,-Y
    0255 92CA      ST	R12,-Y
push_gset3:
    0256 92BA      ST	R11,-Y
    0257 92AA      ST	R10,-Y
push_gset2:
    0258 937A      ST	R23,-Y
    0259 936A      ST	R22,-Y
push_gset1:
    025A 935A      ST	R21,-Y
    025B 934A      ST	R20,-Y
    025C 9508      RET
pop_gset1:
    025D E0E1      LDI	R30,1
pop:
    025E 9149      LD	R20,Y+
    025F 9159      LD	R21,Y+
    0260 FDE0      SBRC	R30,0
    0261 9508      RET
    0262 9169      LD	R22,Y+
    0263 9179      LD	R23,Y+
    0264 FDE1      SBRC	R30,1
    0265 9508      RET
    0266 90A9      LD	R10,Y+
    0267 90B9      LD	R11,Y+
    0268 FDE2      SBRC	R30,2
    0269 9508      RET
    026A 90C9      LD	R12,Y+
    026B 90D9      LD	R13,Y+
    026C FDE3      SBRC	R30,3
    026D 9508      RET
    026E 90E9      LD	R14,Y+
    026F 90F9      LD	R15,Y+
    0270 9508      RET
push_lset:
    0271 93FA      ST	R31,-Y
    0272 93EA      ST	R30,-Y
    0273 93BA      ST	R27,-Y
    0274 93AA      ST	R26,-Y
    0275 939A      ST	R25,-Y
    0276 938A      ST	R24,-Y
    0277 933A      ST	R19,-Y
    0278 932A      ST	R18,-Y
    0279 931A      ST	R17,-Y
    027A 930A      ST	R16,-Y
    027B 929A      ST	R9,-Y
    027C 928A      ST	R8,-Y
    027D 927A      ST	R7,-Y
    027E 926A      ST	R6,-Y
    027F 925A      ST	R5,-Y
    0280 924A      ST	R4,-Y
    0281 923A      ST	R3,-Y
    0282 922A      ST	R2,-Y
    0283 921A      ST	R1,-Y
    0284 920A      ST	R0,-Y
    0285 B60F      IN	R0,0x3F
    0286 920A      ST	R0,-Y
    0287 9508      RET
pop_lset:
    0288 9009      LD	R0,Y+
    0289 BE0F      OUT	0x3F,R0
    028A 9009      LD	R0,Y+
    028B 9019      LD	R1,Y+
    028C 9029      LD	R2,Y+
    028D 9039      LD	R3,Y+
    028E 9049      LD	R4,Y+
    028F 9059      LD	R5,Y+
    0290 9069      LD	R6,Y+
    0291 9079      LD	R7,Y+
    0292 9089      LD	R8,Y+
    0293 9099      LD	R9,Y+
    0294 9109      LD	R16,Y+
    0295 9119      LD	R17,Y+
    0296 9129      LD	R18,Y+
    0297 9139      LD	R19,Y+
    0298 9189      LD	R24,Y+
    0299 9199      LD	R25,Y+
    029A 91A9      LD	R26,Y+
    029B 91B9      LD	R27,Y+
    029C 91E9      LD	R30,Y+
    029D 91F9      LD	R31,Y+
    029E 9508      RET
_utoa:
    029F 940E0254  CALL	push_gset4
    02A1 2EA2      MOV	R10,R18
    02A2 2EB3      MOV	R11,R19
    02A3 2EC0      MOV	R12,R16
    02A4 2ED1      MOV	R13,R17
    02A5 97A2      SBIW	R28,0x22
    02A6 A56A      LDD	R22,Y+42
    02A7 A57B      LDD	R23,Y+43
    02A8 2422      CLR	R2
    02A9 A229      STD	Y+33,R2
    02AA 2F4C      MOV	R20,R28
    02AB 2F5D      MOV	R21,R29
    02AC 5D4F      SUBI	R20,0xDF
    02AD 4F5F      SBCI	R21,0xFF
    02AE 2F84      MOV	R24,R20
    02AF 2F95      MOV	R25,R21
    02B0 9701      SBIW	R24,1
    02B1 2E28      MOV	R2,R24
    02B2 2E39      MOV	R3,R25
    02B3 2F48      MOV	R20,R24
    02B4 2F59      MOV	R21,R25
    02B5 2F26      MOV	R18,R22
    02B6 2F37      MOV	R19,R23
    02B7 2D0A      MOV	R16,R10
    02B8 2D1B      MOV	R17,R11
    02B9 940E021D  CALL	mod16u
    02BB 2FE0      MOV	R30,R16
    02BC 2FF1      MOV	R31,R17
    02BD E88F      LDI	R24,0x8F
    02BE E090      LDI	R25,0
    02BF 0FE8      ADD	R30,R24
    02C0 1FF9      ADC	R31,R25
    02C1 8040      LDD	R4,Z+0
    02C2 2DE2      MOV	R30,R2
    02C3 2DF3      MOV	R31,R3
    02C4 8240      STD	Z+0,R4
    02C5 2F26      MOV	R18,R22
    02C6 2F37      MOV	R19,R23
    02C7 2D0A      MOV	R16,R10
    02C8 2D1B      MOV	R17,R11
    02C9 940E021F  CALL	div16u
    02CB 2EA0      MOV	R10,R16
    02CC 2EB1      MOV	R11,R17
    02CD 20AA      TST	R10
    02CE F6F9      BNE	0x02AE
    02CF 20BB      TST	R11
    02D0 F6E9      BNE	0x02AE
    02D1 2F24      MOV	R18,R20
    02D2 2F35      MOV	R19,R21
    02D3 2D0C      MOV	R16,R12
    02D4 2D1D      MOV	R17,R13
    02D5 940E020F  CALL	_strcpy
    02D7 96A2      ADIW	R28,0x22
    02D8 940E024F  CALL	pop_gset4
    02DA 9508      RET

⌨️ 快捷键说明

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