📄 main.ls
字号:
5196 04df 1b05 add a,(OFST+1,sp)
5197 04e1 6b04 ld (OFST+0,sp),a
5198 ; 175 va_start(marker,str); // Initialize variable arguments.
5200 04e3 96 ldw x,sp
5201 04e4 1c000d addw x,#OFST+9
5202 04e7 1f02 ldw (OFST-2,sp),x
5203 ; 176 for(i=0;i<64;i++)
5205 04e9 0f01 clr (OFST-3,sp)
5206 04eb L7603:
5209 04eb 0c01 inc (OFST-3,sp)
5212 04ed 7b01 ld a,(OFST-3,sp)
5213 04ef a140 cp a,#64
5214 04f1 25f8 jrult L7603
5216 04f3 ac010601 jpf L7703
5217 04f7 L5703:
5218 ; 182 if(coordinate > 64) break; //防止堆栈溢出
5220 04f7 7b04 ld a,(OFST+0,sp)
5221 04f9 a141 cp a,#65
5222 04fb 2503 jrult L3013
5224 04fd L1013:
5225 ; 217 va_end( marker ); // Reset variable arguments.
5227 ; 218 }
5230 04fd 5b06 addw sp,#6
5231 04ff 81 ret
5232 0500 L3013:
5233 ; 184 if(*str == '\\')
5235 0500 1e0b ldw x,(OFST+7,sp)
5236 0502 f6 ld a,(x)
5237 0503 a15c cp a,#92
5238 0505 261b jrne L5013
5239 ; 186 str++;
5241 0507 1e0b ldw x,(OFST+7,sp)
5242 0509 1c0001 addw x,#1
5243 050c 1f0b ldw (OFST+7,sp),x
5244 ; 187 lcd_stack[coordinate] = *str;
5246 050e 7b09 ld a,(OFST+5,sp)
5247 0510 97 ld xl,a
5248 0511 7b0a ld a,(OFST+6,sp)
5249 0513 1b04 add a,(OFST+0,sp)
5250 0515 2401 jrnc L401
5251 0517 5c incw x
5252 0518 L401:
5253 0518 02 rlwa x,a
5254 0519 160b ldw y,(OFST+7,sp)
5255 051b 90f6 ld a,(y)
5256 051d f7 ld (x),a
5258 051e acf805f8 jpf L7013
5259 0522 L5013:
5260 ; 189 else if(*str == '%')
5262 0522 1e0b ldw x,(OFST+7,sp)
5263 0524 f6 ld a,(x)
5264 0525 a125 cp a,#37
5265 0527 2703 jreq L611
5266 0529 cc05e8 jp L1113
5267 052c L611:
5268 ; 191 str++;
5270 052c 1e0b ldw x,(OFST+7,sp)
5271 052e 1c0001 addw x,#1
5272 0531 1f0b ldw (OFST+7,sp),x
5273 ; 192 if (*str == 'd' || *str == 'D')
5275 0533 1e0b ldw x,(OFST+7,sp)
5276 0535 f6 ld a,(x)
5277 0536 a164 cp a,#100
5278 0538 2707 jreq L5113
5280 053a 1e0b ldw x,(OFST+7,sp)
5281 053c f6 ld a,(x)
5282 053d a144 cp a,#68
5283 053f 2637 jrne L3113
5284 0541 L5113:
5285 ; 194 str++;
5287 0541 1e0b ldw x,(OFST+7,sp)
5288 0543 1c0001 addw x,#1
5289 0546 1f0b ldw (OFST+7,sp),x
5290 ; 195 decToAscii(&lcd_stack[coordinate],va_arg(marker,u16),(*str-'0'));
5292 0548 1e0b ldw x,(OFST+7,sp)
5293 054a f6 ld a,(x)
5294 054b a030 sub a,#48
5295 054d 88 push a
5296 054e 1e03 ldw x,(OFST-1,sp)
5297 0550 1c0002 addw x,#2
5298 0553 1f03 ldw (OFST-1,sp),x
5299 0555 1e03 ldw x,(OFST-1,sp)
5300 0557 5a decw x
5301 0558 5a decw x
5302 0559 fe ldw x,(x)
5303 055a 89 pushw x
5304 055b 7b0c ld a,(OFST+8,sp)
5305 055d 97 ld xl,a
5306 055e 7b0d ld a,(OFST+9,sp)
5307 0560 1b07 add a,(OFST+3,sp)
5308 0562 2401 jrnc L601
5309 0564 5c incw x
5310 0565 L601:
5311 0565 02 rlwa x,a
5312 0566 cd0367 call _decToAscii
5314 0569 5b03 addw sp,#3
5315 ; 196 coordinate += (*str-'0'-1);
5317 056b 1e0b ldw x,(OFST+7,sp)
5318 056d f6 ld a,(x)
5319 056e a031 sub a,#49
5320 0570 1b04 add a,(OFST+0,sp)
5321 0572 6b04 ld (OFST+0,sp),a
5323 0574 acf805f8 jpf L7013
5324 0578 L3113:
5325 ; 198 else if(*str == 'c' || *str == 'C')
5327 0578 1e0b ldw x,(OFST+7,sp)
5328 057a f6 ld a,(x)
5329 057b a163 cp a,#99
5330 057d 2707 jreq L3213
5332 057f 1e0b ldw x,(OFST+7,sp)
5333 0581 f6 ld a,(x)
5334 0582 a143 cp a,#67
5335 0584 261f jrne L1213
5336 0586 L3213:
5337 ; 200 lcd_stack[coordinate] = va_arg(marker,u16);
5339 0586 7b09 ld a,(OFST+5,sp)
5340 0588 97 ld xl,a
5341 0589 7b0a ld a,(OFST+6,sp)
5342 058b 1b04 add a,(OFST+0,sp)
5343 058d 2401 jrnc L011
5344 058f 5c incw x
5345 0590 L011:
5346 0590 02 rlwa x,a
5347 0591 1602 ldw y,(OFST-2,sp)
5348 0593 72a90002 addw y,#2
5349 0597 1702 ldw (OFST-2,sp),y
5350 0599 1602 ldw y,(OFST-2,sp)
5351 059b 905a decw y
5352 059d 905a decw y
5353 059f 90e601 ld a,(1,y)
5354 05a2 f7 ld (x),a
5356 05a3 2053 jra L7013
5357 05a5 L1213:
5358 ; 202 else if(*str == 'x' || *str == 'X')
5360 05a5 1e0b ldw x,(OFST+7,sp)
5361 05a7 f6 ld a,(x)
5362 05a8 a178 cp a,#120
5363 05aa 2707 jreq L1313
5365 05ac 1e0b ldw x,(OFST+7,sp)
5366 05ae f6 ld a,(x)
5367 05af a158 cp a,#88
5368 05b1 2645 jrne L7013
5369 05b3 L1313:
5370 ; 204 str++;
5372 05b3 1e0b ldw x,(OFST+7,sp)
5373 05b5 1c0001 addw x,#1
5374 05b8 1f0b ldw (OFST+7,sp),x
5375 ; 205 hexToAscii(&lcd_stack[coordinate],va_arg(marker,u16),(*str - '0'));
5377 05ba 1e0b ldw x,(OFST+7,sp)
5378 05bc f6 ld a,(x)
5379 05bd a030 sub a,#48
5380 05bf 88 push a
5381 05c0 1e03 ldw x,(OFST-1,sp)
5382 05c2 1c0002 addw x,#2
5383 05c5 1f03 ldw (OFST-1,sp),x
5384 05c7 1e03 ldw x,(OFST-1,sp)
5385 05c9 5a decw x
5386 05ca 5a decw x
5387 05cb fe ldw x,(x)
5388 05cc 89 pushw x
5389 05cd 7b0c ld a,(OFST+8,sp)
5390 05cf 97 ld xl,a
5391 05d0 7b0d ld a,(OFST+9,sp)
5392 05d2 1b07 add a,(OFST+3,sp)
5393 05d4 2401 jrnc L211
5394 05d6 5c incw x
5395 05d7 L211:
5396 05d7 02 rlwa x,a
5397 05d8 cd0410 call _hexToAscii
5399 05db 5b03 addw sp,#3
5400 ; 206 coordinate += (*str - '0' - 1);
5402 05dd 1e0b ldw x,(OFST+7,sp)
5403 05df f6 ld a,(x)
5404 05e0 a031 sub a,#49
5405 05e2 1b04 add a,(OFST+0,sp)
5406 05e4 6b04 ld (OFST+0,sp),a
5407 05e6 2010 jra L7013
5408 05e8 L1113:
5409 ; 212 lcd_stack[coordinate] = *str;
5411 05e8 7b09 ld a,(OFST+5,sp)
5412 05ea 97 ld xl,a
5413 05eb 7b0a ld a,(OFST+6,sp)
5414 05ed 1b04 add a,(OFST+0,sp)
5415 05ef 2401 jrnc L411
5416 05f1 5c incw x
5417 05f2 L411:
5418 05f2 02 rlwa x,a
5419 05f3 160b ldw y,(OFST+7,sp)
5420 05f5 90f6 ld a,(y)
5421 05f7 f7 ld (x),a
5422 05f8 L7013:
5423 ; 214 str++;
5425 05f8 1e0b ldw x,(OFST+7,sp)
5426 05fa 1c0001 addw x,#1
5427 05fd 1f0b ldw (OFST+7,sp),x
5428 ; 215 coordinate++;
5430 05ff 0c04 inc (OFST+0,sp)
5431 0601 L7703:
5432 ; 180 while(*str != '\0')
5434 0601 1e0b ldw x,(OFST+7,sp)
5435 0603 7d tnz (x)
5436 0604 2703 jreq L021
5437 0606 cc04f7 jp L5703
5438 0609 L021:
5439 0609 acfd04fd jpf L1013
5535 ; 21 main()
5535 ; 22 {
5536 switch .text
5537 060d _main:
5539 060d 5204 subw sp,#4
5540 00000004 OFST: set 4
5543 ; 23 u8 time[3],tmp=0;
5545 060f 0f01 clr (OFST-3,sp)
5546 ; 24 PCF8563_init(1,2,3); //初始化PCF8563
5548 0611 4b03 push #3
5549 0613 ae0002 ldw x,#2
5550 0616 a601 ld a,#1
5551 0618 95 ld xh,a
5552 0619 cd0207 call _PCF8563_init
5554 061c 84 pop a
5555 ; 25 st7920LcdInit();
5557 061d cd025d call _st7920LcdInit
5559 ; 26 showLine(0,0,lcd_buffer,"PCF8563 Example");
5561 0620 ae0024 ldw x,#L1023
5562 0623 89 pushw x
5563 0624 ae0000 ldw x,#_lcd_buffer
5564 0627 89 pushw x
5565 0628 5f clrw x
5566 0629 4f clr a
5567 062a 95 ld xh,a
5568 062b cd04d6 call _showLine
5570 062e 5b04 addw sp,#4
5571 ; 27 showLine(0,1,lcd_buffer,"Set Time: OK");
5573 0630 ae0017 ldw x,#L3023
5574 0633 89 pushw x
5575 0634 ae0000 ldw x,#_lcd_buffer
5576 0637 89 pushw x
5577 0638 ae0001 ldw x,#1
5578 063b 4f clr a
5579 063c 95 ld xh,a
5580 063d cd04d6 call _showLine
5582 0640 5b04 addw sp,#4
5583 ; 28 showLine(0,2,lcd_buffer,"Read Time:");
5585 0642 ae000c ldw x,#L5023
5586 0645 89 pushw x
5587 0646 ae0000 ldw x,#_lcd_buffer
5588 0649 89 pushw x
5589 064a ae0002 ldw x,#2
5590 064d 4f clr a
5591 064e 95 ld xh,a
5592 064f cd04d6 call _showLine
5594 0652 5b04 addw sp,#4
5595 ; 29 refreshLCD(lcd_buffer); //刷新LCD
5597 0654 ae0000 ldw x,#_lcd_buffer
5598 0657 cd02f7 call _refreshLCD
5600 065a L7023:
5601 ; 32 PCF8563_getTime(time);
5603 065a 96 ldw x,sp
5604 065b 1c0002 addw x,#OFST-2
5605 065e cd00dd call _PCF8563_getTime
5607 ; 33 if(time[0]!=tmp)
5609 0661 7b02 ld a,(OFST-2,sp)
5610 0663 1101 cp a,(OFST-3,sp)
5611 0665 2728 jreq L3123
5612 ; 35 showLine(8,3,lcd_buffer,"%d2:%d2:%d2",(u16)time[2],(u16)time[1],(u16)time[0]);
5614 0667 7b02 ld a,(OFST-2,sp)
5615 0669 5f clrw x
5616 066a 97 ld xl,a
5617 066b 89 pushw x
5618 066c 7b05 ld a,(OFST+1,sp)
5619 066e 5f clrw x
5620 066f 97 ld xl,a
5621 0670 89 pushw x
5622 0671 7b08 ld a,(OFST+4,sp)
5623 0673 5f clrw x
5624 0674 97 ld xl,a
5625 0675 89 pushw x
5626 0676 ae0000 ldw x,#L5123
5627 0679 89 pushw x
5628 067a ae0000 ldw x,#_lcd_buffer
5629 067d 89 pushw x
5630 067e ae0003 ldw x,#3
5631 0681 a608 ld a,#8
5632 0683 95 ld xh,a
5633 0684 cd04d6 call _showLine
5635 0687 5b0a addw sp,#10
5636 ; 36 refreshLCD(lcd_buffer); /*刷新LCD*/
5638 0689 ae0000 ldw x,#_lcd_buffer
5639 068c cd02f7 call _refreshLCD
5641 068f L3123:
5642 ; 38 tmp=time[0];
5644 068f 7b02 ld a,(OFST-2,sp)
5645 0691 6b01 ld (OFST-3,sp),a
5647 0693 20c5 jra L7023
5660 xdef _main
5661 xdef _SPI_rechar
5662 xdef _SPI_sendchar
5663 xdef _SPI_Init
5664 switch .ubsct
5665 0000 _lcd_buffer:
5666 0000 000000000000 ds.b 64
5667 xdef _lcd_buffer
5668 xdef _showLine
5669 xdef _hexToAscii
5670 xdef _decToAscii
5671 xdef _refreshLCD
5672 xdef _st7920LcdInit
5673 xdef _sendDataST7920
5674 xdef _sendCodeST7920
5675 xdef _PCF8563_init
5676 xdef _PCF8563_setTime
5677 xdef _PCF8563_getTime
5678 xdef _WriteAByte
5679 xdef _I2C_RcvDat
5680 xdef _I2C_SendDat
5681 xdef _I2C_SendDAdr
5682 xdef _I2C_Start
5683 xdef _I2C_Init
5684 xdef _delay_us
5685 xdef _delay_ms
5686 .const: section .text
5687 0000 L5123:
5688 0000 2564323a2564 dc.b "%d2:%d2:%d2",0
5689 000c L5023:
5690 000c 526561642054 dc.b "Read Time:",0
5691 0017 L3023:
5692 0017 536574205469 dc.b "Set Time: OK",0
5693 0024 L1023:
5694 0024 504346383536 dc.b "PCF8563 Example",0
5695 xref.b c_x
5715 xref c_smodx
5716 xref c_smody
5717 xref c_sdivx
5718 end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -