Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge Branch for Division Subroutine #9

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 66 additions & 5 deletions main.s
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
#include <xc.inc>
#include <xc.inc>

psect code, abs

psect udata_
myNumerator:ds 1
myDenominator:ds 1
myQuotient:ds 1
myRemainder:ds 1
myDiff:ds 1

main:
org 0x0
Expand All @@ -9,16 +16,70 @@ main:
org 0x100 ; Main code starts here at address 0x100
start:
movlw 0x0
movwf TRISB, A ; Port C all outputs
movwf TRISC, A ; Port C all outputs
bra test
loop:
movff 0x06, PORTB
movff 0x06, PORTC
incf 0x06, W, A
test:
movwf 0x06, A ; Test for end of loop condition
movlw 0x63
movlw 0x01
cpfsgt 0x06, A
bra loop ; Not yet finished goto start of loop again
goto 0x0 ; Re-run program from start
;goto 0x0 ; Re-run program from start

; PIC18 Assembly division example

; Inputs:
; Numerator in WREG
; Denominator in a register (e.g., myDenominator)

; Initialize variables
MOVLW 11 ; Numerator
MOVWF myNumerator

MOVLW 3 ; Denominator
MOVWF myDenominator

; Perform division
CALL Divide

; Result is now in WREG

; Your code here

Divide:
; Ensure myDenominator is not zero
MOVLW 0
CPFSEQ myDenominator
GOTO Clear ; Check the MSB of myDenominator
GOTO DivisionError ; If zero, handle division by zero
Clear: ; Perform division algorithm
CLRF myQuotient ; Clear the quotient register
CLRF myRemainder ; Clear the remainder register

DivideLoop:
MOVFF myNumerator, WREG

; rather than doing subtraction, just do a comparison
CPFSGT myDenominator ; myNumerator(WREG) < myDenominator, skip to finish
GOTO Incr
GOTO DivisionDone ; Done if myNumerator < myDenominator
Incr:
INCF myQuotient, 1 ; Increment quotient
MOVFF myDenominator, WREG
SUBWF myNumerator, 1 ; myNumerator -= myDenominator
GOTO DivideLoop ; Repeat the loop

DivisionDone:
; Quotient is in myQuotient, remainder is in myRemainder
MOVFF myQuotient, PORTC
RETURN

DivisionError:
; Handle division by zero or other error
; Your code here
RETURN

end main

