atimties surenkant kodą pic16f628a

C

ceibawx

Guest
atimti surenkant kodą pic16f628a

Man reikia atimti tris kartus surinkimas kodas pic16f628a.Parašiau kvailas kodas, jis yra per ilgas.ir man įdomu, ar galiu naudoti kilpą daryti.

1) duomenys yra saugomi 0x40 ~ 0x51.The duomenys iš 8channels, kiekvienas kanalas 12bits.taip du kanalus užima trys baitai atmintyje.Pavyzdžiui kanalas 1 ir kanalas 2 okupuoti 0x40, 0x41, 0x42.
2) kanalas 2 - channel 8;
Channel 4 - channel 6;
Channel 3 - Channel 7;
Pasirinkti šią grupę, nes manau, channel2 turi tokią pačią struktūrą channel8.lengviau atimti nei channel2-channel3.
3) prieš atimti, ANDLW yra naudojamas norint gauti keturi bitai nuo baitų užsiregistruoti.
4) pirmasis atimti mažesnį bitų, tada atimti didesnę bitų Sprendžiant pagal statusą, C mažesnį bitų reikšmė.
5) mažesnis bitai saugomi Pirma atminties registrą, tada aukštos bitai saugomi pastarosios vietos atmintyje.Pavyzdžiui, vienas atimties rezultatas, didesnis bitai saugomi 0x60, o mažesnės bitai saugomi 0x61.
taigi visi atimties rezultatas yra saugomi 0x60 0x61 0x62 0x63 0x64 0x65.Anybody can help me?Kodas
Kodas

list P = 16f628a

# include <p16f628a.inc>ByteCounter kongresas 0x39goto PagrindinisAtsakingas komitetas:

BCF STATUS, RP0, banko 0

BCF STATUS, RP1

MOVLW 0x07

MOVWF CMCONBSF STATUSAS, RP0; 1 bankas

BCF TRISB, 2; produkcija

; UART nustatymas

MOVLW 0x15

MOVWF SPBRGBCF TXSTA, TX9

BSF TXSTA, TXEN

BCF TXSTA, SYNC

BSF TXSTA, BRGHBCF STATUS, RP0, banko 0

BSF RCSTA, SPEN

BCF RCSTA, RX9

BSF RCSTA, CRENPrisiminti:

f> W

MOVLW 0x31

MOVWF 0x40

MOVLW 0x32

MOVWF 0x41, 0x50 palyginimui

MOVLW 0x33

MOVWF 0x42MOVLW 0x34

MOVWF 0x43, 0x51 palyginimui

MOVLW 0x48

MOVWF 0x44

MOVLW 0x47

MOVWF 0x45, 0x52 palyginimuiMOVLW 0x46

MOVWF 0x46

MOVLW 0x45

MOVWF 0x47, 0x53 palyginimui

MOVLW 0x44

MOVWF 0x48MOVLW 0x43

MOVWF 0x49

MOVLW 0x42

MOVWF 0x50

MOVLW 0x41

MOVWF 0x51
;******* Atimtis *************

BCF STATUS, RP0; bank0

;********** pirmojo atimtis *************

Ch2_8:

;**** gauti 5-8bits apie 0x41 0x50 ******

MOVLW 0x0F

ANDWF 0x41, 0

MOVWF 0x6A, 0x41 "adresas

MOVLW 0x0F

ANDWF 0x50, 0

MOVWF 0x6B, 0x50 "adresas

;*******( 0x42) - (0x51) įrašyti į 0x61 ******

BCF STATUS, C

MOVF 0x51, 0

SUBWF 0x42, 0

MOVWF 0x61;

;******* atimti pagal C vertė *****

BTFSS STATUSAS, C

GOTO Ch28_value0, C = 0

BCF STATUS, C, C = 1

; (0x6A) - (0x6B) į 0x60

MOVF 0x6B, 0

SUBWF 0x6A, 0

MOVWF 0x60;

Goto Ch4_6Ch28_value0:; c = 0, (0x6A) -1 - (0x6B) į 0x60

BCF STATUS, C

MOVF 0x6B, 0

SUBWF 0x6A, 0

MOVWF 0x60;

; -1 Patikrinti C?

