Beste mede leden.
Mijn alias is almera.
Het is al enige jaren geleden op dit forum en moet er weer inkomen.
Heb een vraag over het volgende.
Zie listing compleet hieronder.
programma MPLAB 8.92
Als ik alles omzet voor een PIC16F688 werkt het goed,
maar na dagen puzzelen krijg ik het niet aan de gang met een PIC18F4520
Zou er iemand mij kunnen helpen met de oplossing ?
B.V.D
PS del listing met pic 16f688 staat onderaan.
#include "p18f4520.INC"
; CONFIG OSC=INTIO67
; CONFIG PWRT=ON ; PWRT enabled
; CONFIG BOREN=SBORDIS,BORV=0 ; 0 = Maximum setting
CONFIG WDT=OFF
; CONFIG MCLRE=ON
; CONFIG LPT1OSC=OFF
; CONFIG PBADEN=OFF
; CONFIG LVP=OFF
; CONFIG XINST=OFF
; CONFIG DEBUG=OFF
cblock 0x000
BCD9 ; MSD
BCD8
BCD7
BCD6
BCD5
BCD4
BCD3
BCD2
BCD1
BCD0 ; LSD
digcnt
bitcnt
ACb0 ; LSB
ACb1
ACb2
ACb3 ; MSB
dummy
endc
org 0x00
goto test1
org 0x04
goto test1
org 0x0c
;============================================================================
; Quadruple Precision (32-bit) unsigned Binary to BCD conversion
; BCD9 to BCD0 comprise one ten digit unpacked Binary-Coded-Decimal number.
; The upper nibble of each digit is zero (00008421). BCD9 is the MS-Digit.
; ACb3 to ACb0 comprise a four-byte (32-bit) binary accumulator.
; ACb3 is the MS-Byte.
; The 32-bit binary number in ACb in converted to a ten digit BCD number.
;
test1:
LFSR FSR0,0
call Q_b2bcd
sleep
Q_b2bcd
clrf BCD9 ; Clear all bcd digits
clrf BCD8
clrf BCD7
clrf BCD6
clrf BCD5
clrf BCD4
clrf BCD3
clrf BCD2
clrf BCD1
clrf BCD0
movlw D'32' ; Outer loop
movwf bitcnt ; bit counter
; eigen binaire waarde invullen.
movlw B'11111111'
movwf ACb0
movlw B'00000000'
movwf ACb1
movlw B'00000000'
movwf ACb2
movlw b'00000000' ; MSB
movwf ACb3
b2bcd1
rlcf ACb0,f ;Shift 32-bit accumulator
rlcf ACb1,f ; left to
rlcf ACb2,f ; put ms-bit
rlcf ACb3,f ; into Carry
LFSR FSR0,BCD0
movlw D'10' ;Inner loop
movwf digcnt ; digit counter
b2bcd2:
rlcf INDF0,W ;Shift Carry into bcd digit
movlw D'10' ;Subtract ten from digit then
subwf INDF0,W ; check and adjust for decimal overflow
btfsc STATUS,C ;If Carry = 1 (result >= 0)
movwf INDF0 ; adjust for decimal overflow
decf FSR0L,f ;Point to next bcd digit
decfsz digcnt,f ;Decrement digit counter
goto b2bcd2 ; - go if digcnt > 0
decfsz bitcnt,f ;Decrement bit counter
goto b2bcd1 ; - go if bitcnt > 0
retlw 0
END
#include <p16F688.inc>
__config _WDT_OFF
cblock 0x20
BCD9 ; MSD
BCD8
BCD7
BCD6
BCD5
BCD4
BCD3
BCD2
BCD1
BCD0 ; LSD
digcnt
bitcnt
ACb0 ; LSB
ACb1
ACb2
ACb3 ; MSB
endc
org 0x00
goto test1
org 0x04
goto test1
org 0x0c
;============================================================================
; Quadruple Precision (32-bit) unsigned Binary to BCD conversion
; BCD9 to BCD0 comprise one ten digit unpacked Binary-Coded-Decimal number.
; The upper nibble of each digit is zero (00008421). BCD9 is the MS-Digit.
; ACb3 to ACb0 comprise a four-byte (32-bit) binary accumulator.
; ACb3 is the MS-Byte.
; The 32-bit binary number in ACb in converted to a ten digit BCD number.
;
test1:
call Q_b2bcd
sleep
Q_b2bcd
clrf BCD9 ; Clear all bcd digits
clrf BCD8
clrf BCD7
clrf BCD6
clrf BCD5
clrf BCD4
clrf BCD3
clrf BCD2
clrf BCD1
clrf BCD0
movlw D'32' ; Outer loop
movwf bitcnt ; bit counter
; eigen binaire waarde invullen.
movlw B'00001001'
movwf ACb0
movlw B'00000000'
movwf ACb1
movlw B'00000000'
movwf ACb2
movlw b'00000000' ; MSB
movwf ACb3
b2bcd1
rlf ACb0,f ;Shift 32-bit accumulator
rlf ACb1,f ; left to
rlf ACb2,f ; put ms-bit
rlf ACb3,f ; into Carry
movlw BCD0 ;Point to address of least
movwf FSR ; significant bcd digit
movlw D'10' ;Inner loop
movwf digcnt ; digit counter
b2bcd2
rlf INDF,f ;Shift Carry into bcd digit
movlw D'10' ;Subtract ten from digit then
subwf INDF,w ; check and adjust for decimal overflow
btfsc STATUS,C ;If Carry = 1 (result >= 0)
movwf INDF ; adjust for decimal overflow
decf FSR,f ;Point to next bcd digit
decfsz digcnt,f ;Decrement digit counter
goto b2bcd2 ; - go if digcnt > 0
decfsz bitcnt,f ;Decrement bit counter
goto b2bcd1 ; - go if bitcnt > 0
retlw 0
END