モニタ・数値演算等 コーディングサンプル
5分後自動的に閉じます (閉じない場合はブラウザの ボタンで閉じて下さい) [閉じる] 
(検索エンジンから直接こられた方はこちら  Home  Old piC) 
(1)16bit加減算[16bit]±[16bit]=[16bit]
(2)16bit乗算[16bit]*[16bit]=[32bit]
(3)Bin-BCD変換[16bit] ---> [ 5][43][21]
(4)BCD-CHR変換[ 5][43][21] ---> [C5][C4][C3][C2][C1]
(5)BCD-Bin変換[ 5][43][21] ---> [16bit]
(6)A/D電圧換算[A/D平均値] ---> [ ][5][.][0][0]
頁最後尾 


共通の宣言部
;===============================================================
; Declare Register 
;===============================================================
WADCH_	EQU	0x30	;A/D convertion channel No.
WADR0H	EQU	0x31	;ch0H
WADR0L	EQU	0x32	;  0L
WADR1H	EQU	0x33	;  1H
WADR1L	EQU	0x34	;  1L
WADAVC	EQU	0x35	;averege count
WADS0H	EQU	0x36	;ch0H
WADS0L	EQU	0x37	;ch0H
WADS1H	EQU	0x38	;ch1H
WADS1L	EQU	0x39	;ch1L
W_TH_H	EQU	0x3A	;Threshold compare level Hi
W_TH_L	EQU	0x3B	;Threshold compare level Lo
;
W_BINL	EQU	0x58	;work for B2-BCD, BCD-2B conv.
W_BINH	EQU	0x59	;
W_DS21	EQU	0x5A	;Data digit 2&1
W_DS43	EQU	0x5B	;D          4&3
W_DSX5	EQU	0x5C	;D          x&5
W_BITC	EQU	0x5D	;work for 2B-4BCD
W_BFDT	EQU	0x5E	;work for 2B-4BCD
;
W_TMPL	EQU	0x60	;work for BCD-2B
W_TMPH	EQU	0x61	;
;
W_CHR1	EQU	0x6B	;Hexadecimal to Char conv.(BCDCHR)
W_CHR2	EQU	0x6C	;
W_CHR3	EQU	0x6D	;
W_CHR4	EQU	0x6E	;
W_CHR5	EQU	0x6F	;
;
BIT_CT	EQU	0x77	;Bit Counter
AL	EQU	0x78	;AL software accumulater
AH	EQU	0x79	;AH
BL	EQU	0x7A	;BL
BH	EQU	0x7B	;BH
CL	EQU	0x7C	;CL
CH	EQU	0x7D	;CH
DL	EQU	0x7E	;DL
DH	EQU	0x7F	;DH
;---------------------------------------------------------------

頁先頭 (1)加減算 (2)乗算 (3)B2BCD (4)BCD2C (5)BCD2B (6)AD25C 最後尾


(1)16bit加減算
;===============================================================
;       D_ADD:Double Pecision Addition
;---------------------------------------------------------------
;	CALL	D_ADD		;CHCL+AHAL-->CHCL
;*	CALL	D_ADD		;DHDLCHCL+AHAL-->DHDLCHCL
;===============================================================
D_ADD	MOVF	AL,W
	ADDWF	CL,F
	BTFSC	STATUS,C
	INCF	CH,F
	MOVF	AH,W		;Z check
	ADDWF	CH,F
;*	BTFSC	STATUS,C
;*	INCF	DL,F
;*	MOVF	DL,W
;*	BTFSC	STATUS,Z
;*	INCF	DH,F
	RETURN
;
;===============================================================
;       D_SUB:Double Pecision Subtraction
;---------------------------------------------------------------
;	CALL	D_SUB		;BHBL-AHAL-->BHBL
;===============================================================
D_SUB	MOVF	AL,W
	SUBWF	BL,F
	BTFSS	STATUS,C
	DECF	BH,F
	MOVF	AH,W
	SUBWF	BH,F
	RETURN
;---------------------------------------------------------------

頁先頭 (1)加減算 (2)乗算 (3)B2BCD (4)BCD2C (5)BCD2B (6)AD25C 最後尾


(2)16bit乗算
オリジナルはマイクロチップのサンプルです(多少モディファイしました)
;===============================================================
;       D_MLT:Double Pecision Multiply
;---------------------------------------------------------------
;	CALL	D_MLT		;BHBL*AHAL-->DHDLCHCL  (BH,BL:壊れる)
;===============================================================
D_MLT	CLRF	CL
	CLRF	CH
	CLRF	DL
	CLRF	DH
	MOVLW	16		;Data count
	MOVWF	BIT_CT		;      BH BL:壊れる
;				;      AH AL:変化無
	BCF	STATUS,C	;DH DL CH CL
;
DMLTL1	RRF	BH,F
	RRF	BL,F
	BTFSS	STATUS,C
	GOTO	DMLTL2
