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

📄 fs511.l

📁 18 bit ADC FS511 C与ASM源代码
💻 L
📖 第 1 页 / 共 3 页
字号:
  590         <02>       	setb	fs511,sk
  591  028B   46 E3 10           or      register,#1<<bitn
  592         <02>               endm
  593         <02>       	dly
  594  028E   FF         	nop
  595  028F   FF         	nop
  596  0290   FF         	nop
  597  0291   FF         	nop
  598         <02>       	endm	
  599         <02>       	clrb	fs511,sk
  600  0292   56 E3 EF           and     register,#0ffh-(1<<bitn)
  601         <02>               endm
  602         <02>       	dly
  603  0295   FF         	nop
  604  0296   FF         	nop
  605  0297   FF         	nop
  606  0298   FF         	nop
  607         <02>       	endm	
  608         <01>       	endm
  609         <01>       	setb	fs511,di
  610  0299   46 E3 20           or      register,#1<<bitn
  611         <01>               endm
  612         <01>       	dly
  613  029C   FF         	nop
  614  029D   FF         	nop
  615  029E   FF         	nop
  616  029F   FF         	nop
  617         <01>       	endm	
  618         <01>       	sk_pls
  619         <02>       	setb	fs511,sk
  620  02A0   46 E3 10           or      register,#1<<bitn
  621         <02>               endm
  622         <02>       	dly
  623  02A3   FF         	nop
  624  02A4   FF         	nop
  625  02A5   FF         	nop
  626  02A6   FF         	nop
  627         <02>       	endm	
  628         <02>       	clrb	fs511,sk
  629  02A7   56 E3 EF           and     register,#0ffh-(1<<bitn)
  630         <02>               endm
  631         <02>       	dly
  632  02AA   FF         	nop
  633  02AB   FF         	nop
  634  02AC   FF         	nop
  635  02AD   FF         	nop
  636         <02>       	endm	
  637         <01>       	endm
  638  02AE   F6 01 A5   	call	get_a_byte
  639  02B1   19 48      	ld	ad_data,r1
  640  02B3   F6 01 A5   	call	get_a_byte
  641  02B6   19 49      	ld	ad_data+1,r1
  642  02B8   F6 01 A5   	call	get_a_byte
  643  02BB   19 4A      	ld	ad_data+2,r1
  644                    	
  645         <01>       	setb	fs511,cs
  646  02BD   46 E3 08           or      register,#1<<bitn
  647         <01>               endm
  648         <01>               clrb	fs511,di
  649  02C0   56 E3 DF           and     register,#0ffh-(1<<bitn)
  650         <01>               endm
  651         <01>               dly
  652  02C3   FF         	nop
  653  02C4   FF         	nop
  654  02C5   FF         	nop
  655  02C6   FF         	nop
  656         <01>       	endm	
  657  02C7   AF         	ret
  658                    ;---------------------------------------;
  659  02C8              get_ad_average_data:
  660  02C8   F6 02 4E   	call	get_ad_convert_data
  661  02CB   CF         	rcf
  662  02CC   10 4A      	rlc	ad_data+2
  663  02CE   10 49      	rlc	ad_data+1
  664  02D0   10 48      	rlc	ad_data
  665  02D2   CF         	rcf
  666  02D3   10 4A      	rlc	ad_data+2
  667  02D5   10 49      	rlc	ad_data+1
  668  02D7   10 48      	rlc	ad_data
  669  02D9   FB 0A      	jr	nc,normal_proess
  670  02DB   60 48      	com	ad_data			;negative number
  671  02DD   60 49      	com	ad_data+1
  672  02DF   06 49 01   	add	ad_data+1,#1
  673  02E2   16 48 00   	adc	ad_data,#0
  674  02E5              normal_proess:
  675  02E5   E4 3C 3E   	ld	buf7_h,buf6_h
  676  02E8   E4 3D 3F   	ld	buf7_l,buf6_l
  677  02EB   E4 3A 3C   	ld	buf6_h,buf5_h
  678  02EE   E4 3B 3D   	ld	buf6_l,buf5_l
  679  02F1   E4 38 3A   	ld	buf5_h,buf4_h
  680  02F4   E4 39 3B   	ld	buf5_l,buf4_l
  681  02F7   E4 36 38   	ld	buf4_h,buf3_h
  682  02FA   E4 37 39   	ld	buf4_l,buf3_l
  683  02FD   E4 34 36   	ld	buf3_h,buf2_h
  684  0300   E4 35 37   	ld	buf3_l,buf2_l
  685  0303   E4 32 34   	ld	buf2_h,buf1_h
  686  0306   E4 33 35   	ld	buf2_l,buf1_l
  687  0309   E4 30 32   	ld	buf1_h,buf0_h
  688  030C   E4 31 33   	ld	buf1_l,buf0_l
  689  030F   E4 48 30   	ld	buf0_h,ad_data
  690  0312   E4 49 31   	ld	buf0_l,ad_data+1
  691                    	
  692  0315   B0 C7      	clr	r7
  693  0317   B0 40      	clr	data_h
  694  0319   B0 41      	clr	data_l
  695  031B   CF         	rcf
  696  031C   04 3F 41   	add	data_l,buf7_l
  697  031F   14 3E 40   	adc	data_h,buf7_h
  698  0322   16 C7 00   	adc	r7,#0
  699  0325   04 3D 41   	add	data_l,buf6_l
  700  0328   14 3C 40   	adc	data_h,buf6_h
  701  032B   16 C7 00   	adc	r7,#0
  702  032E   04 3B 41   	add	data_l,buf5_l
  703  0331   14 3A 40   	adc	data_h,buf5_h
  704  0334   16 C7 00   	adc	r7,#0
  705  0337   04 39 41   	add	data_l,buf4_l
  706  033A   14 38 40   	adc	data_h,buf4_h
  707  033D   16 C7 00   	adc	r7,#0
  708  0340   04 37 41   	add	data_l,buf3_l
  709  0343   14 36 40   	adc	data_h,buf3_h
  710  0346   16 C7 00   	adc	r7,#0
  711  0349   04 35 41   	add	data_l,buf2_l
  712  034C   14 34 40   	adc	data_h,buf2_h
  713  034F   16 C7 00   	adc	r7,#0
  714  0352   04 33 41   	add	data_l,buf1_l
  715  0355   14 32 40   	adc	data_h,buf1_h
  716  0358   16 C7 00   	adc	r7,#0
  717  035B   04 31 41   	add	data_l,buf0_l
  718  035E   14 30 40   	adc	data_h,buf0_h
  719  0361   16 C7 00   	adc	r7,#0
  720  0364   70 C8      	push	r8
  721  0366   8C 03      	ld	r8,#3
  722  0368              div4:
  723  0368   CF         	rcf
  724  0369   C0 C7      	rrc	r7
  725  036B   C0 40      	rrc	data_h
  726  036D   C0 41      	rrc	data_l
  727  036F   00 C8      	dec     r8
  728  0371   EB F5              jr      nz,div4
  729  0373   50 C8              pop	r8
  730  0375   AF                 ret
  731                    ;---------------------------------------;
  732  0376              repeat_get_ad_data:
  733  0376   E4 42 44   	ld	data2_h,data1_h
  734  0379   E4 43 45   	ld	data2_l,data1_l
  735  037C   E4 40 42   	ld	data1_h,data_h
  736  037F   E4 41 43   	ld	data1_l,data_l
  737  0382              get_ad_stable_data:
  738  0382   F6 02 C8   	call	get_ad_average_data
  739  0385   A4 42 40   	cp	data_h,data1_h
  740  0388   EB EC      	jr	nz,repeat_get_ad_data
  741  038A   A4 43 41   	cp	data_l,data1_l
  742  038D   EB E7      	jr	nz,repeat_get_ad_data
  743  038F   A4 44 40   	cp	data_h,data2_h
  744  0392   EB E2      	jr	nz,repeat_get_ad_data
  745  0394   A4 45 41   	cp	data_l,data2_l
  746  0397   EB DD      	jr	nz,repeat_get_ad_data
  747  0399   AF                 ret
  748                    ;---------------------------------------;
  749  039A              clear_data_buf:
  750  039A   B0 40      	clr	data_h
  751  039C   B0 41      	clr	data_l
  752  039E   B0 42      	clr	data1_h
  753  03A0   B0 43      	clr	data1_l
  754  03A2   B0 44      	clr	data2_h
  755  03A4   B0 45      	clr	data2_l
  756  03A6   AF         	ret
  757  03A7              get_scale_zero:
  758  03A7   F6 03 9A   	call	clear_data_buf
  759  03AA   F6 03 82   	call	get_ad_stable_data
  760  03AD   E4 40 46   	ld	zero_h,data_h
  761  03B0   E4 41 47   	ld	zero_l,data_l
  762  03B3   AF         	ret
  763                    
  764                    ;---------------------------------------;
  765                    ;Gain=Cal_Weight/(Weight_AD-Zero)
  766                    ;---------------------------------------;
  767  03B4              calcul_gain:
  768  03B4   F6 03 9A   	call	clear_data_buf
  769  03B7   F6 03 82   	call	get_ad_stable_data
  770  03BA   E4 40 50   	ld	bufa_h,data_h
  771  03BD   E4 41 51   	ld	bufa_l,data_l
  772  03C0   E4 46 52   	ld	bufb_h,zero_h
  773  03C3   E4 47 53   	ld	bufb_l,zero_l
  774  03C6   F6 04 57   	call	int_sub			;Weight_AD-Zero
  775  03C9   E4 50 52   	ld	bufb_h,bufa_h
  776  03CC   E4 51 53   	ld	bufb_l,bufa_l
  777  03CF   E6 50 13   	ld	bufa_h,#13h		;eg:Cal_Weight=5000g
  778  03D2   E6 51 88   	ld	bufa_l,#88h		;define at eeprom
  779  03D5   8C 04      	ld	r8,#4
  780  03D7   F6 04 D1   	call	int_div			;Cal_Weight/(Weight_AD-Zero)
  781  03DA   E4 54 58   	ld	gain_h,bufc_h
  782  03DD   E4 55 59   	ld	gain_l,bufc_l
  783  03E0   AF         	ret
  784                    ;---------------------------------------;
  785                    ;Count=(Weight_AD-Zero)*Gain*10
  786                    ;Weight=(Weight_AD-Zero)*Gain
  787                    ;1 g=10 data
  788                    ;---------------------------------------;
  789  03E1              calcul_count:
  790  03E1   E4 58 50   	ld	bufa_h,gain_h
  791  03E4   E4 59 51   	ld	bufa_l,gain_l
  792  03E7   1C 0A      	ld	r1,#10
  793  03E9   F6 04 87   	call	int_mul16x8		;gain*10
  794  03EC   8C 08      	ld	r8,#8
  795  03EE              calcul_count_loop1:
  796  03EE   CF         	rcf
  797  03EF   10 C1      	rlc	r1
  798  03F1   10 51      	rlc	bufa_l
  799  03F3   10 50      	rlc	bufa_h
  800  03F5   00 C8      	dec	r8
  801  03F7   EB F5      	jr	nz,calcul_count_loop1	
  802  03F9   E4 50 56   	ld	temp_h,bufa_h
  803  03FC   E4 51 57   	ld	temp_l,bufa_l
  804  03FF   E4 40 50   	ld	bufa_h,data_h
  805  0402   E4 41 51   	ld	bufa_l,data_l
  806  0405   E4 46 52   	ld	bufb_h,zero_h
  807  0408   E4 47 53   	ld	bufb_l,zero_l
  808  040B   F6 04 76   	call	int_cmp_a_b
  809         <01>       	tmb	r0,7
  810  040E   76 C0 80           tm      register,#1<<bitn
  811         <01>               endm
  812  0411   6B 0C      	jr	z,calcul_count_l1
  813  0413   E4 40 52   	ld	bufb_h,data_h
  814  0416   E4 41 53   	ld	bufb_l,data_l
  815  0419   E4 46 50   	ld	bufa_h,zero_h
  816  041C   E4 47 51   	ld	bufa_l,zero_l
  817  041F              calcul_count_l1:	
  818  041F   F6 04 57   	call	int_sub			;Weight_AD-Zero
  819                    	;ld	bufb_h,gain_h
  820                    	;ld	bufb_l,gain_l
  821  0422   E4 56 52   	ld	bufb_h,temp_h
  822  0425   E4 57 53   	ld	bufb_l,temp_l
  823  0428   F6 04 AB   	call	int_mul16x16		;(Weight_AD-Zero)*Gain*10
  824  042B   8C 04      	ld	r8,#4
  825  042D              calcul_count_loop2:
  826  042D   CF         	rcf				;result=result*16
  827  042E   10 53      	rlc	bufb_l
  828  0430   10 52      	rlc	bufb_h
  829  0432   10 51      	rlc	bufa_l
  830  0434   10 50      	rlc	bufa_h
  831  0436   00 C8      	dec	r8
  832  0438   EB F3      	jr	nz,calcul_count_loop2	
  833  043A   A6 52 80   	cp	bufb_h,#80h
  834  043D   7B 06      	jr	c,count_no_round
  835  043F   06 51 01   	add	bufa_l,#1
  836  0442   16 50 00   	adc	bufa_h,#0
  837  0445              count_no_round:
  838  0445   E4 50 5A   	ld	count_h,bufa_h
  839  0448   E4 51 5B   	ld	count_l,bufa_l
  840  044B   A8 50      	ld	r10,bufa_h
  841  044D   B8 51      	ld	r11,bufa_l
  842  044F   AF         	ret			
  843                    ;---------------------------------------;
  844                    ;bufa(int)+bufb(int)=bufa(int)
  845                    ;---------------------------------------;
  846  0450              int_add:
  847  0450   04 53 51   	add     bufa_l,bufb_l
  848  0453   14 52 50           adc     bufa_h,bufb_h
  849  0456   AF                 ret     
  850                    ;---------------------------------------;
  851                    ;bufa(int)-bufb(int)=bufa(int)
  852                    ;---------------------------------------;
  853  0457              int_sub:
  854  0457   24 53 51   	sub	bufa_l,bufb_l
  855  045A   34 52 50   	sbc	bufa_h,bufb_h
  856  045D   AF         	ret
  857                    ;---------------------------------------;
  858                    ;add for mul,result at bufa
  859                    ;---------------------------------------;
  860  045E              int_add_for_mul:
  861  045E   04 55 51           add     bufa_l,bufc_l
  862  0461   14 54 50           adc     bufa_h,bufc_h
  863  0464   AF                 ret
  864                    ;---------------------------------------;
  865                    ;bufb(int)-bufa(int) => r0(result)
  866                    ;---------------------------------------;
  867  0465              int_cmp_b_a:
  868  0465   70 52      	push	bufb_h
  869  0467   70 53      	push	bufb_l
  870  0469   24 51 53           sub     bufb_l,bufa_l
  871  046C   34 50 52           sbc     bufb_h,bufa_h
  872  046F   08 52              ld	r0,bufb_h
  873  0471   50 53              pop	bufb_l
  874  0473   50 52              pop	bufb_h
  875  0475   AF                 ret
  876                    ;---------------------------------------;
  877                    ;bufa(int)-bufb(int) => r0(result)
  878                    ;---------------------------------------;
  879  0476              int_cmp_a_b:
  880  0476   70 50      	push	bufa_h
  881  0478   70 51      	push	bufa_l
  882  047A   24 53 51           sub     bufa_l,bufb_l
  883  047D   34 52 50           sbc     bufa_h,bufb_h
  884  0480   08 50              ld	r0,bufa_h
  885  0482   50 51              pop	bufa_l
  886  0484   50 50              pop	bufa_h
  887  0486   AF                 ret
  888                    ;---------------------------------------;
  889                    ;

⌨️ 快捷键说明

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