MOVLW 0x01;

SUBWF 0x60, 1

Goto Ch4_6

;********* antra *****************************

Ch4_6:

MOVLW 0x0F

ANDWF 0x44, 0

MOVWF 0x6C; 0x44 'adresas

MOVLW 0x0F

ANDWF 0x47, 0

MOVWF 0x6D; 0x47 'adresas

; (0x45) - (0x48) į 0x63

BCF STATUS, C

MOVF 0x48, 0

SUBWF 0x45, 0

MOVWF 0x63;BTFSS STATUSAS, C

GOTO Ch46_value0, C = 0

BCF STATUS, C, C = 1

; (0x6C) - (0x6D) į 0x62

MOVF 0x6D, 0

SUBWF 0x6C, 0

MOVWF 0x62;

Goto Ch3_7Ch46_value0:; c = 0, (0x6C) -1 - (0x6D) į 0x63

BCF STATUS, C

MOVF 0x6D, 0

SUBWF 0x6C, 0

MOVWF 0x62;

; -1 Patikrinti C? C ??,??????

MOVLW 0x01;

SUBWF 0x62, 1

Goto Ch3_7

;************* trečiosios *******************************

Ch3_7:

movlw 0xF0;

andwf 0x44, 0

movwf 0x6E, 44''į 6E

movlw 0xF0;

andwf 0x50, 0

movwf 0x6F; 50''Į 6F

;***** atimti ************

BCF STATUS, C; (6E) - (6f) į (65)

MOVF 0x6F, 0

SUBWF 0x6E, 0

MOVWF 0x65;btfss STATUSAS, C

GOTO Ch37_value0, C = 0

, C = 1 (43) - (49) to (64)

bcf STATUS, C

movf 0x49, 0

subwf 0x43, 0

movwf 0x64;

Goto StotelėCh37_value0:; C = 0 (43) -1 - (49) to (64)

bcf STATUS, C

movf 0x49, 0

subwf 0x43, 0

movwf 0x64;

; -1

movlw 0x01;

subwf 0x64, 1; 60 61 62 63 64 65

GOTO Stotelė

Stotelė:

GOTO StotelėPABAIGA
 
galite naudoti šį kodą atimti dviejų 16 bitų skaičių

;************************************************* ***********************
; Atimtis: ACCb (16 bitų) - ACCA (16 bitų) -> ACCb (16 bitų) *
; (A) apkrovos 1. operando į vietą ACCaLO & ACCaHI (16 bitų) *
(B) Apkrovos 2. operando į vietą ACCbLO & ACCbHI (16 bitų) *
(C) KVIETIMAS Sub_16bit *
(D) rezultatas yra vieta ACCbLO & ACCbHI (16 bitų) *
;************************************************* ***********************
Sub_16bit
skambinti Neg_16bit
skambinti Add_16bit
atgal

;************************************************* ***********************
; Papildymas: ACCb (16 bitų) ACCA (16 bitų) -> ACCb (16 bitų) *
; (A) apkrovos 1. operando į vietą ACCaLO & ACCaHI (16 bitų) *
(B) Apkrovos 2. operando į vietą ACCbLO & ACCbHI (16 bitų) *
(C) KVIETIMAS Add_16bit *
(D) rezultatas yra vieta ACCbLO & ACCbHI (16 bitų) *
;************************************************* ***********************
Add_16bit
movf ACCaLO, W
addwf ACCbLO, F; Pridėti lsb
btfsc STATUS, C; pridėti vykdyti
incf ACCbHI F
movf ACCaHI, W
addwf ACCbHI, F; Pridėti MSB
atgal
;************************************************* ***********************
2's Compliment: paneigti ACCA (-ACCA -> ACCA) *
; (A) apkrovos ir vieta operando ACCaLO & ACCaHI (16 bitų) *
(B) KVIETIMAS Neg_16bit *
(C) rezultatas yra vieta ACCaLO & ACCaHI (16 bitų) *
;************************************************* ***********************
Neg_16bit
comf ACCaLO, F;
incf ACCaLO F
btfsc STATUS, Z
decf ACCaHI F
comf ACCaHI F
atgal

 

Welcome to EDABoard.com

Sponsor

Back
Top