📄 main.ls
字号:
4641 037c 97 ld xl,a
4642 037d 1f01 ldw (OFST-1,sp),x
4643 ; 152 if(tmp > 9) *str = tmp + ('A' - 10);
4645 037f 1e01 ldw x,(OFST-1,sp)
4646 0381 a3000a cpw x,#10
4647 0384 2509 jrult L7762
4650 0386 7b02 ld a,(OFST+0,sp)
4651 0388 ab37 add a,#55
4652 038a 1e03 ldw x,(OFST+1,sp)
4653 038c f7 ld (x),a
4655 038d 202c jra L5662
4656 038f L7762:
4657 ; 153 else *str = tmp + '0';
4659 038f 7b02 ld a,(OFST+0,sp)
4660 0391 ab30 add a,#48
4661 0393 1e03 ldw x,(OFST+1,sp)
4662 0395 f7 ld (x),a
4663 0396 2023 jra L5662
4664 0398 L7162:
4665 ; 158 tmp = hex & 0x000F;
4667 0398 7b07 ld a,(OFST+5,sp)
4668 039a 97 ld xl,a
4669 039b 7b08 ld a,(OFST+6,sp)
4670 039d a40f and a,#15
4671 039f 5f clrw x
4672 03a0 02 rlwa x,a
4673 03a1 1f01 ldw (OFST-1,sp),x
4674 03a3 01 rrwa x,a
4675 ; 159 if(tmp > 9) *str = tmp + ('A' - 10);
4677 03a4 1e01 ldw x,(OFST-1,sp)
4678 03a6 a3000a cpw x,#10
4679 03a9 2509 jrult L3072
4682 03ab 7b02 ld a,(OFST+0,sp)
4683 03ad ab37 add a,#55
4684 03af 1e03 ldw x,(OFST+1,sp)
4685 03b1 f7 ld (x),a
4687 03b2 2007 jra L5662
4688 03b4 L3072:
4689 ; 160 else *str = tmp + '0';
4691 03b4 7b02 ld a,(OFST+0,sp)
4692 03b6 ab30 add a,#48
4693 03b8 1e03 ldw x,(OFST+1,sp)
4694 03ba f7 ld (x),a
4695 03bb L5662:
4696 ; 165 width--;
4698 03bb 0a09 dec (OFST+7,sp)
4699 ; 166 str++;
4701 03bd 1e03 ldw x,(OFST+1,sp)
4702 03bf 1c0001 addw x,#1
4703 03c2 1f03 ldw (OFST+1,sp),x
4704 03c4 L7562:
4705 ; 131 while(width)
4707 03c4 0d09 tnz (OFST+7,sp)
4708 03c6 2703 jreq L66
4709 03c8 cc030e jp L5562
4710 03cb L66:
4711 ; 168 }
4714 03cb 5b04 addw sp,#4
4715 03cd 81 ret
4808 ; 170 void showLine(const u8 x,const u8 y,u8* lcd_stack,char * str,...)
4808 ; 171 {
4809 switch .text
4810 03ce _showLine:
4812 03ce 89 pushw x
4813 03cf 5204 subw sp,#4
4814 00000004 OFST: set 4
4817 ; 172 u8 coordinate = 16 * y + x;
4819 03d1 9f ld a,xl
4820 03d2 97 ld xl,a
4821 03d3 a610 ld a,#16
4822 03d5 42 mul x,a
4823 03d6 9f ld a,xl
4824 03d7 1b05 add a,(OFST+1,sp)
4825 03d9 6b04 ld (OFST+0,sp),a
4826 ; 175 va_start(marker,str); // Initialize variable arguments.
4828 03db 96 ldw x,sp
4829 03dc 1c000d addw x,#OFST+9
4830 03df 1f02 ldw (OFST-2,sp),x
4831 ; 176 for(i=0;i<64;i++)
4833 03e1 0f01 clr (OFST-3,sp)
4834 03e3 L5572:
4837 03e3 0c01 inc (OFST-3,sp)
4840 03e5 7b01 ld a,(OFST-3,sp)
4841 03e7 a140 cp a,#64
4842 03e9 25f8 jrult L5572
4844 03eb acf904f9 jpf L5672
4845 03ef L3672:
4846 ; 182 if(coordinate > 64) break; //防止堆栈溢出
4848 03ef 7b04 ld a,(OFST+0,sp)
4849 03f1 a141 cp a,#65
4850 03f3 2503 jrult L1772
4852 03f5 L7672:
4853 ; 217 va_end( marker ); // Reset variable arguments.
4855 ; 218 }
4858 03f5 5b06 addw sp,#6
4859 03f7 81 ret
4860 03f8 L1772:
4861 ; 184 if(*str == '\\')
4863 03f8 1e0b ldw x,(OFST+7,sp)
4864 03fa f6 ld a,(x)
4865 03fb a15c cp a,#92
4866 03fd 261b jrne L3772
4867 ; 186 str++;
4869 03ff 1e0b ldw x,(OFST+7,sp)
4870 0401 1c0001 addw x,#1
4871 0404 1f0b ldw (OFST+7,sp),x
4872 ; 187 lcd_stack[coordinate] = *str;
4874 0406 7b09 ld a,(OFST+5,sp)
4875 0408 97 ld xl,a
4876 0409 7b0a ld a,(OFST+6,sp)
4877 040b 1b04 add a,(OFST+0,sp)
4878 040d 2401 jrnc L27
4879 040f 5c incw x
4880 0410 L27:
4881 0410 02 rlwa x,a
4882 0411 160b ldw y,(OFST+7,sp)
4883 0413 90f6 ld a,(y)
4884 0415 f7 ld (x),a
4886 0416 acf004f0 jpf L5772
4887 041a L3772:
4888 ; 189 else if(*str == '%')
4890 041a 1e0b ldw x,(OFST+7,sp)
4891 041c f6 ld a,(x)
4892 041d a125 cp a,#37
4893 041f 2703 jreq L401
4894 0421 cc04e0 jp L7772
4895 0424 L401:
4896 ; 191 str++;
4898 0424 1e0b ldw x,(OFST+7,sp)
4899 0426 1c0001 addw x,#1
4900 0429 1f0b ldw (OFST+7,sp),x
4901 ; 192 if (*str == 'd' || *str == 'D')
4903 042b 1e0b ldw x,(OFST+7,sp)
4904 042d f6 ld a,(x)
4905 042e a164 cp a,#100
4906 0430 2707 jreq L3003
4908 0432 1e0b ldw x,(OFST+7,sp)
4909 0434 f6 ld a,(x)
4910 0435 a144 cp a,#68
4911 0437 2637 jrne L1003
4912 0439 L3003:
4913 ; 194 str++;
4915 0439 1e0b ldw x,(OFST+7,sp)
4916 043b 1c0001 addw x,#1
4917 043e 1f0b ldw (OFST+7,sp),x
4918 ; 195 decToAscii(&lcd_stack[coordinate],va_arg(marker,u16),(*str-'0'));
4920 0440 1e0b ldw x,(OFST+7,sp)
4921 0442 f6 ld a,(x)
4922 0443 a030 sub a,#48
4923 0445 88 push a
4924 0446 1e03 ldw x,(OFST-1,sp)
4925 0448 1c0002 addw x,#2
4926 044b 1f03 ldw (OFST-1,sp),x
4927 044d 1e03 ldw x,(OFST-1,sp)
4928 044f 5a decw x
4929 0450 5a decw x
4930 0451 fe ldw x,(x)
4931 0452 89 pushw x
4932 0453 7b0c ld a,(OFST+8,sp)
4933 0455 97 ld xl,a
4934 0456 7b0d ld a,(OFST+9,sp)
4935 0458 1b07 add a,(OFST+3,sp)
4936 045a 2401 jrnc L47
4937 045c 5c incw x
4938 045d L47:
4939 045d 02 rlwa x,a
4940 045e cd025f call _decToAscii
4942 0461 5b03 addw sp,#3
4943 ; 196 coordinate += (*str-'0'-1);
4945 0463 1e0b ldw x,(OFST+7,sp)
4946 0465 f6 ld a,(x)
4947 0466 a031 sub a,#49
4948 0468 1b04 add a,(OFST+0,sp)
4949 046a 6b04 ld (OFST+0,sp),a
4951 046c acf004f0 jpf L5772
4952 0470 L1003:
4953 ; 198 else if(*str == 'c' || *str == 'C')
4955 0470 1e0b ldw x,(OFST+7,sp)
4956 0472 f6 ld a,(x)
4957 0473 a163 cp a,#99
4958 0475 2707 jreq L1103
4960 0477 1e0b ldw x,(OFST+7,sp)
4961 0479 f6 ld a,(x)
4962 047a a143 cp a,#67
4963 047c 261f jrne L7003
4964 047e L1103:
4965 ; 200 lcd_stack[coordinate] = va_arg(marker,u16);
4967 047e 7b09 ld a,(OFST+5,sp)
4968 0480 97 ld xl,a
4969 0481 7b0a ld a,(OFST+6,sp)
4970 0483 1b04 add a,(OFST+0,sp)
4971 0485 2401 jrnc L67
4972 0487 5c incw x
4973 0488 L67:
4974 0488 02 rlwa x,a
4975 0489 1602 ldw y,(OFST-2,sp)
4976 048b 72a90002 addw y,#2
4977 048f 1702 ldw (OFST-2,sp),y
4978 0491 1602 ldw y,(OFST-2,sp)
4979 0493 905a decw y
4980 0495 905a decw y
4981 0497 90e601 ld a,(1,y)
4982 049a f7 ld (x),a
4984 049b 2053 jra L5772
4985 049d L7003:
4986 ; 202 else if(*str == 'x' || *str == 'X')
4988 049d 1e0b ldw x,(OFST+7,sp)
4989 049f f6 ld a,(x)
4990 04a0 a178 cp a,#120
4991 04a2 2707 jreq L7103
4993 04a4 1e0b ldw x,(OFST+7,sp)
4994 04a6 f6 ld a,(x)
4995 04a7 a158 cp a,#88
4996 04a9 2645 jrne L5772
4997 04ab L7103:
4998 ; 204 str++;
5000 04ab 1e0b ldw x,(OFST+7,sp)
5001 04ad 1c0001 addw x,#1
5002 04b0 1f0b ldw (OFST+7,sp),x
5003 ; 205 hexToAscii(&lcd_stack[coordinate],va_arg(marker,u16),(*str - '0'));
5005 04b2 1e0b ldw x,(OFST+7,sp)
5006 04b4 f6 ld a,(x)
5007 04b5 a030 sub a,#48
5008 04b7 88 push a
5009 04b8 1e03 ldw x,(OFST-1,sp)
5010 04ba 1c0002 addw x,#2
5011 04bd 1f03 ldw (OFST-1,sp),x
5012 04bf 1e03 ldw x,(OFST-1,sp)
5013 04c1 5a decw x
5014 04c2 5a decw x
5015 04c3 fe ldw x,(x)
5016 04c4 89 pushw x
5017 04c5 7b0c ld a,(OFST+8,sp)
5018 04c7 97 ld xl,a
5019 04c8 7b0d ld a,(OFST+9,sp)
5020 04ca 1b07 add a,(OFST+3,sp)
5021 04cc 2401 jrnc L001
5022 04ce 5c incw x
5023 04cf L001:
5024 04cf 02 rlwa x,a
5025 04d0 cd0308 call _hexToAscii
5027 04d3 5b03 addw sp,#3
5028 ; 206 coordinate += (*str - '0' - 1);
5030 04d5 1e0b ldw x,(OFST+7,sp)
5031 04d7 f6 ld a,(x)
5032 04d8 a031 sub a,#49
5033 04da 1b04 add a,(OFST+0,sp)
5034 04dc 6b04 ld (OFST+0,sp),a
5035 04de 2010 jra L5772
5036 04e0 L7772:
5037 ; 212 lcd_stack[coordinate] = *str;
5039 04e0 7b09 ld a,(OFST+5,sp)
5040 04e2 97 ld xl,a
5041 04e3 7b0a ld a,(OFST+6,sp)
5042 04e5 1b04 add a,(OFST+0,sp)
5043 04e7 2401 jrnc L201
5044 04e9 5c incw x
5045 04ea L201:
5046 04ea 02 rlwa x,a
5047 04eb 160b ldw y,(OFST+7,sp)
5048 04ed 90f6 ld a,(y)
5049 04ef f7 ld (x),a
5050 04f0 L5772:
5051 ; 214 str++;
5053 04f0 1e0b ldw x,(OFST+7,sp)
5054 04f2 1c0001 addw x,#1
5055 04f5 1f0b ldw (OFST+7,sp),x
5056 ; 215 coordinate++;
5058 04f7 0c04 inc (OFST+0,sp)
5059 04f9 L5672:
5060 ; 180 while(*str != '\0')
5062 04f9 1e0b ldw x,(OFST+7,sp)
5063 04fb 7d tnz (x)
5064 04fc 2703 jreq L601
5065 04fe cc03ef jp L3672
5066 0501 L601:
5067 0501 acf503f5 jpf L7672
5142 ; 20 main()
5142 ; 21 {
5143 switch .text
5144 0505 _main:
5148 ; 22 st7920LcdInit(); /*LCD初始化*/
5150 0505 cd0155 call _st7920LcdInit
5152 ; 23 showLine(0,0,lcd_buffer,"DS18B20");
5154 0508 ae002e ldw x,#L5503
5155 050b 89 pushw x
5156 050c ae0000 ldw x,#_lcd_buffer
5157 050f 89 pushw x
5158 0510 5f clrw x
5159 0511 4f clr a
5160 0512 95 ld xh,a
5161 0513 cd03ce call _showLine
5163 0516 5b04 addw sp,#4
5164 ; 24 showLine(0,1,lcd_buffer,"Temperature Measure Experiment");
5166 0518 ae000f ldw x,#L7503
5167 051b 89 pushw x
5168 051c ae0000 ldw x,#_lcd_buffer
5169 051f 89 pushw x
5170 0520 ae0001 ldw x,#1
5171 0523 4f clr a
5172 0524 95 ld xh,a
5173 0525 cd03ce call _showLine
5175 0528 5b04 addw sp,#4
5176 ; 25 showLine(0,3,lcd_buffer,"TEMP: ℃");
5178 052a ae0004 ldw x,#L1603
5179 052d 89 pushw x
5180 052e ae0000 ldw x,#_lcd_buffer
5181 0531 89 pushw x
5182 0532 ae0003 ldw x,#3
5183 0535 4f clr a
5184 0536 95 ld xh,a
5185 0537 cd03ce call _showLine
5187 053a 5b04 addw sp,#4
5188 053c L3603:
5189 ; 28 showLine(6,3,lcd_buffer,"%d2",(u16)readTemp());
5191 053c cd00ed call _readTemp
5193 053f 5f clrw x
5194 0540 97 ld xl,a
5195 0541 89 pushw x
5196 0542 ae0000 ldw x,#L7603
5197 0545 89 pushw x
5198 0546 ae0000 ldw x,#_lcd_buffer
5199 0549 89 pushw x
5200 054a ae0003 ldw x,#3
5201 054d a606 ld a,#6
5202 054f 95 ld xh,a
5203 0550 cd03ce call _showLine
5205 0553 5b06 addw sp,#6
5206 ; 29 refreshLCD(lcd_buffer); /*刷新LCD*/
5208 0555 ae0000 ldw x,#_lcd_buffer
5209 0558 cd01ef call _refreshLCD
5211 ; 30 delay_ms(1000);
5213 055b ae03e8 ldw x,#1000
5214 055e cd0000 call _delay_ms
5217 0561 20d9 jra L3603
5230 xdef _main
5231 xdef _SPI_rechar
5232 xdef _SPI_sendchar
5233 xdef _SPI_Init
5234 switch .ubsct
5235 0000 _lcd_buffer:
5236 0000 000000000000 ds.b 64
5237 xdef _lcd_buffer
5238 xdef _showLine
5239 xdef _hexToAscii
5240 xdef _decToAscii
5241 xdef _refreshLCD
5242 xdef _st7920LcdInit
5243 xdef _sendDataST7920
5244 xdef _sendCodeST7920
5245 xdef _readTemp
5246 xdef _convertDs18b20
5247 xdef _wOnewire
5248 xdef _rOnewire
5249 xdef _resetOnewire
5250 xdef __delay_us
5251 xdef _delay_us
5252 xdef _delay_ms
5253 .const: section .text
5254 0000 L7603:
5255 0000 25643200 dc.b "%d2",0
5256 0004 L1603:
5257 0004 54454d503a20 dc.b "TEMP: ",161
5258 000d e600 dc.b 230,0
5259 000f L7503:
5260 000f 54656d706572 dc.b "Temperature Measur"
5261 0021 652045787065 dc.b "e Experiment",0
5262 002e L5503:
5263 002e 445331384232 dc.b "DS18B20",0
5283 end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -