;*************16-BIT ADDITION************ ; BY: ENG'R ROLAND MICHAEL A. DELA PEŅA * ;**************************************** ; RECALL: ; 16BIT BINARY DECIMAL ; 00000000 00000101 = 5 ; HIGH BYTE LOW BYTE ; MSB LSB LIST P=16F84 ERRORLEVEL -302 #include p16f84.inc ;************************************************************ ; REGISTER DEFINITIONS ;************************************************************ CBLOCK 0CH HBYTE ; HIGH BYTE OF THE 16 BIT RESULT LBYTE ; LOW BYTE OF THE 16 BIT RESULT ADD1HI ; HIGH BYTE FOR ADD ROUTINE ADD1LO ; LOW BYTE FOR ADD ROUTINE ADD2HI ; (CONSTANT) HIGH BYTE FOR ADD ROUTINE SET TO 00000000 ADD2LO ; (CONSTANT) LOW BYTE FOR ADD ROUTINE SET TO 00000101 SUB1HI ; HIGH BYTE FOR ADD ROUTINE SUB1LO ; LOW BYTE FOR ADD ROUTINE SUBT2HI ; (CONSTANT) HIGH BYTE FOR SUBTRACT ROUTINE SET TO 00000000 SUBT2LO ; (CONSTANT) LOW BYTE FOR SUBTRACT ROUTINE SET TO 00000101 ANSHI ; HIGH BYTE FOR THE ANSWER ANSLO ; LOW BYTE FOR THE ANSWER ROLAND ; TEST REGISTER ENDC GOTO START ;******************************************************************** ; 16 BIT ADDITION ; THIS ADDS CONSTANT 5 TO THE 16 BIT RESULT - HBYTE LBYTE ; ADD1HI ADD1LO + ADD2HI ADD2LO = ANSHI ANSLO ;********************************************************************* CLRF ADD2HI ; MAKE ADD2HI=0 MOVLW b'00000101' ; MOVE CONSTANT VALUE=5 TO W MOVWF ADD2LO ; MOVE W TO ADD2LO REG. TO MAKE SB1LO=5 ADD MOVFW HBYTE ; STORE THE 16-BIT RESULT TO ADD1HI & ADD1LO MOVWF ADD1HI MOVFW LBYTE MOVWF ADD1LO MOVFW ADD1LO ADDWF ADD2LO,F ; ADD LOW BYTES ADD1LO & ADD2LO BTFSC STATUS,C ; TEST IF THE RESULT EXCEEDED 256. IS THERE A CARRY? INCF ADD2HI,F ; YUP, ADD 1 TO ADD2HI MOVFW ADD1HI ; NOPE, DON'T ADD 1 TO ADD2HI ADDWF ADD2HI,F ; ADD HIGH BYTES ADD1HI & ADD2HI CLRW MOVFW ADD2HI MOVWF ANSHI ; STORE THE HIGH BYTE ANSWER TO ANSHI MOVFW ADD2LO MOVWF ANSLO ; STORE THE LOW BYTE ANSWER TO ANSLO RETURN ; OR... START ; EXAMPLE OF 100 + 357 = 457 MOVLW b'01100100' MOVWF ADD1LO MOVLW b'00000000' MOVWF ADD1HI MOVLW b'01100101' MOVWF ADD2LO MOVLW b'00000001' MOVWF ADD2HI CALL ADD0 ; RESERVED FOR PROGRAM LINES ; ; GOTO START ;******************************************************************** ; OR... ; ADD1HI ADD1LO + ADD2HI ADD2LO = ADD2HI ADD2LO ;********************************************************************* ADD0 MOVFW ADD1LO ADDWF ADD2LO,W MOVWF ADD2LO MOVFW ADD1HI BTFSC STATUS,C ADDLW D'1' ; IF A CARRY OCCURRED, ADD 1 ADDWF ADD2HI,W MOVWF ADD2HI RETURN END