199 changes: 92 additions & 107 deletions nbproject/configurations.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,13 @@
<logicalFolder name="SourceFiles"
displayName="Source Files"
projectFiles="true">
<itemPath>main.s</itemPath>
<itemPath>config.s</itemPath>
<itemPath>main.s</itemPath>
<itemPath>UART.s</itemPath>
<itemPath>LCD.s</itemPath>
<itemPath>Keypad.s</itemPath>
<itemPath>Digit_Reader.s</itemPath>
<itemPath>Calculations.s</itemPath>
</logicalFolder>
<logicalFolder name="ExternalFiles"
displayName="Important Files"
Expand All @@ -31,8 +36,8 @@
<targetPluginBoard></targetPluginBoard>
<platformTool>Simulator</platformTool>
<languageToolchain>pic-as</languageToolchain>
<languageToolchainVersion>2.41</languageToolchainVersion>
<platform>3</platform>
<languageToolchainVersion>2.45</languageToolchainVersion>
<platform>4</platform>
</toolsSet>
<packs>
<pack name="PIC18F-K_DFP" vendor="Microchip" version="1.8.249"/>
Expand Down Expand Up @@ -64,86 +69,50 @@
<makeCustomizationEnableLongLines>false</makeCustomizationEnableLongLines>
<makeCustomizationNormalizeHexFile>false</makeCustomizationNormalizeHexFile>
</makeCustomizationType>
<HI-TECH-COMP>
<property key="additional-warnings" value="true"/>
<property key="asmlist" value="true"/>
<property key="call-prologues" value="false"/>
<property key="default-bitfield-type" value="true"/>
<property key="default-char-type" value="true"/>
<property key="define-macros" value=""/>
<property key="disable-optimizations" value="true"/>
<property key="extra-include-directories" value=""/>
<property key="favor-optimization-for" value="-speed,+space"/>
<property key="garbage-collect-data" value="true"/>
<property key="garbage-collect-functions" value="true"/>
<property key="identifier-length" value="255"/>
<property key="local-generation" value="false"/>
<property key="operation-mode" value="free"/>
<property key="opt-xc8-compiler-strict_ansi" value="false"/>
<property key="optimization-assembler" value="true"/>
<property key="optimization-assembler-files" value="true"/>
<property key="optimization-debug" value="false"/>
<property key="optimization-invariant-enable" value="false"/>
<property key="optimization-invariant-value" value="16"/>
<property key="optimization-level" value="-O0"/>
<property key="optimization-speed" value="false"/>
<property key="optimization-stable-enable" value="false"/>
<property key="preprocess-assembler" value="true"/>
<property key="short-enums" value="true"/>
<property key="tentative-definitions" value="-fno-common"/>
<property key="undefine-macros" value=""/>
<property key="use-cci" value="false"/>
<property key="use-iar" value="false"/>
<property key="verbose" value="false"/>
<property key="warning-level" value="-3"/>
<property key="what-to-do" value="ignore"/>
</HI-TECH-COMP>
<HI-TECH-LINK>
<property key="additional-options-checksum" value=""/>
<property key="additional-options-code-offset" value=""/>
<property key="additional-options-command-line" value=""/>
<property key="additional-options-errata" value=""/>
<property key="additional-options-extend-address" value="false"/>
<property key="additional-options-trace-type" value=""/>
<property key="additional-options-use-response-files" value="false"/>
<property key="backup-reset-condition-flags" value="false"/>
<property key="calibrate-oscillator" value="false"/>
<property key="calibrate-oscillator-value" value="0x3400"/>
<property key="clear-bss" value="true"/>
<property key="code-model-external" value="wordwrite"/>
<property key="code-model-rom" value=""/>
<property key="create-html-files" value="false"/>
<property key="data-model-ram" value=""/>
<property key="data-model-size-of-double" value="32"/>
<property key="data-model-size-of-double-gcc" value="no-short-double"/>
<property key="data-model-size-of-float" value="32"/>
<property key="data-model-size-of-float-gcc" value="no-short-float"/>
<property key="display-class-usage" value="false"/>
<property key="display-hex-usage" value="false"/>
<property key="display-overall-usage" value="true"/>
<property key="display-psect-usage" value="false"/>
<property key="extra-lib-directories" value=""/>
<property key="fill-flash-options-addr" value=""/>
<property key="fill-flash-options-const" value=""/>
<property key="fill-flash-options-how" value="0"/>
<property key="fill-flash-options-inc-const" value="1"/>
<property key="fill-flash-options-increment" value=""/>
<property key="fill-flash-options-seq" value=""/>
<property key="fill-flash-options-what" value="0"/>
<property key="format-hex-file-for-download" value="false"/>
<property key="initialize-data" value="true"/>
<property key="input-libraries" value="libm"/>
<property key="keep-generated-startup.as" value="false"/>
<property key="link-in-c-library" value="true"/>
<property key="link-in-c-library-gcc" value=""/>
<property key="link-in-peripheral-library" value="false"/>
<property key="managed-stack" value="false"/>
<property key="opt-xc8-linker-file" value="false"/>
<property key="opt-xc8-linker-link_startup" value="false"/>
<property key="opt-xc8-linker-serial" value=""/>
<property key="program-the-device-with-default-config-words" value="false"/>
<property key="remove-unused-sections" value="true"/>
</HI-TECH-LINK>
<ICD3PlatformTool>
<property key="AutoSelectMemRanges" value="auto"/>
<property key="Freeze Peripherals" value="true"/>
<property key="SecureSegment.SegmentProgramming" value="FullChipProgramming"/>
<property key="ToolFirmwareFilePath"
value="Press to browse for a specific firmware version"/>
<property key="ToolFirmwareOption.UseLatestFirmware" value="true"/>
<property key="debugoptions.debug-startup" value="Use system settings"/>
<property key="debugoptions.reset-behaviour" value="Use system settings"/>
<property key="debugoptions.useswbreakpoints" value="false"/>
<property key="event.recorder.enabled" value="false"/>
<property key="event.recorder.scvd.files" value=""/>
<property key="hwtoolclock.frcindebug" value="false"/>
<property key="lastid" value=""/>
<property key="memories.aux" value="false"/>
<property key="memories.bootflash" value="false"/>
<property key="memories.configurationmemory" value="true"/>
<property key="memories.configurationmemory2" value="true"/>
<property key="memories.dataflash" value="true"/>
<property key="memories.eeprom" value="true"/>
<property key="memories.flashdata" value="true"/>
<property key="memories.id" value="true"/>
<property key="memories.instruction.ram" value="true"/>
<property key="memories.instruction.ram.ranges"
value="${memories.instruction.ram.ranges}"/>
<property key="memories.programmemory" value="true"/>
<property key="memories.programmemory.ranges" value="0-1ffff"/>
<property key="poweroptions.powerenable" value="false"/>
<property key="programoptions.donoteraseauxmem" value="false"/>
<property key="programoptions.eraseb4program" value="true"/>
<property key="programoptions.preservedataflash" value="false"/>
<property key="programoptions.preservedataflash.ranges" value=""/>
<property key="programoptions.preserveeeprom" value="false"/>
<property key="programoptions.preserveeeprom.ranges" value="0-3ff"/>
<property key="programoptions.preserveprogram.ranges" value=""/>
<property key="programoptions.preserveprogramrange" value="false"/>
<property key="programoptions.preserveuserid" value="false"/>
<property key="programoptions.programcalmem" value="false"/>
<property key="programoptions.programuserotp" value="false"/>
<property key="programoptions.testmodeentrymethod" value="VDDFirst"/>
<property key="programoptions.usehighvoltageonmclr" value="false"/>
<property key="programoptions.uselvpprogramming" value="false"/>
<property key="voltagevalue" value="3.25"/>
</ICD3PlatformTool>
<Simulator>
<property key="codecoverage.enabled" value="Disable"/>
<property key="codecoverage.enableoutputtofile" value="false"/>
Expand Down Expand Up @@ -619,14 +588,35 @@
<property key="warningmessagebreakoptions.warningmessages" value="holdstate"/>
</Simulator>
<Tool>
<property key="AutoSelectMemRanges" value="auto"/>
<property key="Freeze Peripherals" value="true"/>
<property key="SecureSegment.SegmentProgramming" value="FullChipProgramming"/>
<property key="ToolFirmwareFilePath"
value="Press to browse for a specific firmware version"/>
<property key="ToolFirmwareOption.UseLatestFirmware" value="true"/>
<property key="codecoverage.enabled" value="Disable"/>
<property key="codecoverage.enableoutputtofile" value="false"/>
<property key="codecoverage.outputfile" value=""/>
<property key="debugoptions.debug-startup" value="Use system settings"/>
<property key="debugoptions.reset-behaviour" value="Use system settings"/>
<property key="debugoptions.useswbreakpoints" value="false"/>
<property key="event.recorder.enabled" value="false"/>
<property key="event.recorder.scvd.files" value=""/>
<property key="hwtoolclock.frcindebug" value="false"/>
<property key="lastid" value=""/>
<property key="memories.aux" value="false"/>
<property key="memories.bootflash" value="false"/>
<property key="memories.configurationmemory" value="true"/>
<property key="memories.configurationmemory2" value="true"/>
<property key="memories.dataflash" value="true"/>
<property key="memories.eeprom" value="true"/>
<property key="memories.flashdata" value="true"/>
<property key="memories.id" value="true"/>
<property key="memories.instruction.ram" value="true"/>
<property key="memories.instruction.ram.ranges"
value="${memories.instruction.ram.ranges}"/>
<property key="memories.programmemory" value="true"/>
<property key="memories.programmemory.ranges" value="0-1ffff"/>
<property key="oscillator.auxfrequency" value="120"/>
<property key="oscillator.auxfrequencyunit" value="Mega"/>
<property key="oscillator.frequency" value="1"/>
Expand All @@ -645,6 +635,21 @@
<property key="periphComp4.gte" value="gt"/>
<property key="periphComp5.gte" value="gt"/>
<property key="periphComp6.gte" value="gt"/>
<property key="poweroptions.powerenable" value="false"/>
<property key="programoptions.donoteraseauxmem" value="false"/>
<property key="programoptions.eraseb4program" value="true"/>
<property key="programoptions.preservedataflash" value="false"/>
<property key="programoptions.preservedataflash.ranges" value=""/>
<property key="programoptions.preserveeeprom" value="false"/>
<property key="programoptions.preserveeeprom.ranges" value="0-3ff"/>
<property key="programoptions.preserveprogram.ranges" value=""/>
<property key="programoptions.preserveprogramrange" value="false"/>
<property key="programoptions.preserveuserid" value="false"/>
<property key="programoptions.programcalmem" value="false"/>
<property key="programoptions.programuserotp" value="false"/>
<property key="programoptions.testmodeentrymethod" value="VDDFirst"/>
<property key="programoptions.usehighvoltageonmclr" value="false"/>
<property key="programoptions.uselvpprogramming" value="false"/>
<property key="reset.scl" value="false"/>
<property key="reset.type" value="MCLR"/>
<property key="toolpack.updateoptions"
Expand Down Expand Up @@ -721,6 +726,7 @@
<property key="usartf1io.output" value="window"/>
<property key="usartf1io.outputfile" value=""/>
<property key="usartf1io.uartioenabled" value="false"/>
<property key="voltagevalue" value="3.25"/>
<property key="warningmessagebreakoptions.W0001_CORE_BITREV_MODULO_EN"
value="report"/>
<property key="warningmessagebreakoptions.W0002_CORE_SECURE_MEMORYACCESS"
Expand Down Expand Up @@ -1092,28 +1098,6 @@
value=""/>
<property key="warningmessagebreakoptions.warningmessages" value="holdstate"/>
</Tool>
<XC8-CO>
<property key="coverage-enable" value=""/>
<property key="stack-guidance" value="false"/>
</XC8-CO>
<XC8-config-global>
<property key="advanced-elf" value="true"/>
<property key="constdata-progmem" value="true"/>
<property key="gcc-opt-driver-new" value="true"/>
<property key="gcc-opt-std" value="-std=c99"/>
<property key="gcc-output-file-format" value="dwarf-3"/>
<property key="mapped-progmem" value="false"/>
<property key="omit-pack-options" value="false"/>
<property key="omit-pack-options-new" value="1"/>
<property key="output-file-format" value="-mcof,+elf"/>
<property key="smart-io-format" value=""/>
<property key="stack-size-high" value="auto"/>
<property key="stack-size-low" value="auto"/>
<property key="stack-size-main" value="auto"/>
<property key="stack-type" value="compiled"/>
<property key="user-pack-device-support" value=""/>
<property key="wpo-lto" value="false"/>
</XC8-config-global>
<pic-as-assembler>
<property key="fmax-errors" value="20"/>
<property key="list-custom-assembler-options" value=""/>
Expand All @@ -1134,14 +1118,15 @@
<property key="summary-file" value="false"/>
<property key="summary-hex" value="false"/>
<property key="summary-mem" value="true"/>
<property key="summary-psect" value="false"/>
<property key="summary-psect" value="true"/>
<property key="summary-sha1" value="false"/>
<property key="summary-sha256" value="false"/>
<property key="summary-xml" value="false"/>
<property key="summary-xmlfull" value="false"/>
<appendMe value="-Wa,-a -Wl,-Map=output.map"/>
</pic-as-global>
<pic-as-linker>
<property key="linker-callgraph" value="std"/>
<property key="linker-callgraph" value="full"/>
<property key="linker-checksum" value=""/>
<property key="linker-custom-options" value=""/>
<property key="linker-fill" value=""/>
Expand Down