;
	MOVF	AL,W
	ADDWF	DL,F
	BTFSC	STATUS,C
	INCF	DH,F
	MOVF	AH,W
	ADDWF	DH,F
;
DMLTL2	RRF	DH,F
	RRF	DL,F
	RRF	CH,F
	RRF	CL,F
	DECFSZ	BIT_CT,F
	GOTO	DMLTL1
	RETURN
;---------------------------------------------------------------

頁先頭 (1)加減算 (2)乗算 (3)B2BCD (4)BCD2C (5)BCD2B (6)AD25C 最後尾


(3)Bin-BCD変換
;===============================================================
;	B2_BCD:Binary to Decimal conversion
;===============================================================
;  W_BINH:W_BINL --> W_DSX5:W_DS43:W_DS21, counter:W_BITC, temp:W_BFDT
;---------------------------------------------------------------
B2_BCD	BCF	STATUS,C
	MOVLW	.16
	MOVWF	W_BITC
	CLRF	W_DSX5
	CLRF	W_DS43
	CLRF	W_DS21
B2_BC1	RLF	W_BINL,F
	RLF	W_BINH,F
	RLF	W_DS21,F
	RLF	W_DS43,F
	RLF	W_DSX5,F
	DECFSZ	W_BITC,F
	GOTO	ADJDEC
;
	RETURN			;Return B2_BCD
;
ADJDEC	MOVLW	W_DS21
	MOVWF	FSR
	CALL	ADJBCD
	MOVLW	W_DS43
	MOVWF	FSR
	CALL	ADJBCD
	MOVLW	W_DSX5
	MOVWF	FSR
	CALL	ADJBCD
	GOTO	B2_BC1
;---------------------------------------------------------------
;	ADJBCD:Adjust BCD
;---------------------------------------------------------------
ADJBCD	MOVLW	3		;Adjust BCD
	ADDWF	INDF,W
	MOVWF	W_BFDT		;Save temp work
	BTFSC	W_BFDT,3	;test if result > 7
	MOVWF	INDF
	MOVLW	0x30
	ADDWF	INDF,W
	MOVWF	W_BFDT		;Save temp work
	BTFSC	W_BFDT,7	;test if result > 7
	MOVWF	INDF
	RETURN
;---------------------------------------------------------------



(4)BCD-CHR変換
;===============================================================
;	BCDCHR:Hexadecimal to Character conversion
;---------------------------------------------------------------
;  W_DSX5:W_DS43:W_DS21 --> W_CHR5:W_CHR4:W_CHR3:W_CHR2:W_CHR1
;===============================================================
BCCH5V	MOVLW	' '
	MOVWF	W_CHR5
;
	MOVF	W_DSX5,W
	CALL	BCCONV
	MOVWF	W_CHR4
;
	MOVLW	'.'
	MOVWF	W_CHR3
	SWAPF	W_DS43,W
	CALL	BCCONV
	MOVWF	W_CHR2
	MOVF	W_DS43,W
	CALL	BCCONV
	MOVWF	W_CHR1
	RETURN
;
BCDCHR	MOVF	W_DS21,W
	CALL	BCCONV
	MOVWF	W_CHR1
	SWAPF	W_DS21,W
	CALL	BCCONV
	MOVWF	W_CHR2
;
	MOVF	W_DS43,W
	CALL	BCCONV
	MOVWF	W_CHR3
	SWAPF	W_DS43,W
	CALL	BCCONV
	MOVWF	W_CHR4
;
	MOVF	W_DSX5,W
	CALL	BCCONV
	MOVWF	W_CHR5
	RETURN
;
BC_LCD	CALL	BCCONV
	GOTO	LCD_DT
;
BCCONV	ANDLW	0x0F
	IORLW	0x30
	RETURN
;				;Zero suppress
Z_SUPR	MOVF	W_CHR5,W
	SUBLW	0x30
	BTFSS	STATUS,Z
	RETURN
	MOVLW	0x20
	MOVWF	W_CHR5
	MOVF	W_CHR4,W
	SUBLW	0x30
	BTFSS	STATUS,Z
	RETURN
	MOVLW	0x20
	MOVWF	W_CHR4
	MOVF	W_CHR3,W
	SUBLW	0x30
	BTFSS	STATUS,Z
	RETURN
	MOVLW	0x20
	MOVWF	W_CHR3
	MOVF	W_CHR2,W
	SUBLW	0x30
	BTFSS	STATUS,Z
	RETURN
	MOVLW	0x20
	MOVWF	W_CHR2
	RETURN
;
XFRLCD	MOVF	W_CHR5,W
	CALL	LCD_DT
	MOVF	W_CHR4,W
	CALL	LCD_DT
	MOVF	W_CHR3,W
	CALL	LCD_DT
	MOVF	W_CHR2,W
	CALL	LCD_DT
	MOVF	W_CHR1,W
	CALL	LCD_DT
	RETURN
