   1                     ; C Compiler for STM8 (COSMIC Software)
   2                     ; Parser V4.8.32 - 23 Mar 2010
   3                     ; Generator V4.3.4 - 23 Mar 2010
  48                     ; 36 void InitModbus(void)
  48                     ; 37 {   
  50                     .text:	section	.text,new
  51  0000               _InitModbus:
  55                     ; 38 	temp = (uint16_t *)&IED;     
  57  0000 ae0000        	ldw	x,#_IED
  58  0003 cf0008        	ldw	_temp,x
  59                     ; 40 	InitUART2();	          
  61  0006 cd0000        	call	_InitUART2
  63                     ; 41 }                                                              
  66  0009 81            	ret
 146                     ; 43 void* mymemcpy( void* dest, const void* src, int count )
 146                     ; 44 {
 147                     .text:	section	.text,new
 148  0000               _mymemcpy:
 150  0000 89            	pushw	x
 151  0001 5206          	subw	sp,#6
 152       00000006      OFST:	set	6
 155                     ; 45     char* d = (char*)dest;
 157  0003 1f03          	ldw	(OFST-3,sp),x
 158                     ; 46     const char* s = (const char*)src;
 160  0005 1e0b          	ldw	x,(OFST+5,sp)
 161  0007 1f05          	ldw	(OFST-1,sp),x
 162                     ; 47     int n = count>>2;
 164  0009 1e0d          	ldw	x,(OFST+7,sp)
 165  000b 57            	sraw	x
 166  000c 57            	sraw	x
 167  000d 1f01          	ldw	(OFST-5,sp),x
 168                     ; 48     switch( count & 3 )
 170  000f 7b0e          	ld	a,(OFST+8,sp)
 171  0011 a403          	and	a,#3
 173                     ; 56          } while (--n > 0);
 174  0013 4d            	tnz	a
 175  0014 270b          	jreq	L37
 176  0016 4a            	dec	a
 177  0017 274a          	jreq	L72
 178  0019 4a            	dec	a
 179  001a 2731          	jreq	L52
 180  001c 4a            	dec	a
 181  001d 2718          	jreq	L32
 182  001f 2062          	jra	L17
 183  0021               L37:
 184                     ; 52             *d++ = *s++;
 186  0021 1e05          	ldw	x,(OFST-1,sp)
 187  0023 1c0001        	addw	x,#1
 188  0026 1f05          	ldw	(OFST-1,sp),x
 189  0028 1d0001        	subw	x,#1
 190  002b f6            	ld	a,(x)
 191  002c 1e03          	ldw	x,(OFST-3,sp)
 192  002e 1c0001        	addw	x,#1
 193  0031 1f03          	ldw	(OFST-3,sp),x
 194  0033 1d0001        	subw	x,#1
 195  0036 f7            	ld	(x),a
 196  0037               L32:
 197                     ; 53             case 3:      *d++ = *s++;
 199  0037 1e05          	ldw	x,(OFST-1,sp)
 200  0039 1c0001        	addw	x,#1
 201  003c 1f05          	ldw	(OFST-1,sp),x
 202  003e 1d0001        	subw	x,#1
 203  0041 f6            	ld	a,(x)
 204  0042 1e03          	ldw	x,(OFST-3,sp)
 205  0044 1c0001        	addw	x,#1
 206  0047 1f03          	ldw	(OFST-3,sp),x
 207  0049 1d0001        	subw	x,#1
 208  004c f7            	ld	(x),a
 209  004d               L52:
 210                     ; 54             case 2:      *d++ = *s++;
 212  004d 1e05          	ldw	x,(OFST-1,sp)
 213  004f 1c0001        	addw	x,#1
 214  0052 1f05          	ldw	(OFST-1,sp),x
 215  0054 1d0001        	subw	x,#1
 216  0057 f6            	ld	a,(x)
 217  0058 1e03          	ldw	x,(OFST-3,sp)
 218  005a 1c0001        	addw	x,#1
 219  005d 1f03          	ldw	(OFST-3,sp),x
 220  005f 1d0001        	subw	x,#1
 221  0062 f7            	ld	(x),a
 222  0063               L72:
 223                     ; 55             case 1:      *d++ = *s++;
 225  0063 1e05          	ldw	x,(OFST-1,sp)
 226  0065 1c0001        	addw	x,#1
 227  0068 1f05          	ldw	(OFST-1,sp),x
 228  006a 1d0001        	subw	x,#1
 229  006d f6            	ld	a,(x)
 230  006e 1e03          	ldw	x,(OFST-3,sp)
 231  0070 1c0001        	addw	x,#1
 232  0073 1f03          	ldw	(OFST-3,sp),x
 233  0075 1d0001        	subw	x,#1
 234  0078 f7            	ld	(x),a
 235                     ; 56          } while (--n > 0);
 237  0079 9c            	rvf
 238  007a 1e01          	ldw	x,(OFST-5,sp)
 239  007c 1d0001        	subw	x,#1
 240  007f 1f01          	ldw	(OFST-5,sp),x
 241  0081 2c9e          	jrsgt	L37
 242  0083               L17:
 243                     ; 58    return dest;
 245  0083 1e07          	ldw	x,(OFST+1,sp)
 248  0085 5b08          	addw	sp,#8
 249  0087 81            	ret
 252                     .const:	section	.text
 253  0000               _auchCRCHi:
 254  0000 00            	dc.b	0
 255  0001 c1            	dc.b	193
 256  0002 81            	dc.b	129
 257  0003 40            	dc.b	64
 258  0004 01            	dc.b	1
 259  0005 c0            	dc.b	192
 260  0006 80            	dc.b	128
 261  0007 41            	dc.b	65
 262  0008 01            	dc.b	1
 263  0009 c0            	dc.b	192
 264  000a 80            	dc.b	128
 265  000b 41            	dc.b	65
 266  000c 00            	dc.b	0
 267  000d c1            	dc.b	193
 268  000e 81            	dc.b	129
 269  000f 40            	dc.b	64
 270  0010 01            	dc.b	1
 271  0011 c0            	dc.b	192
 272  0012 80            	dc.b	128
 273  0013 41            	dc.b	65
 274  0014 00            	dc.b	0
 275  0015 c1            	dc.b	193
 276  0016 81            	dc.b	129
 277  0017 40            	dc.b	64
 278  0018 00            	dc.b	0
 279  0019 c1            	dc.b	193
 280  001a 81            	dc.b	129
 281  001b 40            	dc.b	64
 282  001c 01            	dc.b	1
 283  001d c0            	dc.b	192
 284  001e 80            	dc.b	128
 285  001f 41            	dc.b	65
 286  0020 01            	dc.b	1
 287  0021 c0            	dc.b	192
 288  0022 80            	dc.b	128
 289  0023 41            	dc.b	65
 290  0024 00            	dc.b	0
 291  0025 c1            	dc.b	193
 292  0026 81            	dc.b	129
 293  0027 40            	dc.b	64
 294  0028 00            	dc.b	0
 295  0029 c1            	dc.b	193
 296  002a 81            	dc.b	129
 297  002b 40            	dc.b	64
 298  002c 01            	dc.b	1
 299  002d c0            	dc.b	192
 300  002e 80            	dc.b	128
 301  002f 41            	dc.b	65
 302  0030 00            	dc.b	0
 303  0031 c1            	dc.b	193
 304  0032 81            	dc.b	129
 305  0033 40            	dc.b	64
 306  0034 01            	dc.b	1
 307  0035 c0            	dc.b	192
 308  0036 80            	dc.b	128
 309  0037 41            	dc.b	65
 310  0038 01            	dc.b	1
 311  0039 c0            	dc.b	192
 312  003a 80            	dc.b	128
 313  003b 41            	dc.b	65
 314  003c 00            	dc.b	0
 315  003d c1            	dc.b	193
 316  003e 81            	dc.b	129
 317  003f 40            	dc.b	64
 318  0040 01            	dc.b	1
 319  0041 c0            	dc.b	192
 320  0042 80            	dc.b	128
 321  0043 41            	dc.b	65
 322  0044 00            	dc.b	0
 323  0045 c1            	dc.b	193
 324  0046 81            	dc.b	129
 325  0047 40            	dc.b	64
 326  0048 00            	dc.b	0
 327  0049 c1            	dc.b	193
 328  004a 81            	dc.b	129
 329  004b 40            	dc.b	64
 330  004c 01            	dc.b	1
 331  004d c0            	dc.b	192
 332  004e 80            	dc.b	128
 333  004f 41            	dc.b	65
 334  0050 00            	dc.b	0
 335  0051 c1            	dc.b	193
 336  0052 81            	dc.b	129
 337  0053 40            	dc.b	64
 338  0054 01            	dc.b	1
 339  0055 c0            	dc.b	192
 340  0056 80            	dc.b	128
 341  0057 41            	dc.b	65
 342  0058 01            	dc.b	1
 343  0059 c0            	dc.b	192
 344  005a 80            	dc.b	128
 345  005b 41            	dc.b	65
 346  005c 00            	dc.b	0
 347  005d c1            	dc.b	193
 348  005e 81            	dc.b	129
 349  005f 40            	dc.b	64
 350  0060 00            	dc.b	0
 351  0061 c1            	dc.b	193
 352  0062 81            	dc.b	129
 353  0063 40            	dc.b	64
 354  0064 01            	dc.b	1
 355  0065 c0            	dc.b	192
 356  0066 80            	dc.b	128
 357  0067 41            	dc.b	65
 358  0068 01            	dc.b	1
 359  0069 c0            	dc.b	192
 360  006a 80            	dc.b	128
 361  006b 41            	dc.b	65
 362  006c 00            	dc.b	0
 363  006d c1            	dc.b	193
 364  006e 81            	dc.b	129
 365  006f 40            	dc.b	64
 366  0070 01            	dc.b	1
 367  0071 c0            	dc.b	192
 368  0072 80            	dc.b	128
 369  0073 41            	dc.b	65
 370  0074 00            	dc.b	0
 371  0075 c1            	dc.b	193
 372  0076 81            	dc.b	129
 373  0077 40            	dc.b	64
 374  0078 00            	dc.b	0
 375  0079 c1            	dc.b	193
 376  007a 81            	dc.b	129
 377  007b 40            	dc.b	64
 378  007c 01            	dc.b	1
 379  007d c0            	dc.b	192
 380  007e 80            	dc.b	128
 381  007f 41            	dc.b	65
 382  0080 01            	dc.b	1
 383  0081 c0            	dc.b	192
 384  0082 80            	dc.b	128
 385  0083 41            	dc.b	65
 386  0084 00            	dc.b	0
 387  0085 c1            	dc.b	193
 388  0086 81            	dc.b	129
 389  0087 40            	dc.b	64
 390  0088 00            	dc.b	0
 391  0089 c1            	dc.b	193
 392  008a 81            	dc.b	129
 393  008b 40            	dc.b	64
 394  008c 01            	dc.b	1
 395  008d c0            	dc.b	192
 396  008e 80            	dc.b	128
 397  008f 41            	dc.b	65
 398  0090 00            	dc.b	0
 399  0091 c1            	dc.b	193
 400  0092 81            	dc.b	129
 401  0093 40            	dc.b	64
 402  0094 01            	dc.b	1
 403  0095 c0            	dc.b	192
 404  0096 80            	dc.b	128
 405  0097 41            	dc.b	65
 406  0098 01            	dc.b	1
 407  0099 c0            	dc.b	192
 408  009a 80            	dc.b	128
 409  009b 41            	dc.b	65
 410  009c 00            	dc.b	0
 411  009d c1            	dc.b	193
 412  009e 81            	dc.b	129
 413  009f 40            	dc.b	64
 414  00a0 00            	dc.b	0
 415  00a1 c1            	dc.b	193
 416  00a2 81            	dc.b	129
 417  00a3 40            	dc.b	64
 418  00a4 01            	dc.b	1
 419  00a5 c0            	dc.b	192
 420  00a6 80            	dc.b	128
 421  00a7 41            	dc.b	65
 422  00a8 01            	dc.b	1
 423  00a9 c0            	dc.b	192
 424  00aa 80            	dc.b	128
 425  00ab 41            	dc.b	65
 426  00ac 00            	dc.b	0
 427  00ad c1            	dc.b	193
 428  00ae 81            	dc.b	129
 429  00af 40            	dc.b	64
 430  00b0 01            	dc.b	1
 431  00b1 c0            	dc.b	192
 432  00b2 80            	dc.b	128
 433  00b3 41            	dc.b	65
 434  00b4 00            	dc.b	0
 435  00b5 c1            	dc.b	193
 436  00b6 81            	dc.b	129
 437  00b7 40            	dc.b	64
 438  00b8 00            	dc.b	0
 439  00b9 c1            	dc.b	193
 440  00ba 81            	dc.b	129
 441  00bb 40            	dc.b	64
 442  00bc 01            	dc.b	1
 443  00bd c0            	dc.b	192
 444  00be 80            	dc.b	128
 445  00bf 41            	dc.b	65
 446  00c0 00            	dc.b	0
 447  00c1 c1            	dc.b	193
 448  00c2 81            	dc.b	129
 449  00c3 40            	dc.b	64
 450  00c4 01            	dc.b	1
 451  00c5 c0            	dc.b	192
 452  00c6 80            	dc.b	128
 453  00c7 41            	dc.b	65
 454  00c8 01            	dc.b	1
 455  00c9 c0            	dc.b	192
 456  00ca 80            	dc.b	128
 457  00cb 41            	dc.b	65
 458  00cc 00            	dc.b	0
 459  00cd c1            	dc.b	193
 460  00ce 81            	dc.b	129
 461  00cf 40            	dc.b	64
 462  00d0 01            	dc.b	1
 463  00d1 c0            	dc.b	192
 464  00d2 80            	dc.b	128
 465  00d3 41            	dc.b	65
 466  00d4 00            	dc.b	0
 467  00d5 c1            	dc.b	193
 468  00d6 81            	dc.b	129
 469  00d7 40            	dc.b	64
 470  00d8 00            	dc.b	0
 471  00d9 c1            	dc.b	193
 472  00da 81            	dc.b	129
 473  00db 40            	dc.b	64
 474  00dc 01            	dc.b	1
 475  00dd c0            	dc.b	192
 476  00de 80            	dc.b	128
 477  00df 41            	dc.b	65
 478  00e0 01            	dc.b	1
 479  00e1 c0            	dc.b	192
 480  00e2 80            	dc.b	128
 481  00e3 41            	dc.b	65
 482  00e4 00            	dc.b	0
 483  00e5 c1            	dc.b	193
 484  00e6 81            	dc.b	129
 485  00e7 40            	dc.b	64
 486  00e8 00            	dc.b	0
 487  00e9 c1            	dc.b	193
 488  00ea 81            	dc.b	129
 489  00eb 40            	dc.b	64
 490  00ec 01            	dc.b	1
 491  00ed c0            	dc.b	192
 492  00ee 80            	dc.b	128
 493  00ef 41            	dc.b	65
 494  00f0 00            	dc.b	0
 495  00f1 c1            	dc.b	193
 496  00f2 81            	dc.b	129
 497  00f3 40            	dc.b	64
 498  00f4 01            	dc.b	1
 499  00f5 c0            	dc.b	192
 500  00f6 80            	dc.b	128
 501  00f7 41            	dc.b	65
 502  00f8 01            	dc.b	1
 503  00f9 c0            	dc.b	192
 504  00fa 80            	dc.b	128
 505  00fb 41            	dc.b	65
 506  00fc 00            	dc.b	0
 507  00fd c1            	dc.b	193
 508  00fe 81            	dc.b	129
 509  00ff 40            	dc.b	64
 510  0100               _auchCRCLo:
 511  0100 00            	dc.b	0
 512  0101 c0            	dc.b	192
 513  0102 c1            	dc.b	193
 514  0103 01            	dc.b	1
 515  0104 c3            	dc.b	195
 516  0105 03            	dc.b	3
 517  0106 02            	dc.b	2
 518  0107 c2            	dc.b	194
 519  0108 c6            	dc.b	198
 520  0109 06            	dc.b	6
 521  010a 07            	dc.b	7
 522  010b c7            	dc.b	199
 523  010c 05            	dc.b	5
 524  010d c5            	dc.b	197
 525  010e c4            	dc.b	196
 526  010f 04            	dc.b	4
 527  0110 cc            	dc.b	204
 528  0111 0c            	dc.b	12
 529  0112 0d            	dc.b	13
 530  0113 cd            	dc.b	205
 531  0114 0f            	dc.b	15
 532  0115 cf            	dc.b	207
 533  0116 ce            	dc.b	206
 534  0117 0e            	dc.b	14
 535  0118 0a            	dc.b	10
 536  0119 ca            	dc.b	202
 537  011a cb            	dc.b	203
 538  011b 0b            	dc.b	11
 539  011c c9            	dc.b	201
 540  011d 09            	dc.b	9
 541  011e 08            	dc.b	8
 542  011f c8            	dc.b	200
 543  0120 d8            	dc.b	216
 544  0121 18            	dc.b	24
 545  0122 19            	dc.b	25
 546  0123 d9            	dc.b	217
 547  0124 1b            	dc.b	27
 548  0125 db            	dc.b	219
 549  0126 da            	dc.b	218
 550  0127 1a            	dc.b	26
 551  0128 1e            	dc.b	30
 552  0129 de            	dc.b	222
 553  012a df            	dc.b	223
 554  012b 1f            	dc.b	31
 555  012c dd            	dc.b	221
 556  012d 1d            	dc.b	29
 557  012e 1c            	dc.b	28
 558  012f dc            	dc.b	220
 559  0130 14            	dc.b	20
 560  0131 d4            	dc.b	212
 561  0132 d5            	dc.b	213
 562  0133 15            	dc.b	21
 563  0134 d7            	dc.b	215
 564  0135 17            	dc.b	23
 565  0136 16            	dc.b	22
 566  0137 d6            	dc.b	214
 567  0138 d2            	dc.b	210
 568  0139 12            	dc.b	18
 569  013a 13            	dc.b	19
 570  013b d3            	dc.b	211
 571  013c 11            	dc.b	17
 572  013d d1            	dc.b	209
 573  013e d0            	dc.b	208
 574  013f 10            	dc.b	16
 575  0140 f0            	dc.b	240
 576  0141 30            	dc.b	48
 577  0142 31            	dc.b	49
 578  0143 f1            	dc.b	241
 579  0144 33            	dc.b	51
 580  0145 f3            	dc.b	243
 581  0146 f2            	dc.b	242
 582  0147 32            	dc.b	50
 583  0148 36            	dc.b	54
 584  0149 f6            	dc.b	246
 585  014a f7            	dc.b	247
 586  014b 37            	dc.b	55
 587  014c f5            	dc.b	245
 588  014d 35            	dc.b	53
 589  014e 34            	dc.b	52
 590  014f f4            	dc.b	244
 591  0150 3c            	dc.b	60
 592  0151 fc            	dc.b	252
 593  0152 fd            	dc.b	253
 594  0153 3d            	dc.b	61
 595  0154 ff            	dc.b	255
 596  0155 3f            	dc.b	63
 597  0156 3e            	dc.b	62
 598  0157 fe            	dc.b	254
 599  0158 fa            	dc.b	250
 600  0159 3a            	dc.b	58
 601  015a 3b            	dc.b	59
 602  015b fb            	dc.b	251
 603  015c 39            	dc.b	57
 604  015d f9            	dc.b	249
 605  015e f8            	dc.b	248
 606  015f 38            	dc.b	56
 607  0160 28            	dc.b	40
 608  0161 e8            	dc.b	232
 609  0162 e9            	dc.b	233
 610  0163 29            	dc.b	41
 611  0164 eb            	dc.b	235
 612  0165 2b            	dc.b	43
 613  0166 2a            	dc.b	42
 614  0167 ea            	dc.b	234
 615  0168 ee            	dc.b	238
 616  0169 2e            	dc.b	46
 617  016a 2f            	dc.b	47
 618  016b ef            	dc.b	239
 619  016c 2d            	dc.b	45
 620  016d ed            	dc.b	237
 621  016e ec            	dc.b	236
 622  016f 2c            	dc.b	44
 623  0170 e4            	dc.b	228
 624  0171 24            	dc.b	36
 625  0172 25            	dc.b	37
 626  0173 e5            	dc.b	229
 627  0174 27            	dc.b	39
 628  0175 e7            	dc.b	231
 629  0176 e6            	dc.b	230
 630  0177 26            	dc.b	38
 631  0178 22            	dc.b	34
 632  0179 e2            	dc.b	226
 633  017a e3            	dc.b	227
 634  017b 23            	dc.b	35
 635  017c e1            	dc.b	225
 636  017d 21            	dc.b	33
 637  017e 20            	dc.b	32
 638  017f e0            	dc.b	224
 639  0180 a0            	dc.b	160
 640  0181 60            	dc.b	96
 641  0182 61            	dc.b	97
 642  0183 a1            	dc.b	161
 643  0184 63            	dc.b	99
 644  0185 a3            	dc.b	163
 645  0186 a2            	dc.b	162
 646  0187 62            	dc.b	98
 647  0188 66            	dc.b	102
 648  0189 a6            	dc.b	166
 649  018a a7            	dc.b	167
 650  018b 67            	dc.b	103
 651  018c a5            	dc.b	165
 652  018d 65            	dc.b	101
 653  018e 64            	dc.b	100
 654  018f a4            	dc.b	164
 655  0190 6c            	dc.b	108
 656  0191 ac            	dc.b	172
 657  0192 ad            	dc.b	173
 658  0193 6d            	dc.b	109
 659  0194 af            	dc.b	175
 660  0195 6f            	dc.b	111
 661  0196 6e            	dc.b	110
 662  0197 ae            	dc.b	174
 663  0198 aa            	dc.b	170
 664  0199 6a            	dc.b	106
 665  019a 6b            	dc.b	107
 666  019b ab            	dc.b	171
 667  019c 69            	dc.b	105
 668  019d a9            	dc.b	169
 669  019e a8            	dc.b	168
 670  019f 68            	dc.b	104
 671  01a0 78            	dc.b	120
 672  01a1 b8            	dc.b	184
 673  01a2 b9            	dc.b	185
 674  01a3 79            	dc.b	121
 675  01a4 bb            	dc.b	187
 676  01a5 7b            	dc.b	123
 677  01a6 7a            	dc.b	122
 678  01a7 ba            	dc.b	186
 679  01a8 be            	dc.b	190
 680  01a9 7e            	dc.b	126
 681  01aa 7f            	dc.b	127
 682  01ab bf            	dc.b	191
 683  01ac 7d            	dc.b	125
 684  01ad bd            	dc.b	189
 685  01ae bc            	dc.b	188
 686  01af 7c            	dc.b	124
 687  01b0 b4            	dc.b	180
 688  01b1 74            	dc.b	116
 689  01b2 75            	dc.b	117
 690  01b3 b5            	dc.b	181
 691  01b4 77            	dc.b	119
 692  01b5 b7            	dc.b	183
 693  01b6 b6            	dc.b	182
 694  01b7 76            	dc.b	118
 695  01b8 72            	dc.b	114
 696  01b9 b2            	dc.b	178
 697  01ba b3            	dc.b	179
 698  01bb 73            	dc.b	115
 699  01bc b1            	dc.b	177
 700  01bd 71            	dc.b	113
 701  01be 70            	dc.b	112
 702  01bf b0            	dc.b	176
 703  01c0 50            	dc.b	80
 704  01c1 90            	dc.b	144
 705  01c2 91            	dc.b	145
 706  01c3 51            	dc.b	81
 707  01c4 93            	dc.b	147
 708  01c5 53            	dc.b	83
 709  01c6 52            	dc.b	82
 710  01c7 92            	dc.b	146
 711  01c8 96            	dc.b	150
 712  01c9 56            	dc.b	86
 713  01ca 57            	dc.b	87
 714  01cb 97            	dc.b	151
 715  01cc 55            	dc.b	85
 716  01cd 95            	dc.b	149
 717  01ce 94            	dc.b	148
 718  01cf 54            	dc.b	84
 719  01d0 9c            	dc.b	156
 720  01d1 5c            	dc.b	92
 721  01d2 5d            	dc.b	93
 722  01d3 9d            	dc.b	157
 723  01d4 5f            	dc.b	95
 724  01d5 9f            	dc.b	159
 725  01d6 9e            	dc.b	158
 726  01d7 5e            	dc.b	94
 727  01d8 5a            	dc.b	90
 728  01d9 9a            	dc.b	154
 729  01da 9b            	dc.b	155
 730  01db 5b            	dc.b	91
 731  01dc 99            	dc.b	153
 732  01dd 59            	dc.b	89
 733  01de 58            	dc.b	88
 734  01df 98            	dc.b	152
 735  01e0 88            	dc.b	136
 736  01e1 48            	dc.b	72
 737  01e2 49            	dc.b	73
 738  01e3 89            	dc.b	137
 739  01e4 4b            	dc.b	75
 740  01e5 8b            	dc.b	139
 741  01e6 8a            	dc.b	138
 742  01e7 4a            	dc.b	74
 743  01e8 4e            	dc.b	78
 744  01e9 8e            	dc.b	142
 745  01ea 8f            	dc.b	143
 746  01eb 4f            	dc.b	79
 747  01ec 8d            	dc.b	141
 748  01ed 4d            	dc.b	77
 749  01ee 4c            	dc.b	76
 750  01ef 8c            	dc.b	140
 751  01f0 44            	dc.b	68
 752  01f1 84            	dc.b	132
 753  01f2 85            	dc.b	133
 754  01f3 45            	dc.b	69
 755  01f4 87            	dc.b	135
 756  01f5 47            	dc.b	71
 757  01f6 46            	dc.b	70
 758  01f7 86            	dc.b	134
 759  01f8 82            	dc.b	130
 760  01f9 42            	dc.b	66
 761  01fa 43            	dc.b	67
 762  01fb 83            	dc.b	131
 763  01fc 41            	dc.b	65
 764  01fd 81            	dc.b	129
 765  01fe 80            	dc.b	128
 766  01ff 40            	dc.b	64
 829                     ; 124 uint16_t crc16(uint8_t *puchMsg, uint16_t usDataLen)
 829                     ; 125 {
 830                     .text:	section	.text,new
 831  0000               _crc16:
 833  0000 89            	pushw	x
 834  0001 5206          	subw	sp,#6
 835       00000006      OFST:	set	6
 838                     ; 126 	uint8_t uchCRCHi = 0xFF ; /* 高CRC字节初始化 */
 840  0003 a6ff          	ld	a,#255
 841  0005 6b01          	ld	(OFST-5,sp),a
 842                     ; 127 	uint8_t uchCRCLo = 0xFF ; /* 低CRC 字节初始化 */
 844  0007 a6ff          	ld	a,#255
 845  0009 6b02          	ld	(OFST-4,sp),a
 847  000b 2026          	jra	L331
 848  000d               L721:
 849                     ; 131 		uIndex = uchCRCHi ^ *puchMsg++ ; /* 计算CRC */
 851  000d 1e07          	ldw	x,(OFST+1,sp)
 852  000f 1c0001        	addw	x,#1
 853  0012 1f07          	ldw	(OFST+1,sp),x
 854  0014 1d0001        	subw	x,#1
 855  0017 f6            	ld	a,(x)
 856  0018 1801          	xor	a,(OFST-5,sp)
 857  001a 6b06          	ld	(OFST+0,sp),a
 858  001c 4f            	clr	a
 859  001d 6b05          	ld	(OFST-1,sp),a
 860  001f 6b04          	ld	(OFST-2,sp),a
 861  0021 6b03          	ld	(OFST-3,sp),a
 862                     ; 132 		uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex] ;
 864  0023 1e05          	ldw	x,(OFST-1,sp)
 865  0025 d60000        	ld	a,(_auchCRCHi,x)
 866  0028 1802          	xor	a,(OFST-4,sp)
 867  002a 6b01          	ld	(OFST-5,sp),a
 868                     ; 133 		uchCRCLo = auchCRCLo[uIndex] ;
 870  002c 1e05          	ldw	x,(OFST-1,sp)
 871  002e d60100        	ld	a,(_auchCRCLo,x)
 872  0031 6b02          	ld	(OFST-4,sp),a
 873  0033               L331:
 874                     ; 129 	while (usDataLen--) /* 传输消息缓冲区 */
 876  0033 1e0b          	ldw	x,(OFST+5,sp)
 877  0035 1d0001        	subw	x,#1
 878  0038 1f0b          	ldw	(OFST+5,sp),x
 879  003a 1c0001        	addw	x,#1
 880  003d a30000        	cpw	x,#0
 881  0040 26cb          	jrne	L721
 882                     ; 135 	return (uchCRCHi << 8 | uchCRCLo) ;
 884  0042 7b01          	ld	a,(OFST-5,sp)
 885  0044 5f            	clrw	x
 886  0045 97            	ld	xl,a
 887  0046 7b02          	ld	a,(OFST-4,sp)
 888  0048 02            	rlwa	x,a
 891  0049 5b08          	addw	sp,#8
 892  004b 81            	ret
 994                     ; 139 void ReadInputStatus(void)
 994                     ; 140 {
 995                     .text:	section	.text,new
 996  0000               _ReadInputStatus:
 998  0000 520c          	subw	sp,#12
 999       0000000c      OFST:	set	12
1002                     ; 149 	uint8_t  exit = 0;
1004  0002 0f02          	clr	(OFST-10,sp)
1005                     ; 153 	addr = receBuf[3];
1007  0004 c6000d        	ld	a,_receBuf+3
1008  0007 5f            	clrw	x
1009  0008 97            	ld	xl,a
1010  0009 1f03          	ldw	(OFST-9,sp),x
1011                     ; 154 	tempAddr = addr;
1013  000b 1e03          	ldw	x,(OFST-9,sp)
1014  000d 1f0a          	ldw	(OFST-2,sp),x
1015                     ; 157 	bitCount = receBuf[5];
1017  000f c6000f        	ld	a,_receBuf+5
1018  0012 6b01          	ld	(OFST-11,sp),a
1019                     ; 159 	byteCount = bitCount / 8;					//字节个数
1021  0014 7b01          	ld	a,(OFST-11,sp)
1022  0016 44            	srl	a
1023  0017 44            	srl	a
1024  0018 44            	srl	a
1025  0019 5f            	clrw	x
1026  001a 97            	ld	xl,a
1027  001b 1f08          	ldw	(OFST-4,sp),x
1028                     ; 160 	if(bitCount%8 != 0)
1030  001d 7b01          	ld	a,(OFST-11,sp)
1031  001f a507          	bcp	a,#7
1032  0021 2707          	jreq	L571
1033                     ; 161 		byteCount++;
1035  0023 1e08          	ldw	x,(OFST-4,sp)
1036  0025 1c0001        	addw	x,#1
1037  0028 1f08          	ldw	(OFST-4,sp),x
1038  002a               L571:
1039                     ; 163 	for(k=0;k<byteCount;k++)
1041  002a 0f05          	clr	(OFST-7,sp)
1043  002c acd700d7      	jpf	L302
1044  0030               L771:
1045                     ; 165 		position = k + 3;
1047  0030 7b05          	ld	a,(OFST-7,sp)
1048  0032 ab03          	add	a,#3
1049  0034 6b07          	ld	(OFST-5,sp),a
1050                     ; 166 		sendBuf[position] = 0;
1052  0036 7b07          	ld	a,(OFST-5,sp)
1053  0038 5f            	clrw	x
1054  0039 97            	ld	xl,a
1055  003a 724f0032      	clr	(_sendBuf,x)
1056                     ; 167 		for(i=0;i<8;i++)
1058  003e 0f0c          	clr	(OFST+0,sp)
1059  0040               L702:
1060                     ; 169 			getInputStatusVal(tempAddr,&tempData);
1062  0040 96            	ldw	x,sp
1063  0041 1c0006        	addw	x,#OFST-6
1064  0044 89            	pushw	x
1065  0045 1e0c          	ldw	x,(OFST+0,sp)
1066  0047 cd0000        	call	_getInputStatusVal
1068  004a 85            	popw	x
1069                     ; 171 			sendBuf[position] |= tempData << i;
1071  004b 7b07          	ld	a,(OFST-5,sp)
1072  004d 5f            	clrw	x
1073  004e 97            	ld	xl,a
1074  004f 7b0c          	ld	a,(OFST+0,sp)
1075  0051 905f          	clrw	y
1076  0053 9097          	ld	yl,a
1077  0055 7b06          	ld	a,(OFST-6,sp)
1078  0057 905d          	tnzw	y
1079  0059 2705          	jreq	L61
1080  005b               L02:
1081  005b 48            	sll	a
1082  005c 905a          	decw	y
1083  005e 26fb          	jrne	L02
1084  0060               L61:
1085  0060 da0032        	or	a,(_sendBuf,x)
1086  0063 d70032        	ld	(_sendBuf,x),a
1087                     ; 172 			tempAddr++;
1089  0066 1e0a          	ldw	x,(OFST-2,sp)
1090  0068 1c0001        	addw	x,#1
1091  006b 1f0a          	ldw	(OFST-2,sp),x
1092                     ; 173 			if(tempAddr >= addr+bitCount)
1094  006d 7b03          	ld	a,(OFST-9,sp)
1095  006f 97            	ld	xl,a
1096  0070 7b04          	ld	a,(OFST-8,sp)
1097  0072 1b01          	add	a,(OFST-11,sp)
1098  0074 2401          	jrnc	L22
1099  0076 5c            	incw	x
1100  0077               L22:
1101  0077 02            	rlwa	x,a
1102  0078 130a          	cpw	x,(OFST-2,sp)
1103  007a 2206          	jrugt	L512
1104                     ; 175 				exit = 1;
1106  007c a601          	ld	a,#1
1107  007e 6b02          	ld	(OFST-10,sp),a
1108                     ; 176 				break;
1110  0080 2008          	jra	L312
1111  0082               L512:
1112                     ; 167 		for(i=0;i<8;i++)
1114  0082 0c0c          	inc	(OFST+0,sp)
1117  0084 7b0c          	ld	a,(OFST+0,sp)
1118  0086 a108          	cp	a,#8
1119  0088 25b6          	jrult	L702
1120  008a               L312:
1121                     ; 179 		if(exit == 1)
1123  008a 7b02          	ld	a,(OFST-10,sp)
1124  008c a101          	cp	a,#1
1125  008e 2645          	jrne	L712
1126                     ; 180 			break;
1127  0090               L502:
1128                     ; 183 	sendBuf[0] = IED.nId;//localAddr;
1130  0090 5500000032    	mov	_sendBuf,_IED
1131                     ; 184 	sendBuf[1] = 0x02;
1133  0095 35020033      	mov	_sendBuf+1,#2
1134                     ; 185 	sendBuf[2] = byteCount;
1136  0099 7b09          	ld	a,(OFST-3,sp)
1137  009b c70034        	ld	_sendBuf+2,a
1138                     ; 186 	byteCount += 3;
1140  009e 1e08          	ldw	x,(OFST-4,sp)
1141  00a0 1c0003        	addw	x,#3
1142  00a3 1f08          	ldw	(OFST-4,sp),x
1143                     ; 187 	crcData = crc16(sendBuf,byteCount);
1145  00a5 1e08          	ldw	x,(OFST-4,sp)
1146  00a7 89            	pushw	x
1147  00a8 ae0032        	ldw	x,#_sendBuf
1148  00ab cd0000        	call	_crc16
1150  00ae 5b02          	addw	sp,#2
1151  00b0 1f03          	ldw	(OFST-9,sp),x
1152                     ; 188 	sendBuf[byteCount] = crcData >> 8;
1154  00b2 7b03          	ld	a,(OFST-9,sp)
1155  00b4 1e08          	ldw	x,(OFST-4,sp)
1156  00b6 d70032        	ld	(_sendBuf,x),a
1157                     ; 189 	byteCount++;
1159  00b9 1e08          	ldw	x,(OFST-4,sp)
1160  00bb 1c0001        	addw	x,#1
1161  00be 1f08          	ldw	(OFST-4,sp),x
1162                     ; 190 	sendBuf[byteCount] = crcData & 0xff;
1164  00c0 7b04          	ld	a,(OFST-8,sp)
1165  00c2 a4ff          	and	a,#255
1166  00c4 1e08          	ldw	x,(OFST-4,sp)
1167  00c6 d70032        	ld	(_sendBuf,x),a
1168                     ; 191 	sendCount = byteCount + 1;
1170  00c9 1e08          	ldw	x,(OFST-4,sp)
1171  00cb 5c            	incw	x
1172  00cc cf0006        	ldw	_sendCount,x
1173                     ; 193 	beginSend();
1175  00cf cd0000        	call	_beginSend
1177                     ; 194 }
1180  00d2 5b0c          	addw	sp,#12
1181  00d4 81            	ret
1182  00d5               L712:
1183                     ; 163 	for(k=0;k<byteCount;k++)
1185  00d5 0c05          	inc	(OFST-7,sp)
1186  00d7               L302:
1189  00d7 7b05          	ld	a,(OFST-7,sp)
1190  00d9 5f            	clrw	x
1191  00da 97            	ld	xl,a
1192  00db 1308          	cpw	x,(OFST-4,sp)
1193  00dd 2403          	jruge	L42
1194  00df cc0030        	jp	L771
1195  00e2               L42:
1196  00e2 20ac          	jra	L502
1298                     ; 197 void readCoil(void)
1298                     ; 198 {
1299                     .text:	section	.text,new
1300  0000               _readCoil:
1302  0000 520c          	subw	sp,#12
1303       0000000c      OFST:	set	12
1306                     ; 207 	uint8_t  exit = 0;
1308  0002 0f02          	clr	(OFST-10,sp)
1309                     ; 211 	addr = receBuf[3];
1311  0004 c6000d        	ld	a,_receBuf+3
1312  0007 5f            	clrw	x
1313  0008 97            	ld	xl,a
1314  0009 1f03          	ldw	(OFST-9,sp),x
1315                     ; 212 	tempAddr = addr;
1317  000b 1e03          	ldw	x,(OFST-9,sp)
1318  000d 1f0a          	ldw	(OFST-2,sp),x
1319                     ; 215 	bitCount = receBuf[5];
1321  000f c6000f        	ld	a,_receBuf+5
1322  0012 6b01          	ld	(OFST-11,sp),a
1323                     ; 217 	byteCount = bitCount / 8;					//字节个数
1325  0014 7b01          	ld	a,(OFST-11,sp)
1326  0016 44            	srl	a
1327  0017 44            	srl	a
1328  0018 44            	srl	a
1329  0019 5f            	clrw	x
1330  001a 97            	ld	xl,a
1331  001b 1f08          	ldw	(OFST-4,sp),x
1332                     ; 218 	if(bitCount%8 != 0)
1334  001d 7b01          	ld	a,(OFST-11,sp)
1335  001f a507          	bcp	a,#7
1336  0021 2707          	jreq	L752
1337                     ; 219 		byteCount++;
1339  0023 1e08          	ldw	x,(OFST-4,sp)
1340  0025 1c0001        	addw	x,#1
1341  0028 1f08          	ldw	(OFST-4,sp),x
1342  002a               L752:
1343                     ; 221 	for(k=0;k<byteCount;k++)
1345  002a 0f05          	clr	(OFST-7,sp)
1347  002c acd700d7      	jpf	L562
1348  0030               L162:
1349                     ; 223 		position = k + 3;
1351  0030 7b05          	ld	a,(OFST-7,sp)
1352  0032 ab03          	add	a,#3
1353  0034 6b07          	ld	(OFST-5,sp),a
1354                     ; 224 		sendBuf[position] = 0;
1356  0036 7b07          	ld	a,(OFST-5,sp)
1357  0038 5f            	clrw	x
1358  0039 97            	ld	xl,a
1359  003a 724f0032      	clr	(_sendBuf,x)
1360                     ; 225 		for(i=0;i<8;i++)
1362  003e 0f0c          	clr	(OFST+0,sp)
1363  0040               L172:
1364                     ; 227 			getCoilVal(tempAddr,&tempData);
1366  0040 96            	ldw	x,sp
1367  0041 1c0006        	addw	x,#OFST-6
1368  0044 89            	pushw	x
1369  0045 1e0c          	ldw	x,(OFST+0,sp)
1370  0047 cd0000        	call	_getCoilVal
1372  004a 85            	popw	x
1373                     ; 229 			sendBuf[position] |= tempData << i;
1375  004b 7b07          	ld	a,(OFST-5,sp)
1376  004d 5f            	clrw	x
1377  004e 97            	ld	xl,a
1378  004f 7b0c          	ld	a,(OFST+0,sp)
1379  0051 905f          	clrw	y
1380  0053 9097          	ld	yl,a
1381  0055 7b06          	ld	a,(OFST-6,sp)
1382  0057 905d          	tnzw	y
1383  0059 2705          	jreq	L03
1384  005b               L23:
1385  005b 48            	sll	a
1386  005c 905a          	decw	y
1387  005e 26fb          	jrne	L23
1388  0060               L03:
1389  0060 da0032        	or	a,(_sendBuf,x)
1390  0063 d70032        	ld	(_sendBuf,x),a
1391                     ; 230 			tempAddr++;
1393  0066 1e0a          	ldw	x,(OFST-2,sp)
1394  0068 1c0001        	addw	x,#1
1395  006b 1f0a          	ldw	(OFST-2,sp),x
1396                     ; 231 			if(tempAddr >= addr+bitCount)
1398  006d 7b03          	ld	a,(OFST-9,sp)
1399  006f 97            	ld	xl,a
1400  0070 7b04          	ld	a,(OFST-8,sp)
1401  0072 1b01          	add	a,(OFST-11,sp)
1402  0074 2401          	jrnc	L43
1403  0076 5c            	incw	x
1404  0077               L43:
1405  0077 02            	rlwa	x,a
1406  0078 130a          	cpw	x,(OFST-2,sp)
1407  007a 2206          	jrugt	L772
1408                     ; 233 				exit = 1;
1410  007c a601          	ld	a,#1
1411  007e 6b02          	ld	(OFST-10,sp),a
1412                     ; 234 				break;
1414  0080 2008          	jra	L572
1415  0082               L772:
1416                     ; 225 		for(i=0;i<8;i++)
1418  0082 0c0c          	inc	(OFST+0,sp)
1421  0084 7b0c          	ld	a,(OFST+0,sp)
1422  0086 a108          	cp	a,#8
1423  0088 25b6          	jrult	L172
1424  008a               L572:
1425                     ; 237 		if(exit == 1)
1427  008a 7b02          	ld	a,(OFST-10,sp)
1428  008c a101          	cp	a,#1
1429  008e 2645          	jrne	L103
1430                     ; 238 			break;
1431  0090               L762:
1432                     ; 241 	sendBuf[0] = IED.nId;//localAddr;
1434  0090 5500000032    	mov	_sendBuf,_IED
1435                     ; 242 	sendBuf[1] = 0x01;
1437  0095 35010033      	mov	_sendBuf+1,#1
1438                     ; 243 	sendBuf[2] = byteCount;
1440  0099 7b09          	ld	a,(OFST-3,sp)
1441  009b c70034        	ld	_sendBuf+2,a
1442                     ; 244 	byteCount += 3;
1444  009e 1e08          	ldw	x,(OFST-4,sp)
1445  00a0 1c0003        	addw	x,#3
1446  00a3 1f08          	ldw	(OFST-4,sp),x
1447                     ; 245 	crcData = crc16(sendBuf,byteCount);
1449  00a5 1e08          	ldw	x,(OFST-4,sp)
1450  00a7 89            	pushw	x
1451  00a8 ae0032        	ldw	x,#_sendBuf
1452  00ab cd0000        	call	_crc16
1454  00ae 5b02          	addw	sp,#2
1455  00b0 1f03          	ldw	(OFST-9,sp),x
1456                     ; 246 	sendBuf[byteCount] = crcData >> 8;
1458  00b2 7b03          	ld	a,(OFST-9,sp)
1459  00b4 1e08          	ldw	x,(OFST-4,sp)
1460  00b6 d70032        	ld	(_sendBuf,x),a
1461                     ; 247 	byteCount++;
1463  00b9 1e08          	ldw	x,(OFST-4,sp)
1464  00bb 1c0001        	addw	x,#1
1465  00be 1f08          	ldw	(OFST-4,sp),x
1466                     ; 248 	sendBuf[byteCount] = crcData & 0xff;
1468  00c0 7b04          	ld	a,(OFST-8,sp)
1469  00c2 a4ff          	and	a,#255
1470  00c4 1e08          	ldw	x,(OFST-4,sp)
1471  00c6 d70032        	ld	(_sendBuf,x),a
1472                     ; 249 	sendCount = byteCount + 1;
1474  00c9 1e08          	ldw	x,(OFST-4,sp)
1475  00cb 5c            	incw	x
1476  00cc cf0006        	ldw	_sendCount,x
1477                     ; 251 	beginSend();
1479  00cf cd0000        	call	_beginSend
1481                     ; 252 }//void readCoil(void)
1484  00d2 5b0c          	addw	sp,#12
1485  00d4 81            	ret
1486  00d5               L103:
1487                     ; 221 	for(k=0;k<byteCount;k++)
1489  00d5 0c05          	inc	(OFST-7,sp)
1490  00d7               L562:
1493  00d7 7b05          	ld	a,(OFST-7,sp)
1494  00d9 5f            	clrw	x
1495  00da 97            	ld	xl,a
1496  00db 1308          	cpw	x,(OFST-4,sp)
1497  00dd 2403          	jruge	L63
1498  00df cc0030        	jp	L162
1499  00e2               L63:
1500  00e2 20ac          	jra	L762
1581                     ; 254 void readInputRegisters(void)
1581                     ; 255 {
1582                     .text:	section	.text,new
1583  0000               _readInputRegisters:
1585  0000 5209          	subw	sp,#9
1586       00000009      OFST:	set	9
1589                     ; 262 	uint16_t tempData = 0;
1591  0002 5f            	clrw	x
1592  0003 1f02          	ldw	(OFST-7,sp),x
1593                     ; 264 	addr = (receBuf[2]<<8) + receBuf[3];
1595  0005 c6000c        	ld	a,_receBuf+2
1596  0008 5f            	clrw	x
1597  0009 97            	ld	xl,a
1598  000a 4f            	clr	a
1599  000b 02            	rlwa	x,a
1600  000c 01            	rrwa	x,a
1601  000d cb000d        	add	a,_receBuf+3
1602  0010 2401          	jrnc	L24
1603  0012 5c            	incw	x
1604  0013               L24:
1605  0013 02            	rlwa	x,a
1606  0014 1f06          	ldw	(OFST-3,sp),x
1607  0016 01            	rrwa	x,a
1608                     ; 265 	tempAddr = addr & 0xffff;                                      
1610                     ; 266 	readCount = receBuf[5];
1612  0017 c6000f        	ld	a,_receBuf+5
1613  001a 6b01          	ld	(OFST-8,sp),a
1614                     ; 268 	byteCount = readCount * 2;
1616  001c 7b01          	ld	a,(OFST-8,sp)
1617  001e 5f            	clrw	x
1618  001f 97            	ld	xl,a
1619  0020 58            	sllw	x
1620  0021 1f04          	ldw	(OFST-5,sp),x
1621                     ; 269 	Disable();
1624  0023 9b            sim
1626                     ; 270 	for(i=0;i<byteCount;i+=2,tempAddr++)
1628  0024 5f            	clrw	x
1629  0025 1f08          	ldw	(OFST-1,sp),x
1631  0027 2029          	jra	L733
1632  0029               L333:
1633                     ; 272 		getInputRegisterVal(tempAddr,&tempData);
1635  0029 96            	ldw	x,sp
1636  002a 1c0002        	addw	x,#OFST-7
1637  002d 89            	pushw	x
1638  002e 1e08          	ldw	x,(OFST-1,sp)
1639  0030 cd0000        	call	_getInputRegisterVal
1641  0033 85            	popw	x
1642                     ; 273 		sendBuf[i+3] = tempData >> 8;
1644  0034 7b02          	ld	a,(OFST-7,sp)
1645  0036 1e08          	ldw	x,(OFST-1,sp)
1646  0038 d70035        	ld	(_sendBuf+3,x),a
1647                     ; 274 		sendBuf[i+4] = tempData & 0xff;
1649  003b 7b03          	ld	a,(OFST-6,sp)
1650  003d a4ff          	and	a,#255
1651  003f 1e08          	ldw	x,(OFST-1,sp)
1652  0041 d70036        	ld	(_sendBuf+4,x),a
1653                     ; 270 	for(i=0;i<byteCount;i+=2,tempAddr++)
1655  0044 1e08          	ldw	x,(OFST-1,sp)
1656  0046 1c0002        	addw	x,#2
1657  0049 1f08          	ldw	(OFST-1,sp),x
1658  004b 1e06          	ldw	x,(OFST-3,sp)
1659  004d 1c0001        	addw	x,#1
1660  0050 1f06          	ldw	(OFST-3,sp),x
1661  0052               L733:
1664  0052 1e08          	ldw	x,(OFST-1,sp)
1665  0054 1304          	cpw	x,(OFST-5,sp)
1666  0056 25d1          	jrult	L333
1667                     ; 276 	Enable();
1670  0058 9a            rim
1672                     ; 277 	sendBuf[0] = IED.nId;//localAddr;
1674  0059 5500000032    	mov	_sendBuf,_IED
1675                     ; 278 	sendBuf[1] = 4;
1677  005e 35040033      	mov	_sendBuf+1,#4
1678                     ; 279 	sendBuf[2] = byteCount;
1680  0062 7b05          	ld	a,(OFST-4,sp)
1681  0064 c70034        	ld	_sendBuf+2,a
1682                     ; 280 	byteCount += 3;
1684  0067 1e04          	ldw	x,(OFST-5,sp)
1685  0069 1c0003        	addw	x,#3
1686  006c 1f04          	ldw	(OFST-5,sp),x
1687                     ; 281 	crcData = crc16(sendBuf,byteCount);
1689  006e 1e04          	ldw	x,(OFST-5,sp)
1690  0070 89            	pushw	x
1691  0071 ae0032        	ldw	x,#_sendBuf
1692  0074 cd0000        	call	_crc16
1694  0077 5b02          	addw	sp,#2
1695  0079 1f06          	ldw	(OFST-3,sp),x
1696                     ; 282 	sendBuf[byteCount] = crcData >> 8;
1698  007b 7b06          	ld	a,(OFST-3,sp)
1699  007d 1e04          	ldw	x,(OFST-5,sp)
1700  007f d70032        	ld	(_sendBuf,x),a
1701                     ; 283 	byteCount++;
1703  0082 1e04          	ldw	x,(OFST-5,sp)
1704  0084 1c0001        	addw	x,#1
1705  0087 1f04          	ldw	(OFST-5,sp),x
1706                     ; 284 	sendBuf[byteCount] = crcData & 0xff;
1708  0089 7b07          	ld	a,(OFST-2,sp)
1709  008b a4ff          	and	a,#255
1710  008d 1e04          	ldw	x,(OFST-5,sp)
1711  008f d70032        	ld	(_sendBuf,x),a
1712                     ; 286 	sendCount = byteCount + 1;
1714  0092 1e04          	ldw	x,(OFST-5,sp)
1715  0094 5c            	incw	x
1716  0095 cf0006        	ldw	_sendCount,x
1717                     ; 287 	beginSend();
1719  0098 cd0000        	call	_beginSend
1721                     ; 288 }
1724  009b 5b09          	addw	sp,#9
1725  009d 81            	ret
1806                     ; 290 void readRegisters(void)
1806                     ; 291 {
1807                     .text:	section	.text,new
1808  0000               _readRegisters:
1810  0000 5209          	subw	sp,#9
1811       00000009      OFST:	set	9
1814                     ; 298 	uint16_t tempData = 0;
1816  0002 5f            	clrw	x
1817  0003 1f02          	ldw	(OFST-7,sp),x
1818                     ; 300 	addr = (receBuf[2]<<8) + receBuf[3];
1820  0005 c6000c        	ld	a,_receBuf+2
1821  0008 5f            	clrw	x
1822  0009 97            	ld	xl,a
1823  000a 4f            	clr	a
1824  000b 02            	rlwa	x,a
1825  000c 01            	rrwa	x,a
1826  000d cb000d        	add	a,_receBuf+3
1827  0010 2401          	jrnc	L64
1828  0012 5c            	incw	x
1829  0013               L64:
1830  0013 02            	rlwa	x,a
1831  0014 1f04          	ldw	(OFST-5,sp),x
1832  0016 01            	rrwa	x,a
1833                     ; 301 	tempAddr = addr & 0xffff;
1835                     ; 306 	readCount = receBuf[5];
1837  0017 c6000f        	ld	a,_receBuf+5
1838  001a 6b01          	ld	(OFST-8,sp),a
1839                     ; 307     readCount = readCount>0x7F?0x7F:readCount;
1841  001c 7b01          	ld	a,(OFST-8,sp)
1842  001e a180          	cp	a,#128
1843  0020 2504          	jrult	L05
1844  0022 a67f          	ld	a,#127
1845  0024 2002          	jra	L25
1846  0026               L05:
1847  0026 7b01          	ld	a,(OFST-8,sp)
1848  0028               L25:
1849  0028 6b01          	ld	(OFST-8,sp),a
1850                     ; 309     byteCount = sizeof (short)/sizeof(char);
1852                     ; 310 	byteCount = readCount * 2;
1854  002a 7b01          	ld	a,(OFST-8,sp)
1855  002c 5f            	clrw	x
1856  002d 97            	ld	xl,a
1857  002e 58            	sllw	x
1858  002f 1f06          	ldw	(OFST-3,sp),x
1859                     ; 311 	Disable();
1862  0031 9b            sim
1864                     ; 312 	for(i=0;i<byteCount;i+=2,tempAddr++)
1866  0032 5f            	clrw	x
1867  0033 1f08          	ldw	(OFST-1,sp),x
1869  0035 2029          	jra	L773
1870  0037               L373:
1871                     ; 314 		getRegisterVal(tempAddr,&tempData);
1873  0037 96            	ldw	x,sp
1874  0038 1c0002        	addw	x,#OFST-7
1875  003b 89            	pushw	x
1876  003c 1e06          	ldw	x,(OFST-3,sp)
1877  003e cd0000        	call	_getRegisterVal
1879  0041 85            	popw	x
1880                     ; 315 		sendBuf[i+3] = tempData >> 8;
1882  0042 7b02          	ld	a,(OFST-7,sp)
1883  0044 1e08          	ldw	x,(OFST-1,sp)
1884  0046 d70035        	ld	(_sendBuf+3,x),a
1885                     ; 316 		sendBuf[i+4] = tempData & 0xff;
1887  0049 7b03          	ld	a,(OFST-6,sp)
1888  004b a4ff          	and	a,#255
1889  004d 1e08          	ldw	x,(OFST-1,sp)
1890  004f d70036        	ld	(_sendBuf+4,x),a
1891                     ; 312 	for(i=0;i<byteCount;i+=2,tempAddr++)
1893  0052 1e08          	ldw	x,(OFST-1,sp)
1894  0054 1c0002        	addw	x,#2
1895  0057 1f08          	ldw	(OFST-1,sp),x
1896  0059 1e04          	ldw	x,(OFST-5,sp)
1897  005b 1c0001        	addw	x,#1
1898  005e 1f04          	ldw	(OFST-5,sp),x
1899  0060               L773:
1902  0060 1e08          	ldw	x,(OFST-1,sp)
1903  0062 1306          	cpw	x,(OFST-3,sp)
1904  0064 25d1          	jrult	L373
1905                     ; 318 	Enable();
1908  0066 9a            rim
1910                     ; 319 	sendBuf[0] = IED.nId;//localAddr;
1912  0067 5500000032    	mov	_sendBuf,_IED
1913                     ; 320 	sendBuf[1] = 3;
1915  006c 35030033      	mov	_sendBuf+1,#3
1916                     ; 321 	sendBuf[2] = byteCount;
1918  0070 7b07          	ld	a,(OFST-2,sp)
1919  0072 c70034        	ld	_sendBuf+2,a
1920                     ; 322 	byteCount += 3;
1922  0075 1e06          	ldw	x,(OFST-3,sp)
1923  0077 1c0003        	addw	x,#3
1924  007a 1f06          	ldw	(OFST-3,sp),x
1925                     ; 323 	crcData = crc16(sendBuf,byteCount);
1927  007c 1e06          	ldw	x,(OFST-3,sp)
1928  007e 89            	pushw	x
1929  007f ae0032        	ldw	x,#_sendBuf
1930  0082 cd0000        	call	_crc16
1932  0085 5b02          	addw	sp,#2
1933  0087 1f04          	ldw	(OFST-5,sp),x
1934                     ; 324 	sendBuf[byteCount] = crcData >> 8;
1936  0089 7b04          	ld	a,(OFST-5,sp)
1937  008b 1e06          	ldw	x,(OFST-3,sp)
1938  008d d70032        	ld	(_sendBuf,x),a
1939                     ; 325 	byteCount++;
1941  0090 1e06          	ldw	x,(OFST-3,sp)
1942  0092 1c0001        	addw	x,#1
1943  0095 1f06          	ldw	(OFST-3,sp),x
1944                     ; 326 	sendBuf[byteCount] = crcData & 0xff;
1946  0097 7b05          	ld	a,(OFST-4,sp)
1947  0099 a4ff          	and	a,#255
1948  009b 1e06          	ldw	x,(OFST-3,sp)
1949  009d d70032        	ld	(_sendBuf,x),a
1950                     ; 328 	sendCount = byteCount + 1;
1952  00a0 1e06          	ldw	x,(OFST-3,sp)
1953  00a2 5c            	incw	x
1954  00a3 cf0006        	ldw	_sendCount,x
1955                     ; 329 	beginSend();
1957  00a6 cd0000        	call	_beginSend
1959                     ; 330 }//void readRegisters(void)
1962  00a9 5b09          	addw	sp,#9
1963  00ab 81            	ret
2029                     ; 334 void forceSingleCoil(void)
2029                     ; 335 {
2030                     .text:	section	.text,new
2031  0000               _forceSingleCoil:
2033  0000 5205          	subw	sp,#5
2034       00000005      OFST:	set	5
2037                     ; 344 	addr = receBuf[3];
2039  0002 c6000d        	ld	a,_receBuf+3
2040  0005 5f            	clrw	x
2041  0006 97            	ld	xl,a
2042  0007 1f03          	ldw	(OFST-2,sp),x
2043                     ; 345 	tempAddr = addr;
2045                     ; 348 	onOff = receBuf[4];
2047  0009 c6000e        	ld	a,_receBuf+4
2048  000c 6b05          	ld	(OFST+0,sp),a
2049                     ; 351 	if(onOff == 0xff)
2051  000e 7b05          	ld	a,(OFST+0,sp)
2052  0010 a1ff          	cp	a,#255
2053  0012 2607          	jrne	L724
2054                     ; 353 		tempData = 1;
2056  0014 ae0001        	ldw	x,#1
2057  0017 1f01          	ldw	(OFST-4,sp),x
2059  0019 2007          	jra	L134
2060  001b               L724:
2061                     ; 356 	else if(onOff == 0x00)
2063  001b 0d05          	tnz	(OFST+0,sp)
2064  001d 2603          	jrne	L134
2065                     ; 358 		tempData = 0;
2067  001f 5f            	clrw	x
2068  0020 1f01          	ldw	(OFST-4,sp),x
2069  0022               L134:
2070                     ; 361 	setCoilVal(tempAddr,tempData);
2072  0022 7b02          	ld	a,(OFST-3,sp)
2073  0024 88            	push	a
2074  0025 1e04          	ldw	x,(OFST-1,sp)
2075  0027 cd0000        	call	_setCoilVal
2077  002a 84            	pop	a
2078                     ; 363 	for(i=0;i<receCount;i++)
2080  002b 0f05          	clr	(OFST+0,sp)
2082  002d 200c          	jra	L144
2083  002f               L534:
2084                     ; 365 		sendBuf[i] = receBuf[i];
2086  002f 7b05          	ld	a,(OFST+0,sp)
2087  0031 5f            	clrw	x
2088  0032 97            	ld	xl,a
2089  0033 d6000a        	ld	a,(_receBuf,x)
2090  0036 d70032        	ld	(_sendBuf,x),a
2091                     ; 363 	for(i=0;i<receCount;i++)
2093  0039 0c05          	inc	(OFST+0,sp)
2094  003b               L144:
2097  003b 7b05          	ld	a,(OFST+0,sp)
2098  003d 5f            	clrw	x
2099  003e 97            	ld	xl,a
2100  003f c30004        	cpw	x,_receCount
2101  0042 25eb          	jrult	L534
2102                     ; 367 	sendCount = receCount;
2104  0044 ce0004        	ldw	x,_receCount
2105  0047 cf0006        	ldw	_sendCount,x
2106                     ; 368 	beginSend();
2108  004a cd0000        	call	_beginSend
2110                     ; 369 }//void forceSingleCoil(void)
2113  004d 5b05          	addw	sp,#5
2114  004f 81            	ret
2189                     ; 373 void presetMultipleRegisters(void)
2189                     ; 374 {
2190                     .text:	section	.text,new
2191  0000               _presetMultipleRegisters:
2193  0000 5209          	subw	sp,#9
2194       00000009      OFST:	set	9
2197                     ; 383 	addr = (receBuf[2]<<8) + receBuf[3];
2199  0002 c6000c        	ld	a,_receBuf+2
2200  0005 5f            	clrw	x
2201  0006 97            	ld	xl,a
2202  0007 4f            	clr	a
2203  0008 02            	rlwa	x,a
2204  0009 01            	rrwa	x,a
2205  000a cb000d        	add	a,_receBuf+3
2206  000d 2401          	jrnc	L06
2207  000f 5c            	incw	x
2208  0010               L06:
2209  0010 02            	rlwa	x,a
2210  0011 1f04          	ldw	(OFST-5,sp),x
2211  0013 01            	rrwa	x,a
2212                     ; 384 	tempAddr = addr & 0xffff;
2214  0014 1e04          	ldw	x,(OFST-5,sp)
2215  0016 1f06          	ldw	(OFST-3,sp),x
2216                     ; 389 	setCount = receBuf[5];
2218  0018 c6000f        	ld	a,_receBuf+5
2219  001b 6b08          	ld	(OFST-1,sp),a
2220                     ; 391     setCount = setCount>0x7F?0x7F:setCount;
2222  001d 7b08          	ld	a,(OFST-1,sp)
2223  001f a180          	cp	a,#128
2224  0021 2504          	jrult	L26
2225  0023 a67f          	ld	a,#127
2226  0025 2002          	jra	L46
2227  0027               L26:
2228  0027 7b08          	ld	a,(OFST-1,sp)
2229  0029               L46:
2230  0029 6b08          	ld	(OFST-1,sp),a
2231                     ; 395 	for(i=0;i<setCount;i++,tempAddr++)
2233  002b 0f09          	clr	(OFST+0,sp)
2235  002d 2032          	jra	L774
2236  002f               L374:
2237                     ; 397 		tempData = (receBuf[i*2+7]<<8) + receBuf[i*2+8];  
2239  002f 7b09          	ld	a,(OFST+0,sp)
2240  0031 5f            	clrw	x
2241  0032 97            	ld	xl,a
2242  0033 58            	sllw	x
2243  0034 d60012        	ld	a,(_receBuf+8,x)
2244  0037 6b01          	ld	(OFST-8,sp),a
2245  0039 7b09          	ld	a,(OFST+0,sp)
2246  003b 5f            	clrw	x
2247  003c 97            	ld	xl,a
2248  003d 58            	sllw	x
2249  003e d60011        	ld	a,(_receBuf+7,x)
2250  0041 5f            	clrw	x
2251  0042 97            	ld	xl,a
2252  0043 4f            	clr	a
2253  0044 02            	rlwa	x,a
2254  0045 01            	rrwa	x,a
2255  0046 1b01          	add	a,(OFST-8,sp)
2256  0048 2401          	jrnc	L66
2257  004a 5c            	incw	x
2258  004b               L66:
2259  004b 02            	rlwa	x,a
2260  004c 1f02          	ldw	(OFST-7,sp),x
2261  004e 01            	rrwa	x,a
2262                     ; 399 		setRegisterVal(tempAddr,tempData);
2264  004f 1e02          	ldw	x,(OFST-7,sp)
2265  0051 89            	pushw	x
2266  0052 1e08          	ldw	x,(OFST-1,sp)
2267  0054 cd0000        	call	_setRegisterVal
2269  0057 85            	popw	x
2270                     ; 395 	for(i=0;i<setCount;i++,tempAddr++)
2272  0058 0c09          	inc	(OFST+0,sp)
2273  005a 1e06          	ldw	x,(OFST-3,sp)
2274  005c 1c0001        	addw	x,#1
2275  005f 1f06          	ldw	(OFST-3,sp),x
2276  0061               L774:
2279  0061 7b09          	ld	a,(OFST+0,sp)
2280  0063 1108          	cp	a,(OFST-1,sp)
2281  0065 25c8          	jrult	L374
2282                     ; 402 	sendBuf[0] = IED.nId;//localAddr;
2284  0067 5500000032    	mov	_sendBuf,_IED
2285                     ; 403 	sendBuf[1] = 16;
2287  006c 35100033      	mov	_sendBuf+1,#16
2288                     ; 404 	sendBuf[2] = addr >> 8;
2290  0070 7b04          	ld	a,(OFST-5,sp)
2291  0072 c70034        	ld	_sendBuf+2,a
2292                     ; 405 	sendBuf[3] = addr & 0xff;
2294  0075 7b05          	ld	a,(OFST-4,sp)
2295  0077 a4ff          	and	a,#255
2296  0079 c70035        	ld	_sendBuf+3,a
2297                     ; 406 	sendBuf[4] = setCount >> 8;
2299  007c 725f0036      	clr	_sendBuf+4
2300                     ; 407 	sendBuf[5] = setCount & 0xff;
2302  0080 7b08          	ld	a,(OFST-1,sp)
2303  0082 c70037        	ld	_sendBuf+5,a
2304                     ; 408 	crcData = crc16(sendBuf,6);
2306  0085 ae0006        	ldw	x,#6
2307  0088 89            	pushw	x
2308  0089 ae0032        	ldw	x,#_sendBuf
2309  008c cd0000        	call	_crc16
2311  008f 5b02          	addw	sp,#2
2312  0091 1f04          	ldw	(OFST-5,sp),x
2313                     ; 409 	sendBuf[6] = crcData >> 8;
2315  0093 7b04          	ld	a,(OFST-5,sp)
2316  0095 c70038        	ld	_sendBuf+6,a
2317                     ; 410 	sendBuf[7] = crcData & 0xff;
2319  0098 7b05          	ld	a,(OFST-4,sp)
2320  009a a4ff          	and	a,#255
2321  009c c70039        	ld	_sendBuf+7,a
2322                     ; 411 	sendCount = 8;			   
2324  009f ae0008        	ldw	x,#8
2325  00a2 cf0006        	ldw	_sendCount,x
2326                     ; 412 	beginSend();
2328  00a5 cd0000        	call	_beginSend
2330                     ; 413 }//void presetMultipleRegisters(void)
2333  00a8 5b09          	addw	sp,#9
2334  00aa 81            	ret
2388                     ; 415 void presetSingleRegister(void)
2388                     ; 416 {
2389                     .text:	section	.text,new
2390  0000               _presetSingleRegister:
2392  0000 5204          	subw	sp,#4
2393       00000004      OFST:	set	4
2396                     ; 422 	addr = (receBuf[2]<<8) + receBuf[3];
2398  0002 c6000c        	ld	a,_receBuf+2
2399  0005 5f            	clrw	x
2400  0006 97            	ld	xl,a
2401  0007 4f            	clr	a
2402  0008 02            	rlwa	x,a
2403  0009 01            	rrwa	x,a
2404  000a cb000d        	add	a,_receBuf+3
2405  000d 2401          	jrnc	L27
2406  000f 5c            	incw	x
2407  0010               L27:
2408  0010 02            	rlwa	x,a
2409  0011 1f03          	ldw	(OFST-1,sp),x
2410  0013 01            	rrwa	x,a
2411                     ; 425 	tempData = (receBuf[4]<<8) + receBuf[5];	
2413  0014 c6000e        	ld	a,_receBuf+4
2414  0017 5f            	clrw	x
2415  0018 97            	ld	xl,a
2416  0019 4f            	clr	a
2417  001a 02            	rlwa	x,a
2418  001b 01            	rrwa	x,a
2419  001c cb000f        	add	a,_receBuf+5
2420  001f 2401          	jrnc	L47
2421  0021 5c            	incw	x
2422  0022               L47:
2423  0022 02            	rlwa	x,a
2424  0023 1f01          	ldw	(OFST-3,sp),x
2425  0025 01            	rrwa	x,a
2426                     ; 427 	Disable(); 
2429  0026 9b            sim
2431                     ; 428 	setRegisterVal(addr,tempData); 
2433  0027 1e01          	ldw	x,(OFST-3,sp)
2434  0029 89            	pushw	x
2435  002a 1e05          	ldw	x,(OFST+1,sp)
2436  002c cd0000        	call	_setRegisterVal
2438  002f 85            	popw	x
2439                     ; 429 	Enable();
2442  0030 9a            rim
2444                     ; 431 	sendBuf[0] = IED.nId;//localAddr;
2446  0031 5500000032    	mov	_sendBuf,_IED
2447                     ; 432 	sendBuf[1] = 06;
2449  0036 35060033      	mov	_sendBuf+1,#6
2450                     ; 433 	sendBuf[2] = addr >> 8;
2452  003a 7b03          	ld	a,(OFST-1,sp)
2453  003c c70034        	ld	_sendBuf+2,a
2454                     ; 434 	sendBuf[3] = addr & 0xff;
2456  003f 7b04          	ld	a,(OFST+0,sp)
2457  0041 a4ff          	and	a,#255
2458  0043 c70035        	ld	_sendBuf+3,a
2459                     ; 435 	sendBuf[4] = tempData >> 8;
2461  0046 7b01          	ld	a,(OFST-3,sp)
2462  0048 c70036        	ld	_sendBuf+4,a
2463                     ; 436 	sendBuf[5] = tempData & 0xff;
2465  004b 7b02          	ld	a,(OFST-2,sp)
2466  004d a4ff          	and	a,#255
2467  004f c70037        	ld	_sendBuf+5,a
2468                     ; 437 	crcData = crc16(sendBuf,6);
2470  0052 ae0006        	ldw	x,#6
2471  0055 89            	pushw	x
2472  0056 ae0032        	ldw	x,#_sendBuf
2473  0059 cd0000        	call	_crc16
2475  005c 5b02          	addw	sp,#2
2476  005e 1f03          	ldw	(OFST-1,sp),x
2477                     ; 438 	sendBuf[6] = crcData >> 8;
2479  0060 7b03          	ld	a,(OFST-1,sp)
2480  0062 c70038        	ld	_sendBuf+6,a
2481                     ; 439 	sendBuf[7] = crcData & 0xff;
2483  0065 7b04          	ld	a,(OFST+0,sp)
2484  0067 a4ff          	and	a,#255
2485  0069 c70039        	ld	_sendBuf+7,a
2486                     ; 440 	sendCount = 8;			   
2488  006c ae0008        	ldw	x,#8
2489  006f cf0006        	ldw	_sendCount,x
2490                     ; 441 	beginSend();
2492  0072 cd0000        	call	_beginSend
2494                     ; 442 }
2497  0075 5b04          	addw	sp,#4
2498  0077 81            	ret
2501                     	switch	.data
2502  0000               _ReSendCnt:
2503  0000 00            	dc.b	0
2504  0001               _preRecID:
2505  0001 00            	dc.b	0
2506                     	switch	.bss
2507  0000               L325_preRecID:
2508  0000 00            	ds.b	1
2579                     ; 450 void checkComm0Modbus(void)
2579                     ; 451 {
2580                     .text:	section	.text,new
2581  0000               _checkComm0Modbus:
2583  0000 5205          	subw	sp,#5
2584       00000005      OFST:	set	5
2587                     ; 456 	char recID =  receBuf[0] ; 
2589  0002 c6000a        	ld	a,_receBuf
2590  0005 6b01          	ld	(OFST-4,sp),a
2591                     ; 457 	if(preRecID==recID)
2593  0007 c60000        	ld	a,L325_preRecID
2594  000a 1101          	cp	a,(OFST-4,sp)
2595  000c 2606          	jrne	L755
2596                     ; 458 		ReSendCnt++;
2598  000e 725c0000      	inc	_ReSendCnt
2600  0012 2014          	jra	L165
2601  0014               L755:
2602                     ; 460 		ReSendCnt>0?ReSendCnt--:0; 
2604  0014 725d0000      	tnz	_ReSendCnt
2605  0018 270d          	jreq	L001
2606  001a c60000        	ld	a,_ReSendCnt
2607  001d 97            	ld	xl,a
2608  001e 725a0000      	dec	_ReSendCnt
2609  0022 9f            	ld	a,xl
2610  0023 5f            	clrw	x
2611  0024 97            	ld	xl,a
2612  0025 2001          	jra	L201
2613  0027               L001:
2614  0027 5f            	clrw	x
2615  0028               L201:
2616  0028               L165:
2617                     ; 461 	preRecID = recID;
2619  0028 7b01          	ld	a,(OFST-4,sp)
2620  002a c70000        	ld	L325_preRecID,a
2621                     ; 462 	if(ReSendCnt>5)  //十次超时,关掉
2623  002d c60000        	ld	a,_ReSendCnt
2624  0030 a106          	cp	a,#6
2625  0032 2540          	jrult	L365
2626                     ; 464 		if((Warning_flag==1)&&(IED.Direction==MOTOR_DOWN)&&(COMM_ERR_FLAG==0))
2628  0034 c60000        	ld	a,_Warning_flag
2629  0037 a101          	cp	a,#1
2630  0039 262e          	jrne	L565
2632  003b c60011        	ld	a,_IED+17
2633  003e a101          	cp	a,#1
2634  0040 2627          	jrne	L565
2636  0042 725d0001      	tnz	_COMM_ERR_FLAG
2637  0046 2621          	jrne	L565
2638                     ; 466 					COMM_ERR_FLAG=1;
2640  0048 35010001      	mov	_COMM_ERR_FLAG,#1
2641                     ; 467 					StopMotor();
2643  004c cd0000        	call	_StopMotor
2645                     ; 468 					UNLockAllMotor();
2647  004f cd0000        	call	_UNLockAllMotor
2649                     ; 469 			    StartTimer(TIMER_MODE_ONCEROUTINE,10UL, ConvertDown1,0);
2651  0052 5f            	clrw	x
2652  0053 89            	pushw	x
2653  0054 ae0000        	ldw	x,#_ConvertDown1
2654  0057 89            	pushw	x
2655  0058 ae000a        	ldw	x,#10
2656  005b 89            	pushw	x
2657  005c ae0000        	ldw	x,#0
2658  005f 89            	pushw	x
2659  0060 a601          	ld	a,#1
2660  0062 cd0000        	call	_StartTimer
2662  0065 5b08          	addw	sp,#8
2664  0067 200f          	jra	L375
2665  0069               L565:
2666                     ; 474 					if(COMM_ERR_FLAG==0)
2668  0069 725d0001      	tnz	_COMM_ERR_FLAG
2669  006d 2609          	jrne	L375
2670                     ; 475 					 StopMotor();
2672  006f cd0000        	call	_StopMotor
2674  0072 2004          	jra	L375
2675  0074               L365:
2676                     ; 480 	else {COMM_ERR_FLAG=0;}
2678  0074 725f0001      	clr	_COMM_ERR_FLAG
2679  0078               L375:
2680                     ; 483 	if((receBuf[0]!=IED.nId)&&(receBuf[0]!=0x00)) //localAddr
2682  0078 c6000a        	ld	a,_receBuf
2683  007b c10000        	cp	a,_IED
2684  007e 2709          	jreq	L575
2686  0080 725d000a      	tnz	_receBuf
2687  0084 2703          	jreq	L611
2688  0086 cc01d7        	jp	L411
2689  0089               L611:
2690                     ; 484 		return ;
2692  0089               L575:
2693                     ; 485 	if(receCount > 4)
2695  0089 ce0004        	ldw	x,_receCount
2696  008c a30005        	cpw	x,#5
2697  008f 2403          	jruge	L021
2698  0091 cc01d7        	jp	L775
2699  0094               L021:
2700                     ; 487 		switch(receBuf[1])
2702  0094 c6000b        	ld	a,_receBuf+1
2704                     ; 572 			default:
2704                     ; 573 					break;
2705  0097 4a            	dec	a
2706  0098 2720          	jreq	L525
2707  009a 4a            	dec	a
2708  009b 271d          	jreq	L525
2709  009d 4a            	dec	a
2710  009e 271a          	jreq	L525
2711  00a0 4a            	dec	a
2712  00a1 2717          	jreq	L525
2713  00a3 4a            	dec	a
2714  00a4 2714          	jreq	L525
2715  00a6 4a            	dec	a
2716  00a7 2711          	jreq	L525
2717  00a9 a009          	sub	a,#9
2718  00ab 2603          	jrne	L221
2719  00ad cc0137        	jp	L725
2720  00b0               L221:
2721  00b0 4a            	dec	a
2722  00b1 2603          	jrne	L421
2723  00b3 cc017e        	jp	L135
2724  00b6               L421:
2725  00b6 acd701d7      	jpf	L775
2726  00ba               L525:
2727                     ; 489 			case 1://读取线圈状态(读取点 16位以内)
2727                     ; 490             case 2://读取输入寄存器
2727                     ; 491 			case 3://读取保持寄存器(一个或多个)    
2727                     ; 492             case 4:
2727                     ; 493 			case 5://强制单个线圈
2727                     ; 494 			case 6://设置单个寄存器
2727                     ; 495 					
2727                     ; 496 					if(receCount >= 8)
2729  00ba ce0004        	ldw	x,_receCount
2730  00bd a30008        	cpw	x,#8
2731  00c0 2403          	jruge	L621
2732  00c2 cc01d7        	jp	L775
2733  00c5               L621:
2734                     ; 501 							crcData = crc16(receBuf,6);
2736  00c5 ae0006        	ldw	x,#6
2737  00c8 89            	pushw	x
2738  00c9 ae000a        	ldw	x,#_receBuf
2739  00cc cd0000        	call	_crc16
2741  00cf 5b02          	addw	sp,#2
2742  00d1 1f02          	ldw	(OFST-3,sp),x
2743                     ; 502 							if(crcData == receBuf[7]+(receBuf[6]<<8))
2745  00d3 c60010        	ld	a,_receBuf+6
2746  00d6 5f            	clrw	x
2747  00d7 97            	ld	xl,a
2748  00d8 4f            	clr	a
2749  00d9 02            	rlwa	x,a
2750  00da 01            	rrwa	x,a
2751  00db cb0011        	add	a,_receBuf+7
2752  00de 2401          	jrnc	L401
2753  00e0 5c            	incw	x
2754  00e1               L401:
2755  00e1 02            	rlwa	x,a
2756  00e2 1302          	cpw	x,(OFST-3,sp)
2757  00e4 2649          	jrne	L706
2758                     ; 504 								if(receBuf[1] == 1)
2760  00e6 c6000b        	ld	a,_receBuf+1
2761  00e9 a101          	cp	a,#1
2762  00eb 2605          	jrne	L116
2763                     ; 506 									readCoil();
2765  00ed cd0000        	call	_readCoil
2768  00f0 203d          	jra	L706
2769  00f2               L116:
2770                     ; 508                                 else if(receBuf[1] == 2)
2772  00f2 c6000b        	ld	a,_receBuf+1
2773  00f5 a102          	cp	a,#2
2774  00f7 2605          	jrne	L516
2775                     ; 511                                     ReadInputStatus();
2777  00f9 cd0000        	call	_ReadInputStatus
2780  00fc 2031          	jra	L706
2781  00fe               L516:
2782                     ; 513 								else if(receBuf[1] == 3)
2784  00fe c6000b        	ld	a,_receBuf+1
2785  0101 a103          	cp	a,#3
2786  0103 2605          	jrne	L126
2787                     ; 515 									readRegisters();
2789  0105 cd0000        	call	_readRegisters
2792  0108 2025          	jra	L706
2793  010a               L126:
2794                     ; 517                                 else if(receBuf[1] == 4)
2796  010a c6000b        	ld	a,_receBuf+1
2797  010d a104          	cp	a,#4
2798  010f 2605          	jrne	L526
2799                     ; 519 									readInputRegisters();
2801  0111 cd0000        	call	_readInputRegisters
2804  0114 2019          	jra	L706
2805  0116               L526:
2806                     ; 521 								else if(receBuf[1] == 5)
2808  0116 c6000b        	ld	a,_receBuf+1
2809  0119 a105          	cp	a,#5
2810  011b 2605          	jrne	L136
2811                     ; 523 									forceSingleCoil();
2813  011d cd0000        	call	_forceSingleCoil
2816  0120 200d          	jra	L706
2817  0122               L136:
2818                     ; 525 								else if(receBuf[1] == 6)
2820  0122 c6000b        	ld	a,_receBuf+1
2821  0125 a106          	cp	a,#6
2822  0127 2606          	jrne	L706
2823                     ; 527 									presetSingleRegister();
2825  0129 cd0000        	call	_presetSingleRegister
2827                     ; 528 									TaskParsaCmd();
2829  012c cd0000        	call	_TaskParsaCmd
2831  012f               L706:
2832                     ; 534 						receCount = 0;	         
2834  012f 5f            	clrw	x
2835  0130 cf0004        	ldw	_receCount,x
2836  0133 acd701d7      	jpf	L775
2837  0137               L725:
2838                     ; 538 			case 15://设置多个线圈
2838                     ; 539 					tempData = receBuf[6];
2840  0137 c60010        	ld	a,_receBuf+6
2841  013a 5f            	clrw	x
2842  013b 97            	ld	xl,a
2843  013c 1f04          	ldw	(OFST-1,sp),x
2844                     ; 540 					tempData += 9;	//数据个数
2846  013e 1e04          	ldw	x,(OFST-1,sp)
2847  0140 1c0009        	addw	x,#9
2848  0143 1f04          	ldw	(OFST-1,sp),x
2849                     ; 541 					if(receCount >= tempData)
2851  0145 ce0004        	ldw	x,_receCount
2852  0148 1304          	cpw	x,(OFST-1,sp)
2853  014a 2403cc01d7    	jrult	L775
2854                     ; 544 							crcData = crc16(receBuf,tempData-2);
2856  014f 1e04          	ldw	x,(OFST-1,sp)
2857  0151 5a            	decw	x
2858  0152 5a            	decw	x
2859  0153 89            	pushw	x
2860  0154 ae000a        	ldw	x,#_receBuf
2861  0157 cd0000        	call	_crc16
2863  015a 5b02          	addw	sp,#2
2864  015c 1f02          	ldw	(OFST-3,sp),x
2865                     ; 545 							if(crcData == (receBuf[tempData-2]<<8)+ receBuf[tempData-1])
2867  015e 1e04          	ldw	x,(OFST-1,sp)
2868  0160 5a            	decw	x
2869  0161 5a            	decw	x
2870  0162 d6000a        	ld	a,(_receBuf,x)
2871  0165 5f            	clrw	x
2872  0166 97            	ld	xl,a
2873  0167 4f            	clr	a
2874  0168 02            	rlwa	x,a
2875  0169 01            	rrwa	x,a
2876  016a 1604          	ldw	y,(OFST-1,sp)
2877  016c 905a          	decw	y
2878  016e 90db000a      	add	a,(_receBuf,y)
2879  0172 2401          	jrnc	L601
2880  0174 5c            	incw	x
2881  0175               L601:
2882  0175 02            	rlwa	x,a
2883  0176 1302          	cpw	x,(OFST-3,sp)
2884                     ; 550 						receCount = 0;       
2886  0178 5f            	clrw	x
2887  0179 cf0004        	ldw	_receCount,x
2888  017c 2059          	jra	L775
2889  017e               L135:
2890                     ; 554 			case 16://设置多个寄存器
2890                     ; 555 					tempData = (((unsigned int )receBuf[4])<<8) + receBuf[5];
2892  017e c6000e        	ld	a,_receBuf+4
2893  0181 5f            	clrw	x
2894  0182 97            	ld	xl,a
2895  0183 4f            	clr	a
2896  0184 02            	rlwa	x,a
2897  0185 01            	rrwa	x,a
2898  0186 cb000f        	add	a,_receBuf+5
2899  0189 2401          	jrnc	L011
2900  018b 5c            	incw	x
2901  018c               L011:
2902  018c 02            	rlwa	x,a
2903  018d 1f04          	ldw	(OFST-1,sp),x
2904  018f 01            	rrwa	x,a
2905                     ; 556 					tempData = tempData * 2;	//数据个数
2907  0190 0805          	sll	(OFST+0,sp)
2908  0192 0904          	rlc	(OFST-1,sp)
2909                     ; 557 					tempData += 9;
2911  0194 1e04          	ldw	x,(OFST-1,sp)
2912  0196 1c0009        	addw	x,#9
2913  0199 1f04          	ldw	(OFST-1,sp),x
2914                     ; 560 					if(receCount >= tempData)
2916  019b ce0004        	ldw	x,_receCount
2917  019e 1304          	cpw	x,(OFST-1,sp)
2918  01a0 2535          	jrult	L775
2919                     ; 562 				        crcData = crc16(receBuf,tempData-2);
2921  01a2 1e04          	ldw	x,(OFST-1,sp)
2922  01a4 5a            	decw	x
2923  01a5 5a            	decw	x
2924  01a6 89            	pushw	x
2925  01a7 ae000a        	ldw	x,#_receBuf
2926  01aa cd0000        	call	_crc16
2928  01ad 5b02          	addw	sp,#2
2929  01af 1f02          	ldw	(OFST-3,sp),x
2930                     ; 563 				        if(crcData == (((unsigned int)receBuf[tempData-2])<<8)+ receBuf[tempData-1])
2932  01b1 1e04          	ldw	x,(OFST-1,sp)
2933  01b3 5a            	decw	x
2934  01b4 5a            	decw	x
2935  01b5 d6000a        	ld	a,(_receBuf,x)
2936  01b8 5f            	clrw	x
2937  01b9 97            	ld	xl,a
2938  01ba 4f            	clr	a
2939  01bb 02            	rlwa	x,a
2940  01bc 01            	rrwa	x,a
2941  01bd 1604          	ldw	y,(OFST-1,sp)
2942  01bf 905a          	decw	y
2943  01c1 90db000a      	add	a,(_receBuf,y)
2944  01c5 2401          	jrnc	L211
2945  01c7 5c            	incw	x
2946  01c8               L211:
2947  01c8 02            	rlwa	x,a
2948  01c9 1302          	cpw	x,(OFST-3,sp)
2949  01cb 2606          	jrne	L546
2950                     ; 565 							presetMultipleRegisters();
2952  01cd cd0000        	call	_presetMultipleRegisters
2954                     ; 566 							TaskParsaCmd();
2956  01d0 cd0000        	call	_TaskParsaCmd
2958  01d3               L546:
2959                     ; 568 						receCount = 0;       
2961  01d3 5f            	clrw	x
2962  01d4 cf0004        	ldw	_receCount,x
2963  01d7               L335:
2964                     ; 572 			default:
2964                     ; 573 					break;
2966  01d7               L306:
2967  01d7               L775:
2968                     ; 576 }//void checkComm0(void)
2969  01d7               L411:
2972  01d7 5b05          	addw	sp,#5
2973  01d9 81            	ret
3047                     ; 579 uint16_t getCoilVal(uint16_t addr,uint8_t *tempData)
3047                     ; 580 {					   
3048                     .text:	section	.text,new
3049  0000               _getCoilVal:
3051  0000 89            	pushw	x
3052  0001 5208          	subw	sp,#8
3053       00000008      OFST:	set	8
3056                     ; 583 	unsigned char *pCoilPtr = 0;  
3058                     ; 584 	unsigned int CoilAddr 	= 0;
3060                     ; 585 	unsigned int CoilBit  	= 0;   
3062                     ; 587 	tempAddr = addr & 0xFF;
3064  0003 01            	rrwa	x,a
3065  0004 a4ff          	and	a,#255
3066  0006 5f            	clrw	x
3067  0007 02            	rlwa	x,a
3068  0008 1f07          	ldw	(OFST-1,sp),x
3069  000a 01            	rrwa	x,a
3070                     ; 589 	tempAddr = tempAddr%16;  //只有8位
3072  000b 7b08          	ld	a,(OFST+0,sp)
3073  000d a40f          	and	a,#15
3074  000f 6b08          	ld	(OFST+0,sp),a
3075  0011 0f07          	clr	(OFST-1,sp)
3076                     ; 591 	CoilAddr = tempAddr/8;
3078  0013 1e07          	ldw	x,(OFST-1,sp)
3079  0015 54            	srlw	x
3080  0016 54            	srlw	x
3081  0017 54            	srlw	x
3082  0018 1f03          	ldw	(OFST-5,sp),x
3083                     ; 592 	CoilBit  = tempAddr%8;
3085  001a 7b07          	ld	a,(OFST-1,sp)
3086  001c 97            	ld	xl,a
3087  001d 7b08          	ld	a,(OFST+0,sp)
3088  001f a407          	and	a,#7
3089  0021 5f            	clrw	x
3090  0022 02            	rlwa	x,a
3091  0023 1f05          	ldw	(OFST-3,sp),x
3092  0025 01            	rrwa	x,a
3093                     ; 595  	pCoilPtr = SPIIO.OutPort.Out;
3095  0026 ae0000        	ldw	x,#_SPIIO
3096  0029 1f07          	ldw	(OFST-1,sp),x
3097                     ; 596 	pCoilPtr+= CoilAddr;
3099  002b 1e07          	ldw	x,(OFST-1,sp)
3100  002d 72fb03        	addw	x,(OFST-5,sp)
3101  0030 1f07          	ldw	(OFST-1,sp),x
3102                     ; 598 	if(*pCoilPtr&(1<<CoilBit))
3104  0032 1e07          	ldw	x,(OFST-1,sp)
3105  0034 f6            	ld	a,(x)
3106  0035 5f            	clrw	x
3107  0036 97            	ld	xl,a
3108  0037 1f01          	ldw	(OFST-7,sp),x
3109  0039 ae0001        	ldw	x,#1
3110  003c 7b06          	ld	a,(OFST-2,sp)
3111  003e 4d            	tnz	a
3112  003f 2704          	jreq	L231
3113  0041               L431:
3114  0041 58            	sllw	x
3115  0042 4a            	dec	a
3116  0043 26fc          	jrne	L431
3117  0045               L231:
3118  0045 01            	rrwa	x,a
3119  0046 1402          	and	a,(OFST-6,sp)
3120  0048 01            	rrwa	x,a
3121  0049 1401          	and	a,(OFST-7,sp)
3122  004b 01            	rrwa	x,a
3123  004c a30000        	cpw	x,#0
3124  004f 2707          	jreq	L107
3125                     ; 599 		*tempData	  = 1;
3127  0051 1e0d          	ldw	x,(OFST+5,sp)
3128  0053 a601          	ld	a,#1
3129  0055 f7            	ld	(x),a
3131  0056 2003          	jra	L307
3132  0058               L107:
3133                     ; 601 		*tempData     = 0;	
3135  0058 1e0d          	ldw	x,(OFST+5,sp)
3136  005a 7f            	clr	(x)
3137  005b               L307:
3138                     ; 602 	return 1;
3140  005b ae0001        	ldw	x,#1
3143  005e 5b0a          	addw	sp,#10
3144  0060 81            	ret
3218                     ; 606 uint16_t getInputStatusVal(uint16_t addr,uint8_t *tempData)
3218                     ; 607 {					   
3219                     .text:	section	.text,new
3220  0000               _getInputStatusVal:
3222  0000 89            	pushw	x
3223  0001 5208          	subw	sp,#8
3224       00000008      OFST:	set	8
3227                     ; 610 	unsigned char *pRegPtr = 0;  
3229                     ; 611 	unsigned int RegAddr = 0;
3231                     ; 612 	unsigned int RegBit  = 0;   
3233                     ; 614 	tempAddr = addr & 0xFF;
3235  0003 01            	rrwa	x,a
3236  0004 a4ff          	and	a,#255
3237  0006 5f            	clrw	x
3238  0007 02            	rlwa	x,a
3239  0008 1f07          	ldw	(OFST-1,sp),x
3240  000a 01            	rrwa	x,a
3241                     ; 618 	RegAddr = tempAddr/8;
3243  000b 1e07          	ldw	x,(OFST-1,sp)
3244  000d 54            	srlw	x
3245  000e 54            	srlw	x
3246  000f 54            	srlw	x
3247  0010 1f03          	ldw	(OFST-5,sp),x
3248                     ; 619 	RegBit  = tempAddr%8; 																			 
3250  0012 7b07          	ld	a,(OFST-1,sp)
3251  0014 97            	ld	xl,a
3252  0015 7b08          	ld	a,(OFST+0,sp)
3253  0017 a407          	and	a,#7
3254  0019 5f            	clrw	x
3255  001a 02            	rlwa	x,a
3256  001b 1f05          	ldw	(OFST-3,sp),x
3257  001d 01            	rrwa	x,a
3258                     ; 620 	pRegPtr = SPIIO.InPort.In;
3260  001e ae0004        	ldw	x,#_SPIIO+4
3261  0021 1f07          	ldw	(OFST-1,sp),x
3262                     ; 621 	pRegPtr+= RegAddr;
3264  0023 1e07          	ldw	x,(OFST-1,sp)
3265  0025 72fb03        	addw	x,(OFST-5,sp)
3266  0028 1f07          	ldw	(OFST-1,sp),x
3267                     ; 623 	if(*pRegPtr&(1<<RegBit))
3269  002a 1e07          	ldw	x,(OFST-1,sp)
3270  002c f6            	ld	a,(x)
3271  002d 5f            	clrw	x
3272  002e 97            	ld	xl,a
3273  002f 1f01          	ldw	(OFST-7,sp),x
3274  0031 ae0001        	ldw	x,#1
3275  0034 7b06          	ld	a,(OFST-2,sp)
3276  0036 4d            	tnz	a
3277  0037 2704          	jreq	L041
3278  0039               L241:
3279  0039 58            	sllw	x
3280  003a 4a            	dec	a
3281  003b 26fc          	jrne	L241
3282  003d               L041:
3283  003d 01            	rrwa	x,a
3284  003e 1402          	and	a,(OFST-6,sp)
3285  0040 01            	rrwa	x,a
3286  0041 1401          	and	a,(OFST-7,sp)
3287  0043 01            	rrwa	x,a
3288  0044 a30000        	cpw	x,#0
3289  0047 2707          	jreq	L737
3290                     ; 624 		*tempData	  = 1;
3292  0049 1e0d          	ldw	x,(OFST+5,sp)
3293  004b a601          	ld	a,#1
3294  004d f7            	ld	(x),a
3296  004e 2003          	jra	L147
3297  0050               L737:
3298                     ; 626 		*tempData     = 0;	
3300  0050 1e0d          	ldw	x,(OFST+5,sp)
3301  0052 7f            	clr	(x)
3302  0053               L147:
3303                     ; 627 	return 1;
3305  0053 ae0001        	ldw	x,#1
3308  0056 5b0a          	addw	sp,#10
3309  0058 81            	ret
3396                     ; 631 uint16_t setCoilVal(uint16_t addr,uint8_t tempData)
3396                     ; 632 {
3397                     .text:	section	.text,new
3398  0000               _setCoilVal:
3400  0000 89            	pushw	x
3401  0001 520a          	subw	sp,#10
3402       0000000a      OFST:	set	10
3405                     ; 634 	uint16_t result = 0;
3407  0003 5f            	clrw	x
3408  0004 1f01          	ldw	(OFST-9,sp),x
3409                     ; 637 	unsigned char *pCoilPtr = 0;
3411                     ; 639 	unsigned int CoilAddr = 0;
3413                     ; 640 	unsigned int CoilBit  = 0;  
3415                     ; 644 	tempAddr = addr & 0xFF;
3417  0006 7b0b          	ld	a,(OFST+1,sp)
3418  0008 97            	ld	xl,a
3419  0009 7b0c          	ld	a,(OFST+2,sp)
3420  000b a4ff          	and	a,#255
3421  000d 5f            	clrw	x
3422  000e 02            	rlwa	x,a
3423  000f 1f09          	ldw	(OFST-1,sp),x
3424  0011 01            	rrwa	x,a
3425                     ; 646 	tempAddr = tempAddr%16;  //只有16位
3427  0012 7b0a          	ld	a,(OFST+0,sp)
3428  0014 a40f          	and	a,#15
3429  0016 6b0a          	ld	(OFST+0,sp),a
3430  0018 0f09          	clr	(OFST-1,sp)
3431                     ; 648 	CoilAddr = tempAddr/8;
3433  001a 1e09          	ldw	x,(OFST-1,sp)
3434  001c 54            	srlw	x
3435  001d 54            	srlw	x
3436  001e 54            	srlw	x
3437  001f 1f05          	ldw	(OFST-5,sp),x
3438                     ; 649 	CoilBit  = tempAddr%8;
3440  0021 7b09          	ld	a,(OFST-1,sp)
3441  0023 97            	ld	xl,a
3442  0024 7b0a          	ld	a,(OFST+0,sp)
3443  0026 a407          	and	a,#7
3444  0028 5f            	clrw	x
3445  0029 02            	rlwa	x,a
3446  002a 1f07          	ldw	(OFST-3,sp),x
3447  002c 01            	rrwa	x,a
3448                     ; 651  	pCoilPtr = SPIIO.OutPort.Out;
3450  002d ae0000        	ldw	x,#_SPIIO
3451  0030 1f09          	ldw	(OFST-1,sp),x
3452                     ; 652 	pCoilPtr+= CoilAddr;
3454  0032 1e09          	ldw	x,(OFST-1,sp)
3455  0034 72fb05        	addw	x,(OFST-5,sp)
3456  0037 1f09          	ldw	(OFST-1,sp),x
3457                     ; 653 	if	(tempData) //如果为1
3459  0039 0d0f          	tnz	(OFST+5,sp)
3460  003b 2718          	jreq	L777
3461                     ; 655 		*pCoilPtr|=1<<CoilBit;		
3463  003d 1e09          	ldw	x,(OFST-1,sp)
3464  003f 7b08          	ld	a,(OFST-2,sp)
3465  0041 905f          	clrw	y
3466  0043 9097          	ld	yl,a
3467  0045 a601          	ld	a,#1
3468  0047 905d          	tnzw	y
3469  0049 2705          	jreq	L641
3470  004b               L051:
3471  004b 48            	sll	a
3472  004c 905a          	decw	y
3473  004e 26fb          	jrne	L051
3474  0050               L641:
3475  0050 fa            	or	a,(x)
3476  0051 f7            	ld	(x),a
3477                     ; 656 		_nop_();	
3480  0052 9d            nop
3483  0053 2017          	jra	L1001
3484  0055               L777:
3485                     ; 660 		*pCoilPtr&=~(1<<CoilBit);
3487  0055 1e09          	ldw	x,(OFST-1,sp)
3488  0057 7b08          	ld	a,(OFST-2,sp)
3489  0059 905f          	clrw	y
3490  005b 9097          	ld	yl,a
3491  005d a601          	ld	a,#1
3492  005f 905d          	tnzw	y
3493  0061 2705          	jreq	L251
3494  0063               L451:
3495  0063 48            	sll	a
3496  0064 905a          	decw	y
3497  0066 26fb          	jrne	L451
3498  0068               L251:
3499  0068 43            	cpl	a
3500  0069 f4            	and	a,(x)
3501  006a f7            	ld	(x),a
3502                     ; 661 		_nop_();	
3505  006b 9d            nop
3507  006c               L1001:
3508                     ; 664 	tempvar = (unsigned short)*pCoilPtr;
3510  006c 1e09          	ldw	x,(OFST-1,sp)
3511  006e f6            	ld	a,(x)
3512  006f 5f            	clrw	x
3513  0070 97            	ld	xl,a
3514                     ; 666 	return result;
3516  0071 1e01          	ldw	x,(OFST-9,sp)
3519  0073 5b0c          	addw	sp,#12
3520  0075 81            	ret
3588                     ; 672 uint16_t getInputRegisterVal(uint16_t addr,uint16_t *tempData) 
3588                     ; 673 {
3589                     .text:	section	.text,new
3590  0000               _getInputRegisterVal:
3592  0000 89            	pushw	x
3593  0001 5206          	subw	sp,#6
3594       00000006      OFST:	set	6
3597                     ; 674 	uint16_t result = 0;
3599                     ; 676 	uint16_t *ptr   =  (uint16_t*)SPIIO.InPort.In;
3601                     ; 677 	*ptr			=  GPIOF->IDR;
3603  0003 c6501a        	ld	a,20506
3604  0006 5f            	clrw	x
3605  0007 97            	ld	xl,a
3606  0008 cf0004        	ldw	_SPIIO+4,x
3607                     ; 678 	tempAddr = addr & 0xfff;	   
3609  000b 1e07          	ldw	x,(OFST+1,sp)
3610  000d 01            	rrwa	x,a
3611  000e a4ff          	and	a,#255
3612  0010 01            	rrwa	x,a
3613  0011 a40f          	and	a,#15
3614  0013 01            	rrwa	x,a
3615  0014 1f03          	ldw	(OFST-3,sp),x
3616                     ; 679 	*tempData= ptr[tempAddr];
3618  0016 1e03          	ldw	x,(OFST-3,sp)
3619  0018 58            	sllw	x
3620  0019 160b          	ldw	y,(OFST+5,sp)
3621  001b 89            	pushw	x
3622  001c de0004        	ldw	x,(_SPIIO+4,x)
3623  001f 90ff          	ldw	(y),x
3624  0021 85            	popw	x
3625                     ; 680 	return result;
3627  0022 5f            	clrw	x
3630  0023 5b08          	addw	sp,#8
3631  0025 81            	ret
3681                     ; 683 uint16_t getRegisterVal(uint16_t addr,uint16_t *tempData)
3681                     ; 684 {
3682                     .text:	section	.text,new
3683  0000               _getRegisterVal:
3685  0000 89            	pushw	x
3686  0001 89            	pushw	x
3687       00000002      OFST:	set	2
3690                     ; 686 	uint16_t result = 0;  
3692                     ; 687 	*tempData=temp[addr];
3694  0002 58            	sllw	x
3695  0003 1607          	ldw	y,(OFST+5,sp)
3696  0005 89            	pushw	x
3697  0006 72de0008      	ldw	x,([_temp.w],x)
3698  000a 90ff          	ldw	(y),x
3699  000c 85            	popw	x
3700                     ; 688 	return result;
3702  000d 5f            	clrw	x
3705  000e 5b04          	addw	sp,#4
3706  0010 81            	ret
3736                     ; 700 void TaskCommTimer(void)
3736                     ; 701 { 
3737                     .text:	section	.text,new
3738  0000               _TaskCommTimer:
3742                     ; 702 	if(LockTime>0)
3744  0000 ce005c        	ldw	x,_LockTime
3745  0003 2709          	jreq	L5601
3746                     ; 704 		--LockTime;
3748  0005 ce005c        	ldw	x,_LockTime
3749  0008 1d0001        	subw	x,#1
3750  000b cf005c        	ldw	_LockTime,x
3751  000e               L5601:
3752                     ; 706 	if(receTimeOut>0)
3754  000e 725d005b      	tnz	_receTimeOut
3755  0012 2716          	jreq	L7601
3756                     ; 708 		--receTimeOut;	
3758  0014 725a005b      	dec	_receTimeOut
3759                     ; 710 		if(receTimeOut==0 && receCount>0)   //判断通讯接收是否超时
3761  0018 725d005b      	tnz	_receTimeOut
3762  001c 260c          	jrne	L7601
3764  001e ce0004        	ldw	x,_receCount
3765  0021 2707          	jreq	L7601
3766                     ; 712 			checkComm0Modbus();  
3768  0023 cd0000        	call	_checkComm0Modbus
3770                     ; 713 			receCount = 0;      //将接收地址偏移寄存器清零       
3772  0026 5f            	clrw	x
3773  0027 cf0004        	ldw	_receCount,x
3774  002a               L7601:
3775                     ; 716 	if(TxTimeOut>0)							//延时启动发送任务
3777  002a 725d005a      	tnz	_TxTimeOut
3778  002e 2711          	jreq	L3701
3779                     ; 718 		--TxTimeOut;
3781  0030 725a005a      	dec	_TxTimeOut
3782                     ; 719 		if(TxTimeOut==0)
3784  0034 725d005a      	tnz	_TxTimeOut
3785  0038 2607          	jrne	L3701
3786                     ; 721 			sendPosi = 0;
3788  003a 5f            	clrw	x
3789  003b cf0002        	ldw	_sendPosi,x
3790                     ; 722 			Send();				  
3792  003e cd0000        	call	_Send
3794  0041               L3701:
3795                     ; 726 }
3798  0041 81            	ret
3825                     ; 729 void beginSend(void)
3825                     ; 730 { 
3826                     .text:	section	.text,new
3827  0000               _beginSend:
3831                     ; 731 	if(receBuf[0]!=0x00)
3833  0000 725d000a      	tnz	_receBuf
3834  0004 270d          	jreq	L7011
3835                     ; 733 		DIR_SET_SEND();	//设为发送
3837  0006 4b10          	push	#16
3838  0008 ae5019        	ldw	x,#20505
3839  000b cd0000        	call	_GPIO_WriteHigh
3841  000e 84            	pop	a
3842                     ; 734 		TxTimeOut = 5;
3844  000f 3505005a      	mov	_TxTimeOut,#5
3845  0013               L7011:
3846                     ; 736 	nop();
3849  0013 9d            nop
3851                     ; 737 }//void beginSend(void)
3855  0014 81            	ret
3879                     ; 739 void Send(void)
3879                     ; 740 {  
3880                     .text:	section	.text,new
3881  0000               _Send:
3885                     ; 741 	UART2_ITConfig(UART2_IT_TXE, ENABLE); //运行发送中断   
3887  0000 4b01          	push	#1
3888  0002 ae0277        	ldw	x,#631
3889  0005 cd0000        	call	_UART2_ITConfig
3891  0008 84            	pop	a
3892                     ; 742 }
3895  0009 81            	ret
3949                     ; 744 uint16_t setRegisterVal(uint16_t addr,uint16_t tempData)
3949                     ; 745 {
3950                     .text:	section	.text,new
3951  0000               _setRegisterVal:
3953  0000 89            	pushw	x
3954  0001 5204          	subw	sp,#4
3955       00000004      OFST:	set	4
3958                     ; 746 	uint16_t result = 0;
3960  0003 5f            	clrw	x
3961  0004 1f01          	ldw	(OFST-3,sp),x
3962                     ; 748 	Disable();
3965  0006 9b            sim
3967                     ; 749 	tempAddr = addr & 0xfff;    
3969  0007 1e05          	ldw	x,(OFST+1,sp)
3970  0009 01            	rrwa	x,a
3971  000a a4ff          	and	a,#255
3972  000c 01            	rrwa	x,a
3973  000d a40f          	and	a,#15
3974  000f 01            	rrwa	x,a
3975  0010 1f03          	ldw	(OFST-1,sp),x
3976                     ; 750 	temp[tempAddr]=tempData; 
3978  0012 1e03          	ldw	x,(OFST-1,sp)
3979  0014 58            	sllw	x
3980  0015 1609          	ldw	y,(OFST+5,sp)
3981  0017 72df0008      	ldw	([_temp.w],x),y
3982                     ; 751 	Enable();
3985  001b 9a            rim
3987                     ; 752 	return result;
3989  001c 1e01          	ldw	x,(OFST-3,sp)
3992  001e 5b06          	addw	sp,#6
3993  0020 81            	ret
4023                     ; 760 void InitUART2(void)
4023                     ; 761 { 
4024                     .text:	section	.text,new
4025  0000               _InitUART2:
4029                     ; 762 	GPIO_WriteHigh(GPIOD, GPIO_PIN_5|GPIO_PIN_6);  
4031  0000 4b60          	push	#96
4032  0002 ae500f        	ldw	x,#20495
4033  0005 cd0000        	call	_GPIO_WriteHigh
4035  0008 84            	pop	a
4036                     ; 763 	 INIT_DIR();
4038  0009 4bf0          	push	#240
4039  000b 4b10          	push	#16
4040  000d ae5019        	ldw	x,#20505
4041  0010 cd0000        	call	_GPIO_Init
4043  0013 85            	popw	x
4044                     ; 764 	UART2_DeInit();
4046  0014 cd0000        	call	_UART2_DeInit
4048                     ; 765 	UART2_Init((u32)9600, UART2_WORDLENGTH_8D, UART2_STOPBITS_1, UART2_PARITY_NO, UART2_SYNCMODE_CLOCK_DISABLE, UART2_MODE_TXRX_ENABLE);
4050  0017 4b0c          	push	#12
4051  0019 4b80          	push	#128
4052  001b 4b00          	push	#0
4053  001d 4b00          	push	#0
4054  001f 4b00          	push	#0
4055  0021 ae2580        	ldw	x,#9600
4056  0024 89            	pushw	x
4057  0025 ae0000        	ldw	x,#0
4058  0028 89            	pushw	x
4059  0029 cd0000        	call	_UART2_Init
4061  002c 5b09          	addw	sp,#9
4062                     ; 766 	UART2_ITConfig(UART2_IT_RXNE_OR, ENABLE);
4064  002e 4b01          	push	#1
4065  0030 ae0205        	ldw	x,#517
4066  0033 cd0000        	call	_UART2_ITConfig
4068  0036 84            	pop	a
4069                     ; 767 	UART2_Cmd(ENABLE);
4071  0037 a601          	ld	a,#1
4072  0039 cd0000        	call	_UART2_Cmd
4074                     ; 769 	DIR_SET_RECV();
4076  003c 4b10          	push	#16
4077  003e ae5019        	ldw	x,#20505
4078  0041 cd0000        	call	_GPIO_WriteLow
4080  0044 84            	pop	a
4081                     ; 770 }
4084  0045 81            	ret
4114                     ; 773 @far @interrupt void UART2_TX_IRQHandler(void)
4114                     ; 774 {
4116                     .text:	section	.text,new
4117  0000               f_UART2_TX_IRQHandler:
4119  0000 3b0002        	push	c_x+2
4120  0003 be00          	ldw	x,c_x
4121  0005 89            	pushw	x
4122  0006 3b0002        	push	c_y+2
4123  0009 be00          	ldw	x,c_y
4124  000b 89            	pushw	x
4127                     ; 775 	if( UART2_GetFlagStatus(UART2_FLAG_TXE)!= RESET)
4129  000c ae0080        	ldw	x,#128
4130  000f cd0000        	call	_UART2_GetFlagStatus
4132  0012 4d            	tnz	a
4133  0013 272e          	jreq	L3611
4134                     ; 777 		if(sendPosi < sendCount)
4136  0015 ce0002        	ldw	x,_sendPosi
4137  0018 c30006        	cpw	x,_sendCount
4138  001b 2414          	jruge	L5611
4139                     ; 779 			UART2->DR =   sendBuf[sendPosi]; 		           
4141  001d ce0002        	ldw	x,_sendPosi
4142  0020 d60032        	ld	a,(_sendBuf,x)
4143  0023 c75241        	ld	21057,a
4144                     ; 780 			sendPosi++;				
4146  0026 ce0002        	ldw	x,_sendPosi
4147  0029 1c0001        	addw	x,#1
4148  002c cf0002        	ldw	_sendPosi,x
4150  002f 2012          	jra	L3611
4151  0031               L5611:
4152                     ; 784 			UART2_ITConfig(UART2_IT_TXE, DISABLE); 	 
4154  0031 4b00          	push	#0
4155  0033 ae0277        	ldw	x,#631
4156  0036 cd0000        	call	_UART2_ITConfig
4158  0039 84            	pop	a
4159                     ; 785 			UART2_ITConfig(UART2_IT_TC, ENABLE); 	  
4161  003a 4b01          	push	#1
4162  003c ae0266        	ldw	x,#614
4163  003f cd0000        	call	_UART2_ITConfig
4165  0042 84            	pop	a
4166  0043               L3611:
4167                     ; 788 	if(UART2_GetFlagStatus(UART2_FLAG_TC)!= RESET)
4169  0043 ae0040        	ldw	x,#64
4170  0046 cd0000        	call	_UART2_GetFlagStatus
4172  0049 4d            	tnz	a
4173  004a 2712          	jreq	L1711
4174                     ; 790 		UART2_ITConfig(UART2_IT_TC, DISABLE); 	   
4176  004c 4b00          	push	#0
4177  004e ae0266        	ldw	x,#614
4178  0051 cd0000        	call	_UART2_ITConfig
4180  0054 84            	pop	a
4181                     ; 791 		DIR_SET_RECV();
4183  0055 4b10          	push	#16
4184  0057 ae5019        	ldw	x,#20505
4185  005a cd0000        	call	_GPIO_WriteLow
4187  005d 84            	pop	a
4188  005e               L1711:
4189                     ; 793 }
4192  005e 85            	popw	x
4193  005f bf00          	ldw	c_y,x
4194  0061 320002        	pop	c_y+2
4195  0064 85            	popw	x
4196  0065 bf00          	ldw	c_x,x
4197  0067 320002        	pop	c_x+2
4198  006a 80            	iret
4227                     ; 795 @far @interrupt void UART2_RX_IRQHandler(void)
4227                     ; 796 {	
4228                     .text:	section	.text,new
4229  0000               f_UART2_RX_IRQHandler:
4231  0000 3b0002        	push	c_x+2
4232  0003 be00          	ldw	x,c_x
4233  0005 89            	pushw	x
4234  0006 3b0002        	push	c_y+2
4235  0009 be00          	ldw	x,c_y
4236  000b 89            	pushw	x
4239                     ; 797 	if(UART2_GetFlagStatus(UART2_FLAG_RXNE) != RESET)
4241  000c ae0020        	ldw	x,#32
4242  000f cd0000        	call	_UART2_GetFlagStatus
4244  0012 4d            	tnz	a
4245  0013 271c          	jreq	L3021
4246                     ; 799 		receTimeOut = 5;     //通讯超时值 
4248  0015 3505005b      	mov	_receTimeOut,#5
4249                     ; 800 		LockTime = 1000;
4251  0019 ae03e8        	ldw	x,#1000
4252  001c cf005c        	ldw	_LockTime,x
4253                     ; 802 		receBuf[receCount++]=  UART2->DR;
4255  001f ce0004        	ldw	x,_receCount
4256  0022 1c0001        	addw	x,#1
4257  0025 cf0004        	ldw	_receCount,x
4258  0028 1d0001        	subw	x,#1
4259  002b c65241        	ld	a,21057
4260  002e d7000a        	ld	(_receBuf,x),a
4261  0031               L3021:
4262                     ; 804 	nop();
4265  0031 9d            nop
4267                     ; 805 }
4271  0032 85            	popw	x
4272  0033 bf00          	ldw	c_y,x
4273  0035 320002        	pop	c_y+2
4274  0038 85            	popw	x
4275  0039 bf00          	ldw	c_x,x
4276  003b 320002        	pop	c_x+2
4277  003e 80            	iret
4418                     	xdef	f_UART2_RX_IRQHandler
4419                     	xdef	f_UART2_TX_IRQHandler
4420                     	xdef	_preRecID
4421                     	switch	.bss
4422  0001               _COMM_ERR_FLAG:
4423  0001 00            	ds.b	1
4424                     	xdef	_COMM_ERR_FLAG
4425                     	xref	_Warning_flag
4426                     	xref	_ConvertDown1
4427                     	xdef	_readInputRegisters
4428                     	xdef	_ReadInputStatus
4429                     	xdef	_crc16
4430                     	xdef	_auchCRCLo
4431                     	xdef	_auchCRCHi
4432                     	xdef	_mymemcpy
4433                     	xdef	_Send
4434                     	xdef	_setCoilVal
4435                     	xdef	_getInputStatusVal
4436                     	xdef	_getInputRegisterVal
4437                     	xdef	_getRegisterVal
4438                     	xdef	_presetMultipleRegisters
4439                     	xdef	_presetSingleRegister
4440                     	xdef	_forceSingleCoil
4441                     	xdef	_readRegisters
4442                     	xdef	_readCoil
4443                     	xdef	_checkComm0Modbus
4444                     	xdef	_beginSend
4445  0002               _sendPosi:
4446  0002 0000          	ds.b	2
4447                     	xdef	_sendPosi
4448  0004               _receCount:
4449  0004 0000          	ds.b	2
4450                     	xdef	_receCount
4451  0006               _sendCount:
4452  0006 0000          	ds.b	2
4453                     	xdef	_sendCount
4454  0008               _temp:
4455  0008 0000          	ds.b	2
4456                     	xdef	_temp
4457  000a               _receBuf:
4458  000a 000000000000  	ds.b	40
4459                     	xdef	_receBuf
4460  0032               _sendBuf:
4461  0032 000000000000  	ds.b	40
4462                     	xdef	_sendBuf
4463  005a               _TxTimeOut:
4464  005a 00            	ds.b	1
4465                     	xdef	_TxTimeOut
4466  005b               _receTimeOut:
4467  005b 00            	ds.b	1
4468                     	xdef	_receTimeOut
4469                     	xref	_UNLockAllMotor
4470                     	xref	_StopMotor
4471                     	xref	_IED
4472                     	xref	_SPIIO
4473                     	xref	_GPIO_WriteLow
4474                     	xref	_GPIO_WriteHigh
4475                     	xref	_GPIO_Init
4476                     	xref	_TaskParsaCmd
4477                     	xdef	_getCoilVal
4478                     	xdef	_TaskCommTimer
4479                     	xdef	_InitModbus
4480                     	xdef	_InitUART2
4481                     	xdef	_setRegisterVal
4482                     	xdef	_ReSendCnt
4483  005c               _LockTime:
4484  005c 0000          	ds.b	2
4485                     	xdef	_LockTime
4486                     	xref	_StartTimer
4487                     	xref	_UART2_GetFlagStatus
4488                     	xref	_UART2_ITConfig
4489                     	xref	_UART2_Cmd
4490                     	xref	_UART2_Init
4491                     	xref	_UART2_DeInit
4492                     	xref.b	c_x
4493                     	xref.b	c_y
4513                     	end
