C
ceibawx
Guest
어셈블리 코드에서 pic16f628a에서 빼기
내가 pic16f628a의 어셈블리 코드를 빼십시오 3 번 필요합니다.난 너무 깁니다 바보 같은 코드를 썼습니다.그리고 여부를 그렇게 할 수있어 루프를 사용할 수 있을까요?입니다.
1) 데이터는 0x40에 저장됩니다 ~ 0x51.The 데이터 8channels에서 모든 채널 12bits입니다.그래서 두 개의 채널을 메모리에 3 개의 바이트로 꼽힙니다.예를 들어 채널 1 및 2 0x40, 0x41, 0x42 채널 점유.
2) - 채널 8 2 채널;
채널 4 - 채널 6;
채널 3 - 채널 7;
왜냐면 난 channel2하다고 생각이 그룹을 선택 channel8 동일한 구조를하고있다.그것보다 더 channel2 빼기하려면 channel3 쉽습니다.
3) 이전에 빼기, ANDLW 등록 바이트에서 4 비트를 사용합니다.
4) 먼저, 그다음 상태는 C 낮은 비트의 가치 판단에 따라 높은 비트 빼기 낮은 비트를 뺍니다.
5) 낮은 비트 첫째로 메모리 레지스터에 다음, 높은 비트 후자는 메모리 위치에 저장됩니다 저장되어있습니다.반면 낮은 비트 0x61에 저장되어있는 예를 들어, 하나, 높은 비트 0x60에 저장된 결과를 빼십시오.
그래서 모든 뺄셈 결과에 저장되어있습니다 0x60 0x61 0x62 0x63 0x64 0x65.아무도 날 도와 드릴까요?코드 :
코드 :
목록으로 P는 = 16f628a
# 포함 <p16f628a.inc>ByteCounter EQU 0x39고토 대문주 :
BCF 원사 상태, RP0; 은행 0
BCF 원사 상태, RP1
MOVLW 0x07
MOVWF CMCONBSF 상태, RP0; 은행 1
BCF 원사 TRISB, 2; 출력
; 설정이 킷에는 UART
MOVLW 0x15
MOVWF SPBRGBCF 원사 TXSTA, TX9
BSF TXSTA, TXEN
BCF 원사 TXSTA, 동기화
BSF TXSTA, BRGHBCF 원사 상태, RP0; 은행 0
BSF RCSTA, SPEN
BCF 원사 RCSTA, RX9
BSF RCSTA, CREN할인 금액 :
; f를 "승
MOVLW 0x31
MOVWF 0x40
MOVLW 0x32
MOVWF 0x41, 0x50은 diff에 대한
MOVLW 0x33
MOVWF 0x42MOVLW 0x34
MOVWF 0x43, 0x51은 diff에 대한
MOVLW 0x48
MOVWF 0x44
MOVLW 0x47
MOVWF 0x45, 0x52은 diff에 대한MOVLW 0x46
MOVWF 0x46
MOVLW 0x45
MOVWF 0x47, 0x53은 diff에 대한
MOVLW 0x44
MOVWF 0x48MOVLW 0x43
MOVWF 0x49
MOVLW 0x42
MOVWF 0x50
MOVLW 0x41
MOVWF 0x51
;******* 뺄셈 *************
BCF 원사 상태, RP0; bank0
;********** 첫 번째 빼기 *************
Ch2_8 :
5 0x41 0x50의 8bits ****** 얻을 ;****
MOVLW 0x0F
ANDWF 0x41, 0
MOVWF 0x6A; 0x41 '주소
MOVLW 0x0F
ANDWF 0x50, 0
MOVWF 0x6B, 0x50 '주소
;*******( 0x42) - (0x51) 0x61로 저장 ******
BCF 원사 상태는 C
MOVF 0x51, 0
SUBWF 0x42, 0
MOVWF 0x61;
;******* C 값에 따라 빼기 *****
BTFSS 상태는 C
고토 Ch28_value0;는 C = 0
BCF 원사 상태는 C;는 C = 1
; (0x6A) - (0x6B) 0x60로
MOVF 0x6B, 0
SUBWF 0x6A, 0
MOVWF 0x60;
고토 Ch4_6Ch28_value0 :;는 C = 0, (0x6A) -1 - (0x6B)에 0x60
BCF 원사 상태는 C
MOVF 0x6B, 0
SUBWF 0x6A, 0
MOVWF 0x60;
; -1 체크 잘라 버려!??
MOVLW 0x01;
SUBWF 0x60, 1
고토 Ch4_6
두 번째 ;********* *****************************
Ch4_6 :
MOVLW 0x0F
ANDWF 0x44, 0
MOVWF 0x6c, 0x44 '주소
MOVLW 0x0F
ANDWF 0x47, 0
MOVWF 0x6D, 0x47 '주소
; (0x45) - (0x48) 0x63로
BCF 원사 상태는 C
MOVF 0x48, 0
SUBWF 0x45, 0
MOVWF 0x63;BTFSS 상태는 C
고토 Ch46_value0;는 C = 0
BCF 원사 상태는 C;는 C = 1
; (0x6c) - (0x6D) 0x62로
MOVF 0x6D, 0
SUBWF 0x6c, 0
MOVWF 0x62;
고토 Ch3_7Ch46_value0 :;는 C = 0, (0x6c) -1 - (0x6D)에 0x63
BCF 원사 상태는 C
MOVF 0x6D, 0
SUBWF 0x6c, 0
MOVWF 0x62;
; -1 체크 잘라 버려!?? C ??,??????
MOVLW 0x01;
SUBWF 0x62, 1
고토 Ch3_7
3 ;************* *******************************
Ch3_7 :
movlw 0xF0;
andwf 0x44, 0
movwf 0x6e; 6e 44 '에서
movlw 0xF0;
andwf 0x50, 0
movwf 0x6F; 50 생물 층
************ 빼기 ;*****
BCF 원사 상태는 C; (6e) - (6 층)에 (65)
MOVF 0x6F, 0
SUBWF 0x6e, 0
MOVWF 0x65;btfss 상태는 C
고토 Ch37_value0;는 C = 0
;는 C = 1 (43) - (49)에 (64)
BCF 원사 상태는 C
movf 0x49, 0
subwf 0x43, 0
movwf 0x64;
고토 그만Ch37_value0 :;는 C = 0 (43) -1 - (49)에 (64)
BCF 원사 상태는 C
movf 0x49, 0
subwf 0x43, 0
movwf 0x64;
; -1
movlw 0x01;
subwf 0x64, 1; 60 61 62 63 64 65
고토 그만
중지 :
고토 그만끝
내가 pic16f628a의 어셈블리 코드를 빼십시오 3 번 필요합니다.난 너무 깁니다 바보 같은 코드를 썼습니다.그리고 여부를 그렇게 할 수있어 루프를 사용할 수 있을까요?입니다.
1) 데이터는 0x40에 저장됩니다 ~ 0x51.The 데이터 8channels에서 모든 채널 12bits입니다.그래서 두 개의 채널을 메모리에 3 개의 바이트로 꼽힙니다.예를 들어 채널 1 및 2 0x40, 0x41, 0x42 채널 점유.
2) - 채널 8 2 채널;
채널 4 - 채널 6;
채널 3 - 채널 7;
왜냐면 난 channel2하다고 생각이 그룹을 선택 channel8 동일한 구조를하고있다.그것보다 더 channel2 빼기하려면 channel3 쉽습니다.
3) 이전에 빼기, ANDLW 등록 바이트에서 4 비트를 사용합니다.
4) 먼저, 그다음 상태는 C 낮은 비트의 가치 판단에 따라 높은 비트 빼기 낮은 비트를 뺍니다.
5) 낮은 비트 첫째로 메모리 레지스터에 다음, 높은 비트 후자는 메모리 위치에 저장됩니다 저장되어있습니다.반면 낮은 비트 0x61에 저장되어있는 예를 들어, 하나, 높은 비트 0x60에 저장된 결과를 빼십시오.
그래서 모든 뺄셈 결과에 저장되어있습니다 0x60 0x61 0x62 0x63 0x64 0x65.아무도 날 도와 드릴까요?코드 :
코드 :
목록으로 P는 = 16f628a
# 포함 <p16f628a.inc>ByteCounter EQU 0x39고토 대문주 :
BCF 원사 상태, RP0; 은행 0
BCF 원사 상태, RP1
MOVLW 0x07
MOVWF CMCONBSF 상태, RP0; 은행 1
BCF 원사 TRISB, 2; 출력
; 설정이 킷에는 UART
MOVLW 0x15
MOVWF SPBRGBCF 원사 TXSTA, TX9
BSF TXSTA, TXEN
BCF 원사 TXSTA, 동기화
BSF TXSTA, BRGHBCF 원사 상태, RP0; 은행 0
BSF RCSTA, SPEN
BCF 원사 RCSTA, RX9
BSF RCSTA, CREN할인 금액 :
; f를 "승
MOVLW 0x31
MOVWF 0x40
MOVLW 0x32
MOVWF 0x41, 0x50은 diff에 대한
MOVLW 0x33
MOVWF 0x42MOVLW 0x34
MOVWF 0x43, 0x51은 diff에 대한
MOVLW 0x48
MOVWF 0x44
MOVLW 0x47
MOVWF 0x45, 0x52은 diff에 대한MOVLW 0x46
MOVWF 0x46
MOVLW 0x45
MOVWF 0x47, 0x53은 diff에 대한
MOVLW 0x44
MOVWF 0x48MOVLW 0x43
MOVWF 0x49
MOVLW 0x42
MOVWF 0x50
MOVLW 0x41
MOVWF 0x51
;******* 뺄셈 *************
BCF 원사 상태, RP0; bank0
;********** 첫 번째 빼기 *************
Ch2_8 :
5 0x41 0x50의 8bits ****** 얻을 ;****
MOVLW 0x0F
ANDWF 0x41, 0
MOVWF 0x6A; 0x41 '주소
MOVLW 0x0F
ANDWF 0x50, 0
MOVWF 0x6B, 0x50 '주소
;*******( 0x42) - (0x51) 0x61로 저장 ******
BCF 원사 상태는 C
MOVF 0x51, 0
SUBWF 0x42, 0
MOVWF 0x61;
;******* C 값에 따라 빼기 *****
BTFSS 상태는 C
고토 Ch28_value0;는 C = 0
BCF 원사 상태는 C;는 C = 1
; (0x6A) - (0x6B) 0x60로
MOVF 0x6B, 0
SUBWF 0x6A, 0
MOVWF 0x60;
고토 Ch4_6Ch28_value0 :;는 C = 0, (0x6A) -1 - (0x6B)에 0x60
BCF 원사 상태는 C
MOVF 0x6B, 0
SUBWF 0x6A, 0
MOVWF 0x60;
; -1 체크 잘라 버려!??
MOVLW 0x01;
SUBWF 0x60, 1
고토 Ch4_6
두 번째 ;********* *****************************
Ch4_6 :
MOVLW 0x0F
ANDWF 0x44, 0
MOVWF 0x6c, 0x44 '주소
MOVLW 0x0F
ANDWF 0x47, 0
MOVWF 0x6D, 0x47 '주소
; (0x45) - (0x48) 0x63로
BCF 원사 상태는 C
MOVF 0x48, 0
SUBWF 0x45, 0
MOVWF 0x63;BTFSS 상태는 C
고토 Ch46_value0;는 C = 0
BCF 원사 상태는 C;는 C = 1
; (0x6c) - (0x6D) 0x62로
MOVF 0x6D, 0
SUBWF 0x6c, 0
MOVWF 0x62;
고토 Ch3_7Ch46_value0 :;는 C = 0, (0x6c) -1 - (0x6D)에 0x63
BCF 원사 상태는 C
MOVF 0x6D, 0
SUBWF 0x6c, 0
MOVWF 0x62;
; -1 체크 잘라 버려!?? C ??,??????
MOVLW 0x01;
SUBWF 0x62, 1
고토 Ch3_7
3 ;************* *******************************
Ch3_7 :
movlw 0xF0;
andwf 0x44, 0
movwf 0x6e; 6e 44 '에서
movlw 0xF0;
andwf 0x50, 0
movwf 0x6F; 50 생물 층
************ 빼기 ;*****
BCF 원사 상태는 C; (6e) - (6 층)에 (65)
MOVF 0x6F, 0
SUBWF 0x6e, 0
MOVWF 0x65;btfss 상태는 C
고토 Ch37_value0;는 C = 0
;는 C = 1 (43) - (49)에 (64)
BCF 원사 상태는 C
movf 0x49, 0
subwf 0x43, 0
movwf 0x64;
고토 그만Ch37_value0 :;는 C = 0 (43) -1 - (49)에 (64)
BCF 원사 상태는 C
movf 0x49, 0
subwf 0x43, 0
movwf 0x64;
; -1
movlw 0x01;
subwf 0x64, 1; 60 61 62 63 64 65
고토 그만
중지 :
고토 그만끝