어셈블리 코드 pic16f628a에서 빼십시오"

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

고토 그만

중지 :

고토 그만끝
 
U 2 개의 16 비트 숫자를 빼기 위해이 코드를 사용할 수있습니다

;************************************************* ***********************
; 뺄셈 : ACCb (16 비트) - ACCa (16 비트) - "ACCb (16 비트) *
; ()로드 위치 1 피연산자 ACCaLO & ACCaHI (16 비트) *
; 위치 (b)는 부하 2 피연산자 ACCbLO & ACCbHI (16 비트) *
; (C) 외침 Sub_16bit *
; (d)에 따라서 ACCbLO & ACCbHI (16 비트 위치에) *이다
;************************************************* ***********************
Sub_16bit
Neg_16bit 전화
Add_16bit 전화
돌아가기

;************************************************* ***********************
; 추가 : ACCb (16 비트) ACCa (16 비트) - "ACCb (16 비트) *
; ()로드 위치 1 피연산자 ACCaLO & ACCaHI (16 비트) *
; 위치 (b)는 부하 2 피연산자 ACCbLO & ACCbHI (16 비트) *
; (C) 외침 Add_16bit *
; (d)에 따라서 ACCbLO & ACCbHI (16 비트 위치에) *이다
;************************************************* ***********************
Add_16bit
movf ACCaLO, 승
addwf ACCbLO로, F; LSB가 추가
btfsc 상태는 C; 수행에 추가
incf ACCbHI로, F
movf ACCaHI, 승
addwf ACCbHI로, F; MSB가 추가
돌아가기
;************************************************* ***********************
; 2의 경의 : 깨뜨릴 ACCa (- ACCa - "ACCa) *
; ()로드 위치 피연산자 ACCaLO & ACCaHI (16 비트) *
; (b)는 외침 Neg_16bit *
; (C) 결과는 ACCaLO & ACCaHI (16 비트 위치에) *이다
;************************************************* ***********************
Neg_16bit
comf ACCaLO로, F;
incf ACCaLO로, F
btfsc 상태, Z부터
decf ACCaHI로, F
comf ACCaHI로, F
돌아가기

 

Welcome to EDABoard.com

Sponsor

Back
Top