;---------------------------------------------------------------



(5)BCD-Bin変換
;===============================================================
;	BCD_B2:Hexadecimal to Binary conversion
;---------------------------------------------------------------
;  W_DSX5:W_DS43:W_DS21 --> W_BINH:W_BINL,  temp:W_TMPH,W_TMPL
;===============================================================
BCD_B2	CLRF	W_BINH
	MOVF	W_DSX5,W
	ANDLW	0x0F
	MOVWF	W_BINL
	CALL	MPY10A		;10a+b
;
	SWAPF	W_DS43,W
	CALL	MPY10B		;10(10a)+b)
;
	MOVF	W_DS43,W
	CALL	MPY10B		;10(10(10a)+b)+c)
;
	SWAPF	W_DS21,W
	CALL	MPY10B		;10(10(10(10a)+b)+c)+d)
;
	MOVF	W_DS21,W
	ANDLW	0x0F
	ADDWF	W_BINL,F
	BTFSC	STATUS,C
	INCF	W_BINH,F	;10(10(10(10a)+b)+c)+d)+e
	RETURN
;
;---------------------------------------------------------------
;	MULTIPLY BY 10
;---------------------------------------------------------------
MPY10B	ANDLW	0x0F
	ADDWF	W_BINL,F
	BTFSC	STATUS,C
	INCF	W_BINH,F
;
MPY10A	BCF	STATUS,C	; *2
	RLF	W_BINL,W
	MOVWF	W_TMPL
	RLF	W_BINH,W
	MOVWF	W_TMPH
;
	BCF	STATUS,C	; *2
	RLF	W_BINL,F
	RLF	W_BINH,F
	BCF	STATUS,C	; *4
	RLF	W_BINL,F
	RLF	W_BINH,F
	BCF	STATUS,C	; *8
	RLF	W_BINL,F
	RLF	W_BINH,F
;
	MOVF	W_TMPL,W	;N*10 = N*8 + N*2
	ADDWF	W_BINL,F
	BTFSC	STATUS,C
	INCF	W_BINH,F
	MOVF	W_TMPH,W
	ADDWF	W_BINH,F
	RETURN
;---------------------------------------------------------------


(6)A/D変換値から電圧への換算
;---------------------------------------------------------------
;A/D値: WADS1H:WADS1L		;(BH:000000xx, BL:xxxxxxxx)
;	*12513			;(AH:00110000, AL:11100001)
;	CALL	D_MLT		;BHBL*AHAL-->DHDLCHCL  (BH,BL:壊れる)
;	/256			;DH[DLCH]CL
;	1023 * 12513 / 256 = 50003
;表示:	[ ][5][.][0][0]
;---------------------------------------------------------------

;---------------------------------------------------------------
	MOVF	WADS1H,W
	MOVWF	W_BINH
	MOVF	WADS1L,W
	MOVWF	W_BINL
	CALL	B2_BCD		;W_BINH:.L --> W_DSX5:.43:.21
	CALL	BCDCHR		;W_DSX5:.43:.21 --> W_CHR5:.1
	CALL	Z_SUPR
	CALL	XFRLCD		;A/D値表示
	CALL	LCD_SP
;
	MOVF	WADS1H,W
	MOVWF	BH
	MOVF	WADS1L,W
	MOVWF	BL
	CALL	D_MLT
;
	MOVF	DL,W		; / 256   DH [DLCH] CL
	MOVWF	W_BINH
	MOVF	CH,W
	MOVWF	W_BINL
	CALL	B2_BCD		;W_BINH:.L --> W_DSX5:.43:.21
;***	CALL	BCDCHR		;W_DSX5:.43:.21 --> W_CHR5:.1
;***		A/D値[00000011][11111111]  →  [5][0][0][0][3]
;
	CALL	BCCH5V		;小数点セット [ ][5][.][0][0]
;***	CALL	Z_SUPR		;前ゼロ消去
;***	CALL	XFRLCD		;電圧値表示(LCD)
;
;===============================================================
;	BCDCHR:Hexadecimal to Character conversion
;---------------------------------------------------------------
;  W_DSX5:W_DS43:W_DS21 --> W_CHR5:W_CHR4:W_CHR3:W_CHR2:W_CHR1
;				;小数点セット [ ][5][.][0][0]
;===============================================================
BCCH5V	MOVLW	' '
	MOVWF	W_CHR5
;
	MOVF	W_DSX5,W
	CALL	BCCONV
	MOVWF	W_CHR4
;
	MOVLW	'.'
	MOVWF	W_CHR3
	SWAPF	W_DS43,W
	CALL	BCCONV
	MOVWF	W_CHR2
	MOVF	W_DS43,W
	CALL	BCCONV
	MOVWF	W_CHR1
	RETURN
;---------------------------------------------------------------



検索エンジンから直接こられた方はこちら  Home  Old piC)   PageTop  閉じる