C
ceibawx
Guest
odejmowanie w montażu kod pic16f628a
I trzeba odjąć trzy razy w montażu kod pic16f628a.Napisałem głupi kod jest zbyt długi.Ja i zastanawiasz się, czy mogę użyć pętli to zrobić.
1) dane są zapisywane w 0x40 ~ 0x51.The danych z 8channels, każdy kanał jest 12bits.więc dwa kanały zajmują trzy bajty w pamięci.np. kanału 1 i kanału 2 zajmują 0x40, 0x41, 0x42.
2) kanał 2 - kanał 8;
kanał 4 - kanał 6;
kanał 3 - kanał 7;
I wybrać tę grupę, ponieważ myślę channel2 ma taką samą strukturę channel8.łatwiej jest odejmować niż channel2-channel3.
3) przed odejmowanie, ANDLW jest używany do dostać cztery bity z bajtu rejestru.
4) pierwszy odjąć niższe bity,
a następnie odjąć wyższe bity według oceny wartości Stan C niższych bitów.
5) niższe bity są przechowywane w pamięci najpierw zarejestrować,
a następnie wysokich bitów są przechowywane w pamięci ostatnie miejsce.Na przykład, jeden wynik odejmowania, wyższe bitów jest przechowywanych w 0x60, natomiast niższe bity są przechowywane w 0x61.
więc wynik odejmowania są przechowywane w 0x60 0x61 0x62 0x63 0x64 0x65.Ktoś może mi pomóc?Kod:
Kod:
Lista P = 16f628a
# include <p16f628a.inc>ByteCounter EQU 0x39Główne gotoGłówne:
BCF STATUS, RP0; banku 0
BCF STATUS, rp1
MOVLW 0x07
MOVWF CMCONBSF STATUS, RP0; banku 1
BCF TRISB, 2; wyjście
; UART ustawienie
MOVLW 0x15
MOVWF SPBRGBCF TXSTA, TX9
BSF TXSTA, TXEN
BCF TXSTA, SYNC
BSF TXSTA, BRGHBCF STATUS, RP0; banku 0
BSF RCSTA, SPEN
BCF RCSTA, RX9
BSF RCSTA, CRENZapisz:
, f> w
MOVLW 0x31
MOVWF 0x40
MOVLW 0x32
MOVWF 0x41, 0x50 dla diff
MOVLW 0x33
MOVWF 0x42MOVLW 0x34
MOVWF 0x43, 0x51 dla diff
MOVLW 0x48
MOVWF 0x44
MOVLW 0x47
MOVWF 0x45, 0x52 dla diffMOVLW 0x46
MOVWF 0x46
MOVLW 0x45
MOVWF 0x47, 0x53 dla diff
MOVLW 0x44
MOVWF 0x48MOVLW 0x43
MOVWF 0x49
MOVLW 0x42
MOVWF 0x50
MOVLW 0x41
MOVWF 0x51
;******* Odejmowanie *************
BCF STATUS, RP0; bank0
;********** pierwszy odejmowanie *************
Ch2_8:
;**** uzyskać 5-8bits z 0x41 0x50 ******
MOVLW 0x0F
ANDWF 0x41, 0
MOVWF 0x6A, 0x41 "adres
MOVLW 0x0F
ANDWF 0x50, 0
MOVWF 0x6B, 0x50 "adres
;*******( 0x42) - (0x51) zapisać do 0x61 ******
BCF STATUS, C
MOVF 0x51, 0
SUBWF 0x42, 0
MOVWF 0x61;
;******* odejmowanie według wartości C *****
BTFSS Stan C
GOTO Ch28_value0, C = 0
BCF STATUS, C, C = 1
(0x6A) - (0x6B) do 0x60
MOVF 0x6B, 0
SUBWF 0x6A, 0
MOVWF 0x60;
goto Ch4_6Ch28_value0:; C = 0, (0x6A) -1 - (0x6B) do 0x60
BCF STATUS, C
MOVF 0x6B, 0
SUBWF 0x6A, 0
MOVWF 0x60;
; -1 Sprawdzić C?
MOVLW 0x01;
SUBWF 0x60, 1
goto Ch4_6
;********* drugi *****************************
Ch4_6:
MOVLW 0x0F
ANDWF 0x44, 0
MOVWF 0x6C, 0x44 "adres
MOVLW 0x0F
ANDWF 0x47, 0
MOVWF 0x6D, 0x47 "adres
(0x45) - (0x48) do 0x63
BCF STATUS, C
MOVF 0x48, 0
SUBWF 0x45, 0
MOVWF 0x63;BTFSS Stan C
GOTO Ch46_value0, C = 0
BCF STATUS, C, C = 1
(0x6C) - (0x6D) do 0x62
MOVF 0x6D, 0
SUBWF 0x6C, 0
MOVWF 0x62;
goto Ch3_7Ch46_value0:; C = 0, (0x6C) -1 - (0x6D) do 0x63
BCF STATUS, C
MOVF 0x6D, 0
SUBWF 0x6C, 0
MOVWF 0x62;
; -1 Sprawdzić C? C ??,??????
MOVLW 0x01;
SUBWF 0x62, 1
goto Ch3_7
;************* trzeciego *******************************
Ch3_7:
movlw 0xF0;
andwf 0x44, 0
movwf 0x6E; 44''w 6E
movlw 0xF0;
andwf 0x50, 0
movwf 0x6F, 50''w 6F
;***** odejmowanie ************
BCF STATUS, C; (6E) - (6F) do (65)
MOVF 0x6F, 0
SUBWF 0x6E, 0
MOVWF 0x65;btfss Stan C
GOTO Ch37_value0, C = 0
, C = 1 (43) - (49) do (64)
BCF STATUS, C
movf 0x49, 0
subwf 0x43, 0
movwf 0x64;
Przystanek gotoCh37_value0:; C = 0 (43) -1 - (49) do (64)
BCF STATUS, C
movf 0x49, 0
subwf 0x43, 0
movwf 0x64;
; -1
movlw 0x01;
subwf 0x64, 1; 60 61 62 63 64 65
Przystanek GOTO
Przystanek:
Przystanek GOTOKONIEC
I trzeba odjąć trzy razy w montażu kod pic16f628a.Napisałem głupi kod jest zbyt długi.Ja i zastanawiasz się, czy mogę użyć pętli to zrobić.
1) dane są zapisywane w 0x40 ~ 0x51.The danych z 8channels, każdy kanał jest 12bits.więc dwa kanały zajmują trzy bajty w pamięci.np. kanału 1 i kanału 2 zajmują 0x40, 0x41, 0x42.
2) kanał 2 - kanał 8;
kanał 4 - kanał 6;
kanał 3 - kanał 7;
I wybrać tę grupę, ponieważ myślę channel2 ma taką samą strukturę channel8.łatwiej jest odejmować niż channel2-channel3.
3) przed odejmowanie, ANDLW jest używany do dostać cztery bity z bajtu rejestru.
4) pierwszy odjąć niższe bity,
a następnie odjąć wyższe bity według oceny wartości Stan C niższych bitów.
5) niższe bity są przechowywane w pamięci najpierw zarejestrować,
a następnie wysokich bitów są przechowywane w pamięci ostatnie miejsce.Na przykład, jeden wynik odejmowania, wyższe bitów jest przechowywanych w 0x60, natomiast niższe bity są przechowywane w 0x61.
więc wynik odejmowania są przechowywane w 0x60 0x61 0x62 0x63 0x64 0x65.Ktoś może mi pomóc?Kod:
Kod:
Lista P = 16f628a
# include <p16f628a.inc>ByteCounter EQU 0x39Główne gotoGłówne:
BCF STATUS, RP0; banku 0
BCF STATUS, rp1
MOVLW 0x07
MOVWF CMCONBSF STATUS, RP0; banku 1
BCF TRISB, 2; wyjście
; UART ustawienie
MOVLW 0x15
MOVWF SPBRGBCF TXSTA, TX9
BSF TXSTA, TXEN
BCF TXSTA, SYNC
BSF TXSTA, BRGHBCF STATUS, RP0; banku 0
BSF RCSTA, SPEN
BCF RCSTA, RX9
BSF RCSTA, CRENZapisz:
, f> w
MOVLW 0x31
MOVWF 0x40
MOVLW 0x32
MOVWF 0x41, 0x50 dla diff
MOVLW 0x33
MOVWF 0x42MOVLW 0x34
MOVWF 0x43, 0x51 dla diff
MOVLW 0x48
MOVWF 0x44
MOVLW 0x47
MOVWF 0x45, 0x52 dla diffMOVLW 0x46
MOVWF 0x46
MOVLW 0x45
MOVWF 0x47, 0x53 dla diff
MOVLW 0x44
MOVWF 0x48MOVLW 0x43
MOVWF 0x49
MOVLW 0x42
MOVWF 0x50
MOVLW 0x41
MOVWF 0x51
;******* Odejmowanie *************
BCF STATUS, RP0; bank0
;********** pierwszy odejmowanie *************
Ch2_8:
;**** uzyskać 5-8bits z 0x41 0x50 ******
MOVLW 0x0F
ANDWF 0x41, 0
MOVWF 0x6A, 0x41 "adres
MOVLW 0x0F
ANDWF 0x50, 0
MOVWF 0x6B, 0x50 "adres
;*******( 0x42) - (0x51) zapisać do 0x61 ******
BCF STATUS, C
MOVF 0x51, 0
SUBWF 0x42, 0
MOVWF 0x61;
;******* odejmowanie według wartości C *****
BTFSS Stan C
GOTO Ch28_value0, C = 0
BCF STATUS, C, C = 1
(0x6A) - (0x6B) do 0x60
MOVF 0x6B, 0
SUBWF 0x6A, 0
MOVWF 0x60;
goto Ch4_6Ch28_value0:; C = 0, (0x6A) -1 - (0x6B) do 0x60
BCF STATUS, C
MOVF 0x6B, 0
SUBWF 0x6A, 0
MOVWF 0x60;
; -1 Sprawdzić C?
MOVLW 0x01;
SUBWF 0x60, 1
goto Ch4_6
;********* drugi *****************************
Ch4_6:
MOVLW 0x0F
ANDWF 0x44, 0
MOVWF 0x6C, 0x44 "adres
MOVLW 0x0F
ANDWF 0x47, 0
MOVWF 0x6D, 0x47 "adres
(0x45) - (0x48) do 0x63
BCF STATUS, C
MOVF 0x48, 0
SUBWF 0x45, 0
MOVWF 0x63;BTFSS Stan C
GOTO Ch46_value0, C = 0
BCF STATUS, C, C = 1
(0x6C) - (0x6D) do 0x62
MOVF 0x6D, 0
SUBWF 0x6C, 0
MOVWF 0x62;
goto Ch3_7Ch46_value0:; C = 0, (0x6C) -1 - (0x6D) do 0x63
BCF STATUS, C
MOVF 0x6D, 0
SUBWF 0x6C, 0
MOVWF 0x62;
; -1 Sprawdzić C? C ??,??????
MOVLW 0x01;
SUBWF 0x62, 1
goto Ch3_7
;************* trzeciego *******************************
Ch3_7:
movlw 0xF0;
andwf 0x44, 0
movwf 0x6E; 44''w 6E
movlw 0xF0;
andwf 0x50, 0
movwf 0x6F, 50''w 6F
;***** odejmowanie ************
BCF STATUS, C; (6E) - (6F) do (65)
MOVF 0x6F, 0
SUBWF 0x6E, 0
MOVWF 0x65;btfss Stan C
GOTO Ch37_value0, C = 0
, C = 1 (43) - (49) do (64)
BCF STATUS, C
movf 0x49, 0
subwf 0x43, 0
movwf 0x64;
Przystanek gotoCh37_value0:; C = 0 (43) -1 - (49) do (64)
BCF STATUS, C
movf 0x49, 0
subwf 0x43, 0
movwf 0x64;
; -1
movlw 0x01;
subwf 0x64, 1; 60 61 62 63 64 65
Przystanek GOTO
Przystanek:
Przystanek GOTOKONIEC