You don't want the carry.... RRNCF file is the command you want... You really want to shift the end result..ie.. the variable you are using.
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
;REGISTER DECLERATIONS
REG1 EQU 60H ; HERE WE ARE NAMING THE GENERAL PURPOUSE REGISTER
ORG 0000H
;ALL INTIALIZATION HERE OF ALL PORTS AND PERIPHERALS HERE
REG1 EQU 60H
MOVLW B'00000000' ;DECLARE BITS AS output
MOVWF TRISD
;START MAIN PROGRAM HERE
MAIN
CLRF REG1
MOVLW B'00000111'
MOVWF REG1
RRNCF REG1
MOVFF REG1,PORTD
LINE1
GOTO LINE1
END_OF_PROGRAME
Ok i found a way for this problemafter the 'RRNCF REG1' command i wrote 'BCF REG1,7'. That way if the shifted bit is 1 is will be cleared. Tomorrow i will put this coding in the actual code and will let you know if it worked fine . Thanks very much for your help guys
![]()
;COMPARE ADC RESULT WITH REGISTER 'REF'
MOVFF ADRESH, F
MOVLW REF
CPFSGT ADRESH
BRA LINE7
BRA LINE5
LINE7
BSF PORTC,2
GOTO MAIN
LINE5
BCF PORTC,2
;COMPARE ADC RESULT WITH REGISTER 'REF'
MOVFF ADRESH, F
MOVLW .40
CPFSGT ADRESH
BRA LINE7
BRA LINE5
LINE7
BSF PORTC,2
GOTO MAIN
LINE5
BCF PORTC,2
;REGISTER DECLERATIONS
REG1 EQU 60H ; HERE WE ARE NAMING THE GENERAL PURPOUSE REGISTER
ADC EQU 61H
REF EQU 62H
REG2 EQU 63H
REG3 EQU 64H
REG4 EQU 65H
F EQU 66H
ORG 0000H
;ALL INTIALIZATION HERE OF ALL PORTS AND PERIPHERALS HERE
MOVLW B'00000001' ; SET AN0 AS ANALOG INPUT AND SWITCH ON ADC MODULE
MOVWF ADCON0
MOVLW B'00111110' ;SET AN2 AND AN3 AS REFERENCE VOLTAGES, AND SET AN0 AS ANALOG INPUT
MOVWF ADCON1
MOVLW B'00101100' ;SET AS LEFT JUSTIFIED, SET AS 12 TAD, SET AS FOSC/4
MOVWF ADCON2
CLRF PORTD ;DECLARE PORT D AS OUTPUT FOR THE DIGITAL OUTPUT
CLRF TRISD
MOVLW B'111111' ;DECLARE PORT A AS INPUT FOR THE ANALOG INPYT
MOVWF TRISA
SETF PORTB ;DECLARE PORT B AS INTUP FOR THE REFERENCE SWITCHES
SETF TRISB
CLRF PORTC
CLRF TRISC
CLRF ADC ;CLEAR REGISTER ON START UP ONLY
CLRF PORTC
CLRF REF
;START MAIN PROGRAM HERE
MAIN
;TEST SWITCHES ... DECREMENT AND INCREMENT REFERENCE REGISTER (REF)
BTFSS PORTB,6
BRA LINE9
INCF REF
CLRF PORTD
MOVFF REF, PORTD
CALL DELAY
LINE9
BTFSS PORTB,7
BRA LINE8
DECF REF
CLRF PORTD
MOVFF REF, PORTD
CALL DELAY
LINE8
;ADC ROUTINE
CALL ACQ_DELAY ;CALL DELAY
BSF ADCON0,1 ; CONVERSION IN PROCESS (START CONVERTING)
LINE1
BTFSC ADCON0,1 ;check if ADCON0 bit 1 if clear,if yes skip the next instruction
BRA LINE1
RRNCF ADRESH ;SHIFT RESULT TO THE RIGHT. THIS WAY IT WILL HAVE 7 BITS INSTEAD OF 8 BITS
BCF ADRESH,7 ;CLEAR THE LAST BIT OF REG1. THIS IS DONE SO THAT IF THE SHIFTED BIT IS 1, IT WILL BE CLEARED (0)
MOVFF ADRESH,PORTD ;MOVE VALUE FROM ADRESH REGISTER TO PORTD
;COMPARE ADC RESULT WITH REGISTER 'REF'
MOVFF ADRESH , F
MOVLW REF
CPFSGT ADRESH
BRA LINE7
BRA LINE5
LINE7
BSF PORTC,2
GOTO MAIN
LINE5
BCF PORTC,2
GOTO MAIN
DELAY
CLRF REG2
CLRF REG3
MOVLW 30
MOVWF REG4
BSF PORTC,2
LINE1_DELAY
DECFSZ REG2
BRA LINE1_DELAY
DECFSZ REG3
BRA LINE1_DELAY
DECFSZ REG4
BRA LINE1_DELAY
RETURN
ACQ_DELAY
MOVLW REF
MOVWF REG1
ACQ1
DECFSZ REG1
BRA ACQ1
RETURN
END_OF_PROGRAME
Hi ericgibbs,
Attached is the .asm file.
Thanks
Code:Did notice this error LIST P=18F4550 #include <P18F4455.INC>
Yes i also noticed that before attaching it, but its still not working.
MOVFF ADRESH , F
MOVLW REF
CPFSGT ADRESH
BRA LINE7
BRA LINE5
LINE7
BSF PORTC,2
GOTO MAIN
LINE5
BCF PORTC,2
Is this what you really want to do, let 0 to 127 represent 0 to +5Vin.???
Hi,
I think im not explaining myself correctly.
That was done and it worked.
The problem is with the green led which should turn off when the value in register ADRESH exceed the value in register REF. But as seen in the video this is not happening, instead the green led is turning off at value 98 DEC.