📄 raingauge.lst
字号:
(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 + -