Continue to Site

Welcome to our site!

Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

  • Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

Off to a rocky start with Swordfish Basic

Status
Not open for further replies.
I'm trying my hand at some SF Basic. I'll be using the internal oscillator and I found that it has to be set up before anything else executes, which makes since. I was building of some of the samples and info I found on the SF wiki to generate this code.

Code:
Device = 18F4550
Clock = 8
Config  
    osc = INTIO
    OSCCON = %01110010
End

// alias to port pin...
Dim LED As PORTD.0

// main program...
Low(LED)
Repeat                          
   Toggle (LED)
   DelayMS (500)
Until false

That's about as basic as it gets, but I get an error that reads:
Identifier not declared: osc
Also, if I remove the "END" I get an error for that, but looking at other codes I didn't think it was required.

What is weird is that I can compile this without a problem:
Code:
Device = 18F1220
Clock = 8
Config  
    osc = INTIO2
    OSCCON = %01110110
End


// alias to port pin...
Dim LED As PORTB.0

// main program...
Low(LED)
Repeat
   Toggle (LED)
   DelayMS (500)
Until false

Notice the only difference is that the bottom code is for the PIC18F1220 and it uses PORTB instead of PORTD because the 18F4550 listed in the first code has PORTD, but the 1220 does not. Also, I'm using "INTIO" instead of "INTIO2" in my first code because the 18F4550 doesn't have an INTIO1 and INTIO2, just INTIO.

Any idea why this is happening? This is what I dreaded. Being halfway proficient in ASM makes it really demoralizing when you can't even compile a hello world in your new language. LOL
 
Read my JPUG issues and the Junebug manual on my site for some simple examples. You still have to know the names of the CONFIG registers for the particular PIC you're using. I often use the pic_xxxx.inc file that's part of MPASM (it's a text file and has all the proper names) Swordfish will show you the valid names if you click on the PIC type (it appears after your source code includes the DEVICE = valid PIC statement)

Your problem is still the same no matter what language you use. You still have to use the right register names.
 
Last edited:
There a easy way to set your chip if you click on the left plane where it shows 18F4550 or what every chip you using a it will pop up the inc file for your chip which list all pin regs and configures for your chip. The 18f4550 needs
Code:
 Config FOSC= INTOSCIO_EC
 

Attachments

  • configures.JPG
    configures.JPG
    124.6 KB · Views: 205
Last edited:
Your code should be like this
Code:
Device = 18F4550
Clock = 8
Config FOSC= INTOSCIO_EC

   //// includes here 
// alias to port pin...
Dim LED As PORTB.0

// main program...
OSCCON = %01110110    //regs  configures here
Low(LED)
Repeat                          
   Toggle (LED)
   DelayMS (500)
Until false

end   // the end is at the end

Here a pdf I started it has all you need to get going swordfish getting started

I'm not done with the pdf I'm getting papers for EE engineer and haven't had time but it has what you need to get started.
 
Last edited:
Thanks for the help guys! I'm happy to say that I have an LED flashing on and off. It's not quite as exciting as when I first did this in assembly 6 months ago, but hey, it's a first step.

Thanks for that file Burt. Blueroom -- thanks for pointing me to your info.

I ended up with something very close to yours before I came by again and saw your code, although I disabled MCLR.

Next step is to try and get the LCD working. Any idea if the LCD module works with a 20x4?

EDIT: Answered my own question. The LCD module included in the compiler works like a champ. I still have a long way ahead of me but I'm pretty happy so far.
 
Last edited:
LCd is simple
Code:
Device = 18F4550
Clock = 8
Config FOSC= INTOSCIO_EC
// some LCD options...
#option LCD_DATA = PORTD.0
#option LCD_RS = PORTB.0
#option LCD_EN = PORTB.1

// import LCD library...
Include "LCD.bas" 
Include "utils.bas"
Include "INTOSC8"
// program start...
SetAllDigital
Cls
WriteAt(1,1,"Hello World")
Make a file and save as INTOSC8.bas save in your swordfish user library this
Code:
Module IntOSC8

OSCCON = %01110110

If you don't when using Internal Oscillator your code sometimes don't start up full speed till it loads code so all them Include come first. Can take time
 
I'll have to do that with the INTOSC.

I really regret not having started with high level like this a while back. I'd be good enough with it to to take on some beefy projects by now.

Can you guys give some advice on this:

Long story short, it uses different snippets of code from the samples along with a nested if statement to display a message, display a value from a pot, and give another message based on the value of the pot. It takes 1712 bytes of ROM and 127 bytes of RAM.

I haven't written this particular program in assembly, but I honestly believe I could have used less than a third of the RAM that Swordfish used.

Here's the prog: Please let me know what I'm doing that is burning up so much RAM.

Code:
Device = 18F4550
Clock = 8      
Config FOSC = INTOSCIO_EC

// some LCD options...
#option LCD_DATA = PORTD.4
#option LCD_RS = PORTE.0
#option LCD_EN = PORTE.1

// import LCD library...
Include "LCD.bas" 
Include "utils.bas"
Include "ADC.bas"
Include "convert.bas"

Function ADInAsVolt() As Word
   result = (ADC.Read(0) + 1) * 500 / 1024
End Function

// sampled AD value...
Dim ADVal As Word

OSCCON = %01110010
MCLRE (OFF) 

// initialise and clear LCD...
ADCON1 = $07       // PORTE as digital (LCD)
TRISA.0 = 1        // configure AN0 as an input 
ADCON1.7 = 1       // set analogue input on PORTA.0 
DelayMS (500)
LCD.Cls

// program start...
SetAllDigital
Cls
WriteAt(1,3,"Hello! Swordfish")
WriteAt(2,3,"Basic is running")
WriteAt(3,4,"like a champ!")

While true
   ADVal = ADInAsVolt
   LCD.MoveCursor (4,1)
   LCD.Write("Volts = ", DecToStr(ADVal / 100), ".", DecToStr(ADVal, 2), " ")
   if ADVAL >= 350 then
    Writeat(4,14,"High!  ")
        elseIf ADVAL < 350 AND ADval >= 150 Then
            WriteAt(4,14,"Medium!")
                ElseIf ADVAL <150 Then
                    WriteAt(4,14,"Low!   ")
                        Else
                            WriteAt(4,13,"       ")
   endif 
   DelayMS(250)
Wend

End
 
Last edited:
The joy of swordfish and modules the modules waste space. But they make for fast coding.

Thats not bad you still have a lot to use LOL

You may want to slow down or you'll be here asking why this don't work LOL the

OSCCON = %01110010 needs to be in a module Like I posted or it will give some big time headaches

And config go at the top config MCLRE = OFF

Device
clock
config
options
Include
function
dim
register
Then main code

There a lot of junk in the modules, thats not being used but it gets coded in when you build. I hand coded lcd code in basic and it took not much more then asm would. You can make better modules leave out the bloat.
 

Attachments

  • lot_touse.JPG
    lot_touse.JPG
    10.4 KB · Views: 172
Last edited:
This will give a ideal of what happening under the hood
Code:
 M3_U16H EQU 118
        ORG 0X00
        GOTO SBCDSTD
        ORG 0X08
SBDLYMS
        CLRF 5,0
SBDLYMS16
        MOVWF 4,0
        MOVLW 255
        ADDWF 4,1,0
        BTFSS 4056,0,0
        ADDWF 5,1,0
        NOP
        BTFSS 4056,0,0
        RETURN 0
        MOVLW 3
        MOVWF 1,0
        MOVLW 227
        RCALL SBDLYUS16
        BRA $ - 22
SBDLYUS
        CLRF 1,0
SBDLYUS16
        ADDLW 244
        MOVWF 0,0
        COMF 1,1,0
        MOVLW 254
        BTFSS 4056,0,0
        BRA SBDLYUSH
SBDLYUSLP
        ADDWF 0,1,0
        BTFSC 4056,0,0
        BRA SBDLYUSLP
SBDLYUSH
        ADDWF 0,1,0
        NOP
        INCFSZ 1,1,0
        BRA SBDLYUSLP
        NOP
        BTFSC 0,0,0
        BRA $ + 2
        BTFSC 0,0,0
        BRA $ + 2
        RETURN 0
SB_DIV_U_32X32
        CLRF 16,0
        CLRF 17,0
        CLRF 18,0
        CLRF 19,0
        CLRF 10,0
        CLRF 11,0
        CLRF 12,0
        CLRF 13,0
        MOVF 9,0,0
        IORWF 8,0,0
        IORWF 7,0,0
        IORWF 6,0,0
        BZ DIV_U_32X32_EXIT
        MOVLW 32
        MOVWF 4083
DIV_U_32X32_LOOP
        BCF 4056,0,0
        RLCF 0,1,0
        RLCF 1,1,0
        RLCF 2,1,0
        RLCF 3,1,0
        RLCF 10,1,0
        RLCF 11,1,0
        RLCF 12,1,0
        RLCF 13,1,0
        MOVF 9,0,0
        SUBWF 13,0,0
        BNZ $ + 18
        MOVF 8,0,0
        SUBWF 12,0,0
        BNZ $ + 12
        MOVF 7,0,0
        SUBWF 11,0,0
        BNZ $ + 6
        MOVF 6,0,0
        SUBWF 10,0,0
        BNC DIV_U_32X32_SKIP
        MOVF 6,0,0
        SUBWF 10,1,0
        MOVF 7,0,0
        BTFSS 4056,0,0
        INCFSZ 7,0,0
        SUBWF 11,1,0
        MOVF 8,0,0
        BTFSS 4056,0,0
        INCFSZ 8,0,0
        SUBWF 12,1,0
        MOVF 9,0,0
        BTFSS 4056,0,0
        INCFSZ 9,0,0
        SUBWF 13,1,0
        BSF 4056,0,0
DIV_U_32X32_SKIP
        RLCF 16,1,0
        RLCF 17,1,0
        RLCF 18,1,0
        RLCF 19,1,0
        DECFSZ 4083,1,0
        BRA DIV_U_32X32_LOOP
DIV_U_32X32_EXIT
        RETURN 0
SB_DVD16X16
        CLRF 7,0
        CLRF 6,0
SB_DVD16X162
        MOVLW 16
        MOVWF 16,0
SB_DVD16X16LP
        RLCF 1,0,0
        RLCF 6,1,0
        RLCF 7,1,0
        MOVF 4,0,0
        SUBWF 6,1,0
        MOVF 5,0,0
        BTFSS 4056,0,0
        INCFSZ 5,0,0
        SUBWF 7,1,0
        BC SB_DVD16X16LP2
        MOVF 4,0,0
        ADDWF 6,1,0
        MOVF 5,0,0
        BTFSC 4056,0,0
        INCFSZ 5,0,0
        ADDWF 7,1,0
        BCF 4056,0,0
SB_DVD16X16LP2
        RLCF 0,1,0
        RLCF 1,1,0
        DECFSZ 16,1,0
        BRA SB_DVD16X16LP
        MOVF 0,0,0
        RETURN 0
SB_MULT32X32
        MOVLW 32
        MOVWF 16,0
        CLRF 10,0
        CLRF 11,0
        CLRF 12,0
        CLRF 13,0
SB_MULT32X32LP
        BCF 4056,0,0
        BTFSS 0,0,0
        BRA SB_MULT32X32SK
        MOVF 6,0,0
        ADDWF 10,1,0
        MOVF 7,0,0
        BTFSC 4056,0,0
        INCFSZ 7,0,0
        ADDWF 11,1,0
        MOVF 8,0,0
        BTFSC 4056,0,0
        INCFSZ 8,0,0
        ADDWF 12,1,0
        MOVF 9,0,0
        BTFSC 4056,0,0
        INCFSZ 9,0,0
        ADDWF 13,1,0
SB_MULT32X32SK
        RRCF 13,1,0
        RRCF 12,1,0
        RRCF 11,1,0
        RRCF 10,1,0
        RRCF 3,1,0
        RRCF 2,1,0
        RRCF 1,1,0
        RRCF 0,1,0
        DECFSZ 16,1,0
        BRA SB_MULT32X32LP
        RETURN 0
SB_LOAD_MEMSTR
        CLRF 4088,0
SB_LOAD_MEMSTRL
        CLRF 4006,0
        BSF 4006,EEPGD,0
        TBLRD*+
        MOVF 4085,0
        BZ $ + 6
        MOVWF 4078,0
        BRA $ - 8
        RETURN 0
_DB_STRCONST_00
        DB 72,101,108,108,111,33
        DB 32,83,119,111,114,100
        DB 102,105,115,104,0
_DB_STRCONST_01
        DB 66,97,115,105,99,32
        DB 105,115,32,114,117,110
        DB 110,105,110,103,0
_DB_STRCONST_02
        DB 108,105,107,101,32,97
        DB 32,99,104,97,109,112
        DB 33,0
_DB_STRCONST_03
        DB 86,111,108,116,115,32
        DB 61,32,0
_DB_STRCONST_04
        DB 72,105,103,104,33,32
        DB 32,0
_DB_STRCONST_05
        DB 77,101,100,105,117,109
        DB 33,0
_DB_STRCONST_06
        DB 76,111,119,33,32,32
        DB 32,0
_DB_STRCONST_07
        DB 32,32,32,32,32,32
        DB 32,0
SBCDSTD
        CLRF EECON1,0
        BSF EECON1,EEPGD,0
        BRA MAIN
PROC_SETALLDIGITAL_0
?I000000_F004_000457_P000034 ; L#MK ADCON1 = $0F
        MOVLW 15
        MOVWF ADCON1,0
?I000001_F004_000458_P000034 ; L#MK CMCON = $07
        MOVLW 7
        MOVWF CMCON,0
?I000002_F004_000460_P000034 ; L#MK END SUB
        RETURN 0
PROC_SETDATA_0
?I000003_F002_000235_P000036 ; L#MK DATA = DATA AND $0F
        MOVLW 15
        ANDWF PORTD,0,0
        MOVWF LATD,0
?I000004_F002_000236_P000036 ; L#MK DATA = DATA OR (PDATA AND $F0)
        MOVLW 240
        ANDWF F0_U08,0,0
        CLRF F1_U16H,0
        MOVWF F1_U16,0
        MOVF PORTD,0,0
        IORWF F1_U16,0,0
        MOVWF LATD,0
?I000005_F002_000242_P000036 ; L#MK STROBEEN
        BSF LATE,1,0
   NOP
        BCF LATE,1,0
?I000006_F002_000243_P000036 ; L#MK CLRWDT
?I000007_F002_000244_P000036 ; L#MK END SUB
        RETURN 0
PROC_SETDDRAM_0
?I000008_F002_000256_P000037 ; L#MK RS = 0
        BCF LATE,0,0
?I000009_F002_000261_P000037 ; L#MK SETDATA(PADDR OR %10000000)
        MOVLW 128
        IORWF F3_U08,0,0
        MOVWF F0_U08,0
        RCALL PROC_SETDATA_0
?I000010_F002_000262_P000037 ; L#MK SETDATA(PADDR << 4)
        SWAPF F3_U08,0,0
        ANDLW 240
        MOVWF F0_U08,0
        RCALL PROC_SETDATA_0
?I000011_F002_000270_P000037 ; L#MK DELAYUS(DATAUS)
        MOVLW 50
        RCALL SBDLYUS
?I000012_F002_000272_P000037 ; L#MK CLRWDT
?I000013_F002_000273_P000037 ; L#MK END SUB
        RETURN 0
PROC_COMMAND_0
?I000014_F002_000285_P000038 ; L#MK RS = 0
        BCF LATE,0,0
?I000015_F002_000290_P000038 ; L#MK SETDATA(PCOMMAND)
        MOVFF F3_U08,F0_U08
        RCALL PROC_SETDATA_0
?I000016_F002_000291_P000038 ; L#MK SETDATA(PCOMMAND << 4)
        SWAPF F3_U08,0,0
        ANDLW 240
        MOVWF F0_U08,0
        RCALL PROC_SETDATA_0
?I000017_F002_000299_P000038 ; L#MK DELAYUS(COMMANDUS)
        MOVLW 7
        MOVWF SB_SV0H,0
        MOVLW 208
        RCALL SBDLYUS16
?I000018_F002_000301_P000038 ; L#MK CLRWDT
?I000019_F002_000302_P000038 ; L#MK END SUB
        RETURN 0
PROC_MOVECURSOR_0
?I000020_F002_000310_P000039 ; L#MK DEC(PCOL)
        DECF F5_U08,1,0
?I000021_F002_000311_P000039 ; L#MK SELECT PLINE
?I000022_F002_000312_P000039 ; L#MK CASE 1 : SETDDRAM(PCOL)
        DECFSZ F4_U08,0,0
        BRA FALSE_0
?I000023_F002_000312_P000039 ; L#MK CASE 1 : SETDDRAM(PCOL)
        MOVFF F5_U08,F3_U08
        RCALL PROC_SETDDRAM_0
        BRA ENDIF_0
FALSE_0
?I000024_F002_000313_P000039 ; L#MK CASE 2 : SETDDRAM($40 + PCOL)
        MOVLW 2
        CPFSEQ F4_U08
        BRA FALSE_1
?I000025_F002_000313_P000039 ; L#MK CASE 2 : SETDDRAM($40 + PCOL)
        MOVLW 64
        ADDWF F5_U08,0,0
        MOVWF F3_U08,0
        RCALL PROC_SETDDRAM_0
        BRA ENDIF_0
FALSE_1
?I000026_F002_000314_P000039 ; L#MK CASE 3 : SETDDRAM($14 + PCOL)
        MOVLW 3
        CPFSEQ F4_U08
        BRA FALSE_2
?I000027_F002_000314_P000039 ; L#MK CASE 3 : SETDDRAM($14 + PCOL)
        MOVLW 20
        ADDWF F5_U08,0,0
        MOVWF F3_U08,0
        RCALL PROC_SETDDRAM_0
        BRA ENDIF_0
FALSE_2
?I000028_F002_000315_P000039 ; L#MK CASE 4 : SETDDRAM($54 + PCOL)
        MOVLW 4
        CPFSEQ F4_U08
        BRA ENDIF_0
?I000029_F002_000315_P000039 ; L#MK CASE 4 : SETDDRAM($54 + PCOL)
        MOVLW 84
        ADDWF F5_U08,0,0
        MOVWF F3_U08,0
        RCALL PROC_SETDDRAM_0
ENDIF_0
?I000030_F002_000317_P000039 ; L#MK END SUB
        RETURN 0
PROC_WRITEITEM_0
?I000031_F002_000329_P000040 ; L#MK RS = 1
        BSF LATE,0,0
?I000032_F002_000334_P000040 ; L#MK SETDATA(PDATA)
        MOVFF F3_U08,F0_U08
        RCALL PROC_SETDATA_0
?I000033_F002_000335_P000040 ; L#MK SETDATA(PDATA << 4)
        SWAPF F3_U08,0,0
        ANDLW 240
        MOVWF F0_U08,0
        RCALL PROC_SETDATA_0
?I000034_F002_000343_P000040 ; L#MK DELAYUS(DATAUS)
        MOVLW 50
        RCALL SBDLYUS
?I000035_F002_000345_P000040 ; L#MK CLRWDT
?I000036_F002_000346_P000040 ; L#MK END SUB
        RETURN 0
PROC_OL_0_WRITEITEM_0
?I000037_F002_000356_P000041 ; L#MK FSR0 = ADDRESSOF(PTEXT)
        LFSR 0,F53_U136
?I000038_F002_000357_P000041 ; L#MK WHILE TEXT <> 0
WHILE_0
        MOVF INDF0,1,0
        BZ FALSE_3
?I000039_F002_000358_P000041 ; L#MK WRITEITEM(TEXTPTR)
        MOVFF POSTINC0,F3_U08
        RCALL PROC_WRITEITEM_0
        BRA WHILE_0
FALSE_3
?I000040_F002_000360_P000041 ; L#MK END SUB
        RETURN 0
PROC_MOVETO_0
?I000041_F002_000390_P000048 ; L#MK MOVECURSOR(FPOSY, FPOSX)
        MOVFF M1_U08,F4_U08
        MOVFF M0_U08,F5_U08
        BRA PROC_MOVECURSOR_0
PROC_SETLOCATIONX_0
?I000043_F002_000399_P000049 ; L#MK FPOSX = PX
        MOVFF F0_U08,M0_U08
?I000044_F002_000400_P000049 ; L#MK END SUB
        RETURN 0
PROC_SETLOCATIONY_0
?I000045_F002_000408_P000050 ; L#MK FPOSY = PY
        MOVFF F0_U08,M1_U08
?I000046_F002_000409_P000050 ; L#MK END SUB
        RETURN 0
PROC_CLS_0
?I000047_F002_000424_P000051 ; L#MK COMMAND(CMDCLEAR)
        MOVLW 1
        MOVWF F3_U08,0
        RCALL PROC_COMMAND_0
?I000048_F002_000425_P000051 ; L#MK DELAYMS(30)
        MOVLW 30
        BRA SBDLYMS
PROC_DOINITSEQUENCE_0
?I000050_F002_000434_P000052 ; L#MK SETDATA(PVALUE)
        MOVFF F3_U08,F0_U08
        RCALL PROC_SETDATA_0
?I000051_F002_000435_P000052 ; L#MK DELAYMS(5)
        MOVLW 5
        RCALL SBDLYMS
?I000052_F002_000436_P000052 ; L#MK SETDATA(PVALUE)
        MOVFF F3_U08,F0_U08
        RCALL PROC_SETDATA_0
?I000053_F002_000437_P000052 ; L#MK DELAYUS(160)
        MOVLW 160
        RCALL SBDLYUS
?I000054_F002_000438_P000052 ; L#MK SETDATA(PVALUE)
        MOVFF F3_U08,F0_U08
        RCALL PROC_SETDATA_0
?I000055_F002_000439_P000052 ; L#MK DELAYUS(160)
        MOVLW 160
        BRA SBDLYUS
PROC_INITIALIZE_0
?I000057_F002_000449_P000053 ; L#MK SETALLDIGITAL
        RCALL PROC_SETALLDIGITAL_0
?I000058_F002_000450_P000053 ; L#MK DELAYMS(LCDDELAY)
        MOVLW 100
        RCALL SBDLYMS
?I000059_F002_000458_P000053 ; L#MK LOW(RS)
        BCF LATE,0,0
        BCF TRISE,0,0
?I000060_F002_000459_P000053 ; L#MK LOW(EN)
        BCF LATE,1,0
        BCF TRISE,1,0
?I000061_F002_000460_P000053 ; L#MK DELAYMS(15)
        MOVLW 15
        RCALL SBDLYMS
?I000062_F002_000472_P000053 ; L#MK DATA = DATA AND $0F
        MOVLW 15
        ANDWF PORTD,0,0
        MOVWF LATD,0
?I000063_F002_000473_P000053 ; L#MK TRISDATA = TRISDATA AND $0F
        MOVLW 15
        ANDWF TRISD,1,0
?I000064_F002_000474_P000053 ; L#MK DOINITSEQUENCE($30)
        MOVLW 48
        MOVWF F3_U08,0
        RCALL PROC_DOINITSEQUENCE_0
?I000065_F002_000475_P000053 ; L#MK SETDATA($20)
        MOVLW 32
        MOVWF F0_U08,0
        RCALL PROC_SETDATA_0
?I000066_F002_000476_P000053 ; L#MK DELAYUS(160)
        MOVLW 160
        RCALL SBDLYUS
?I000067_F002_000484_P000053 ; L#MK COMMAND(%00101000) // DL = 0, N = 1, F = 0
        MOVLW 40
        MOVWF F3_U08,0
        RCALL PROC_COMMAND_0
?I000068_F002_000486_P000053 ; L#MK COMMAND(%00001000)    // D = 0, C = 0, B = 0
        MOVLW 8
        MOVWF F3_U08,0
        RCALL PROC_COMMAND_0
?I000069_F002_000487_P000053 ; L#MK COMMAND(%00000001)    // CLEAR
        MOVLW 1
        MOVWF F3_U08,0
        RCALL PROC_COMMAND_0
?I000070_F002_000488_P000053 ; L#MK COMMAND(%00000110)    // ID = 1, S = 0
        MOVLW 6
        MOVWF F3_U08,0
        RCALL PROC_COMMAND_0
?I000071_F002_000489_P000053 ; L#MK COMMAND(%00001100)    // D = 1, C = 0, B = 0
        MOVLW 12
        MOVWF F3_U08,0
        BRA PROC_COMMAND_0
PROC_READ_0
?I000073_F005_000195_P000057 ; L#MK CHS0 = PCHANNEL.0
        BTFSC F0_U01,0,0
        BSF ADCON0,2,0
        BTFSS F0_U01,0,0
        BCF ADCON0,2,0
?I000074_F005_000196_P000057 ; L#MK CHS1 = PCHANNEL.1
        BTFSC F0_U01,1,0
        BSF ADCON0,3,0
        BTFSS F0_U01,1,0
        BCF ADCON0,3,0
?I000075_F005_000197_P000057 ; L#MK CHS2 = PCHANNEL.2
        BTFSC F0_U01,2,0
        BSF ADCON0,4,0
        BTFSS F0_U01,2,0
        BCF ADCON0,4,0
?I000076_F005_000199_P000057 ; L#MK CHS3 = PCHANNEL.3
        BTFSC F0_U01,3,0
        BSF ADCON0,5,0
        BTFSS F0_U01,3,0
        BCF ADCON0,5,0
?I000077_F005_000203_P000057 ; L#MK IF FACQUISITIONTIME = 0 THEN
        TSTFSZ M2_U08
        BRA FALSE_7
?I000078_F005_000204_P000057 ; L#MK ENABLED = TRUE
        BSF ADCON0,0,0
?I000079_F005_000205_P000057 ; L#MK CONVERT = TRUE
        BSF ADCON0,1,0
        BRA ENDIF_6
FALSE_7
?I000080_F005_000207_P000057 ; L#MK ENABLED = TRUE
        BSF ADCON0,0,0
?I000081_F005_000208_P000057 ; L#MK DELAYUS(FACQUISITIONTIME)
        MOVF M2_U08,0
        RCALL SBDLYUS
?I000082_F005_000209_P000057 ; L#MK CONVERT = TRUE
        BSF ADCON0,1,0
ENDIF_6
?I000083_F005_000213_P000057 ; L#MK WHILE CONVERT
WHILE_1
        BTFSC ADCON0,1,0
        BRA WHILE_1
FALSE_8
?I000084_F005_000215_P000057 ; L#MK ENABLED = FALSE
        BCF ADCON0,0,0
?I000085_F005_000216_P000057 ; L#MK RESULT = ADRESULT
        MOVFF _ADRESL#M2_U16H,F1_U16H
        MOVFF _ADRESL#M2_U16,F1_U16
?I000086_F005_000217_P000057 ; L#MK END FUNCTION
        RETURN 0
PROC_DIGITSTOSTR_0
?I000087_F006_000040_P000095 ; L#MK WHILE PINDEX > 0
WHILE_2
        MOVF F0_U08,1,0
        BZ FALSE_4
?I000088_F006_000041_P000095 ; L#MK FTEXTIN = FDIGITSOUT
        MOVFF POSTDEC1,POSTINC0
?I000089_F006_000042_P000095 ; L#MK DEC(PINDEX)
        DECF F0_U08,1,0
        BRA WHILE_2
FALSE_4
?I000090_F006_000044_P000095 ; L#MK END SUB
        RETURN 0
PROC_DEC16TOSTR_0
?I000091_F006_000077_P000097 ; L#MK FDIGITSADDRESS = @DIGITS
        LFSR 1,F4_U264
?I000092_F006_000078_P000097 ; L#MK INDEX = 0
        CLRF F37_U08,0
REPEAT_0
?I000093_F006_000080_P000097 ; L#MK NUMBER = PVALUE MOD PBASE
        MOVFF F1_U16H,SB_SV0H
        MOVFF F1_U16,SB_SV0
        CLRF SB_SV1H,0
        MOVFF F3_U08,SB_SV1
        RCALL SB_DVD16X16
        MOVFF SB_SV2,F38_U08
?I000094_F006_000081_P000097 ; L#MK IF NUMBER > 9 THEN
        MOVLW 9
        CPFSGT F38_U08
        BRA ENDIF_1
?I000095_F006_000082_P000097 ; L#MK INC(NUMBER, 7)
        MOVLW 7
        ADDWF F38_U08,1,0
ENDIF_1
?I000096_F006_000084_P000097 ; L#MK FDIGITSIN = NUMBER + 48
        MOVLW 48
        ADDWF F38_U08,0,0
        MOVWF PREINC1,0
?I000097_F006_000085_P000097 ; L#MK PVALUE = PVALUE / PBASE
        MOVFF F1_U16H,SB_SV0H
        MOVFF F1_U16,SB_SV0
        CLRF SB_SV1H,0
        MOVFF F3_U08,SB_SV1
        RCALL SB_DVD16X16
        MOVWF F1_U16,0
        MOVFF SB_SV0H,F1_U16H
?I000098_F006_000086_P000097 ; L#MK INC(INDEX)
        INCF F37_U08,1,0
?I000099_F006_000087_P000097 ; L#MK UNTIL PVALUE = 0
        MOVF F1_U16H,0,0
        IORWF F1_U16,0,0
        BNZ REPEAT_0
?I000100_F006_000088_P000097 ; L#MK DIGITSTOSTR(INDEX)
        MOVFF F37_U08,F0_U08
        RCALL PROC_DIGITSTOSTR_0
?I000101_F006_000089_P000097 ; L#MK FTEXTIN = NULL
        CLRF POSTINC0,0
?I000102_F006_000090_P000097 ; L#MK END SUB
        RETURN 0
PROC_DEC16TOSTRFORMAT_0
?I000103_F006_000163_P000100 ; L#MK FIRSTPASS = TRUE
        BSF F7_U01,0,0
?I000104_F006_000164_P000100 ; L#MK IF PPAD > PMAX THEN
        MOVF F3_U08,0,0
        CPFSLT F6_U08
        BRA ENDIF_2
?I000105_F006_000165_P000100 ; L#MK PPAD = PMAX
        MOVFF F6_U08,F3_U08
ENDIF_2
?I000106_F006_000168_P000100 ; L#MK INC(FTEXTADDRESS, PPAD)
        MOVF F3_U08,0,0
        ADDWF _FSR0L#M3_U16,1,0
        MOVLW 0
        ADDWFC _FSR0L#M3_U16H,1,0
?I000107_F006_000169_P000100 ; L#MK TEXTPTR = NULL
        CLRF POSTDEC0,0
?I000108_F006_000170_P000100 ; L#MK WHILE PPAD > 0
WHILE_3
        MOVF F3_U08,1,0
        BZ FALSE_5
?I000109_F006_000171_P000100 ; L#MK IF PVALUE = 0 THEN
        MOVF F0_U16H,0,0
        IORWF F0_U16,0,0
        BNZ FALSE_6
?I000110_F006_000172_P000100 ; L#MK IF FIRSTPASS THEN
        BTFSS F7_U01,0,0
        BRA ENDIF_4
?I000111_F006_000173_P000100 ; L#MK PSIGNCHAR = "0"
        MOVLW 48
        MOVWF F5_U08,0
ENDIF_4
?I000112_F006_000175_P000100 ; L#MK TEXTPTR = PSIGNCHAR
        MOVFF F5_U08,POSTDEC0
?I000113_F006_000176_P000100 ; L#MK PSIGNCHAR = PPADCHAR
        MOVFF F4_U08,F5_U08
        BRA ENDIF_3
FALSE_6
?I000114_F006_000178_P000100 ; L#MK NUMBER = PVALUE MOD PBASE
        MOVFF F0_U16H,SB_SV0H
        MOVFF F0_U16,SB_SV0
        CLRF SB_SV1H,0
        MOVFF F2_U08,SB_SV1
        RCALL SB_DVD16X16
        MOVFF SB_SV2,F8_U08
?I000115_F006_000179_P000100 ; L#MK IF NUMBER > 9 THEN
        MOVLW 9
        CPFSGT F8_U08
        BRA ENDIF_5
?I000116_F006_000180_P000100 ; L#MK INC(NUMBER, 7)
        MOVLW 7
        ADDWF F8_U08,1,0
ENDIF_5
?I000117_F006_000182_P000100 ; L#MK TEXTPTR = NUMBER + 48
        MOVLW 48
        ADDWF F8_U08,0,0
        MOVWF POSTDEC0,0
?I000118_F006_000183_P000100 ; L#MK PVALUE = PVALUE / PBASE
        MOVFF F0_U16H,SB_SV0H
        MOVFF F0_U16,SB_SV0
        CLRF SB_SV1H,0
        MOVFF F2_U08,SB_SV1
        RCALL SB_DVD16X16
        MOVWF F0_U16,0
        MOVFF SB_SV0H,F0_U16H
ENDIF_3
?I000119_F006_000185_P000100 ; L#MK DEC(PPAD)
        DECF F3_U08,1,0
?I000120_F006_000186_P000100 ; L#MK FIRSTPASS = FALSE
        BCF F7_U01,0,0
        BRA WHILE_3
FALSE_5
?I000121_F006_000188_P000100 ; L#MK END SUB
        RETURN 0
PROC_OL_5_DECTOSTR_0
?I000122_F006_000446_P000114 ; L#MK FTEXTADDRESS = @RESULT
        LFSR 0,F43_U48
?I000123_F006_000447_P000114 ; L#MK DEC16TOSTR(PVALUE,10)
        MOVFF F41_U16H,F1_U16H
        MOVFF F41_U16,F1_U16
        MOVLW 10
        MOVWF F3_U08,0
        BRA PROC_DEC16TOSTR_0
PROC_OL_6_DECTOSTR_0
?I000125_F006_000459_P000115 ; L#MK FTEXTADDRESS = @RESULT
        LFSR 0,F13_U136
?I000126_F006_000460_P000115 ; L#MK DEC16TOSTRFORMAT(PVALUE, 10, PPAD, PPADCHAR, PPADCHAR)
        MOVLW 16
        MOVWF F6_U08,0
        MOVFF F9_U16H,F0_U16H
        MOVFF F9_U16,F0_U16
        MOVLW 10
        MOVWF F2_U08,0
        MOVFF F11_U08,F3_U08
        MOVFF F12_U08,F4_U08
        MOVFF F12_U08,F5_U08
        BRA PROC_DEC16TOSTRFORMAT_0
PROC_ADINASVOLT_0
?I000128_F000_000017_P000139 ; L#MK RESULT = (ADC.READ(0) + 1) * 500 / 1024
        CLRF F0_U08,0
        RCALL PROC_READ_0
        INCF F1_U16,0,0
        MOVWF F5_U32,0
        MOVLW 0
        ADDWFC F1_U16H,0,0
        MOVWF F5_U32H,0
        MOVLW 0
        CLRF F5_U32HH,0
        ADDWFC F5_U32HH,1,0
        CLRF F5_U32HHH,0
        ADDWFC F5_U32HHH,1,0
        MOVFF F5_U32HHH,SB_SV0HHH
        MOVFF F5_U32HH,SB_SV0HH
        MOVFF F5_U32H,SB_SV0H
        MOVFF F5_U32,SB_SV0
        CLRF SB_SV2HHH,0
        CLRF SB_SV2HH,0
        MOVLW 1
        MOVWF SB_SV2H,0
        MOVLW 244
        MOVWF SB_SV2,0
        RCALL SB_MULT32X32
        MOVFF SB_SV0HHH,F9_U32HHH
        MOVFF SB_SV0HH,F9_U32HH
        MOVFF SB_SV0H,F9_U32H
        MOVFF SB_SV0,F9_U32
        MOVFF F9_U32HHH,SB_SV0HHH
        MOVFF F9_U32HH,SB_SV0HH
        MOVFF F9_U32H,SB_SV0H
        MOVFF F9_U32,SB_SV0
        CLRF SB_SV2HHH,0
        CLRF SB_SV2HH,0
        MOVLW 4
        MOVWF SB_SV2H,0
        CLRF SB_SV2,0
        CALL SB_DIV_U_32X32
        MOVFF SB_SV5H,F3_U16H
        MOVFF SB_SV5,F3_U16
 
And this can't post it all lol

Code:
?I000129_F000_000018_P000139 ; L#MK END FUNCTION
        RETURN 0
MAIN
?I000130_F002_000493_M000002 ; L#MK INITIALIZE
        RCALL PROC_INITIALIZE_0
?I000131_F005_000296_M000005 ; L#MK RIGHTJUSTIFY = TRUE
        BSF ADCON2,7,0
?I000132_F005_000297_M000005 ; L#MK FACQUISITIONTIME = 20
        MOVLW 20
        MOVWF M2_U08
?I000133_F000_000023_M000000 ; L#MK OSCCON = %01110010
        MOVLW 114
        MOVWF OSCCON,0
?I000134_F000_000027_M000000 ; L#MK ADCON1 = $07       // PORTE AS DIGITAL (LCD)
        MOVLW 7
        MOVWF ADCON1,0
?I000135_F000_000028_M000000 ; L#MK TRISA.0 = 1        // CONFIGURE AN0 AS AN INPUT
        BSF TRISA,0,0
?I000136_F000_000029_M000000 ; L#MK ADCON1.7 = 1       // SET ANALOGUE INPUT ON PORTA.0
        BSF ADCON1,7,0
?I000137_F000_000030_M000000 ; L#MK DELAYMS (500)
        MOVLW 1
        MOVWF SB_SV1H,0
        MOVLW 244
        CALL SBDLYMS16
?I000138_F000_000031_M000000 ; L#MK LCD.CLS
        RCALL PROC_CLS_0
?I000139_F000_000034_M000000 ; L#MK SETALLDIGITAL
        RCALL PROC_SETALLDIGITAL_0
?I000140_F000_000035_M000000 ; L#MK CLS
        RCALL PROC_CLS_0
?I000141_F000_000036_M000000 ; L#MK WRITEAT(1,3,"HELLO! SWORDFISH")
        MOVLW 1
        MOVWF F0_U08,0
        RCALL PROC_SETLOCATIONY_0
?I000142_F000_000036_M000000 ; L#MK WRITEAT(1,3,"HELLO! SWORDFISH")
        MOVLW 3
        MOVWF F0_U08,0
        RCALL PROC_SETLOCATIONX_0
?I000143_F000_000036_M000000 ; L#MK WRITEAT(1,3,"HELLO! SWORDFISH")
        RCALL PROC_MOVETO_0
?I000144_F000_000036_M000000 ; L#MK WRITEAT(1,3,"HELLO! SWORDFISH")
        LFSR 0,F53_U136
        MOVLW ((_DB_STRCONST_00 >> 8) & 255)
        MOVWF TBLPTRLH,0
        MOVLW (_DB_STRCONST_00 & 255)
        MOVWF TBLPTRL,0
        RCALL SB_LOAD_MEMSTR
        CLRF INDF0,0
        RCALL PROC_OL_0_WRITEITEM_0
?I000145_F000_000037_M000000 ; L#MK WRITEAT(2,3,"BASIC IS RUNNING")
        MOVLW 2
        MOVWF F0_U08,0
        RCALL PROC_SETLOCATIONY_0
?I000146_F000_000037_M000000 ; L#MK WRITEAT(2,3,"BASIC IS RUNNING")
        MOVLW 3
        MOVWF F0_U08,0
        RCALL PROC_SETLOCATIONX_0
?I000147_F000_000037_M000000 ; L#MK WRITEAT(2,3,"BASIC IS RUNNING")
        RCALL PROC_MOVETO_0
?I000148_F000_000037_M000000 ; L#MK WRITEAT(2,3,"BASIC IS RUNNING")
        LFSR 0,F53_U136
        MOVLW ((_DB_STRCONST_01 >> 8) & 255)
        MOVWF TBLPTRLH,0
        MOVLW (_DB_STRCONST_01 & 255)
        MOVWF TBLPTRL,0
        RCALL SB_LOAD_MEMSTR
        CLRF INDF0,0
        RCALL PROC_OL_0_WRITEITEM_0
?I000149_F000_000038_M000000 ; L#MK WRITEAT(3,4,"LIKE A CHAMP!")
        MOVLW 3
        MOVWF F0_U08,0
        RCALL PROC_SETLOCATIONY_0
?I000150_F000_000038_M000000 ; L#MK WRITEAT(3,4,"LIKE A CHAMP!")
        MOVLW 4
        MOVWF F0_U08,0
        RCALL PROC_SETLOCATIONX_0
?I000151_F000_000038_M000000 ; L#MK WRITEAT(3,4,"LIKE A CHAMP!")
        RCALL PROC_MOVETO_0
?I000152_F000_000038_M000000 ; L#MK WRITEAT(3,4,"LIKE A CHAMP!")
        LFSR 0,F53_U136
        MOVLW ((_DB_STRCONST_02 >> 8) & 255)
        MOVWF TBLPTRLH,0
        MOVLW (_DB_STRCONST_02 & 255)
        MOVWF TBLPTRL,0
        RCALL SB_LOAD_MEMSTR
        CLRF INDF0,0
        RCALL PROC_OL_0_WRITEITEM_0
?I000153_F000_000040_M000000 ; L#MK WHILE TRUE
WHILE_4
?I000154_F000_000041_M000000 ; L#MK ADVAL = ADINASVOLT
        RCALL PROC_ADINASVOLT_0
        MOVFF F3_U16H,M3_U16H
        MOVFF F3_U16,M3_U16
?I000155_F000_000042_M000000 ; L#MK LCD.MOVECURSOR (4,1)
        MOVLW 4
        MOVWF F4_U08,0
        MOVLW 1
        MOVWF F5_U08,0
        RCALL PROC_MOVECURSOR_0
?I000156_F000_000043_M000000 ; L#MK LCD.WRITE("VOLTS = ", DECTOSTR(ADVAL / 100), ".", DECTOSTR(A...
        LFSR 0,F53_U136
        MOVLW ((_DB_STRCONST_03 >> 8) & 255)
        MOVWF TBLPTRLH,0
        MOVLW (_DB_STRCONST_03 & 255)
        MOVWF TBLPTRL,0
        CALL SB_LOAD_MEMSTR
        CLRF INDF0,0
        RCALL PROC_OL_0_WRITEITEM_0
?I000157_F000_000043_M000000 ; L#MK LCD.WRITE("VOLTS = ", DECTOSTR(ADVAL / 100), ".", DECTOSTR(A...
        MOVLW 78
        MOVWF W0_ADR,0
        CLRF W0_ADRH
        MOVFF M3_U16H,SB_SV0H
        MOVFF M3_U16,SB_SV0
        MOVLW 100
        MOVWF SB_SV1,0
        CLRF SB_SV1H,0
        CALL SB_DVD16X16
        MOVWF F41_U16,0
        MOVFF SB_SV0H,F41_U16H
        RCALL PROC_OL_5_DECTOSTR_0
        MOVLW 68
        MOVWF W2_ADR
        CLRF W2_ADRH
        MOVFF W0_ADRH,A0H
        MOVFF W0_ADR,A0
        MOVFF W2_ADRH,A1H
        MOVFF W2_ADR,A1
        MOVF POSTINC1,0,0
        BZ $ + 6
        MOVWF POSTINC0,0
        BRA $ - 6
        CLRF INDF0,0
        RCALL PROC_OL_0_WRITEITEM_0
?I000158_F000_000043_M000000 ; L#MK LCD.WRITE("VOLTS = ", DECTOSTR(ADVAL / 100), ".", DECTOSTR(A...
        MOVLW 46
        MOVWF F3_U08,0
        RCALL PROC_WRITEITEM_0
?I000159_F000_000043_M000000 ; L#MK LCD.WRITE("VOLTS = ", DECTOSTR(ADVAL / 100), ".", DECTOSTR(A...
        MOVLW 78
        MOVWF W0_ADR,0
        CLRF W0_ADRH
        MOVLW 48
        MOVWF F12_U08,0
        MOVFF M3_U16H,F9_U16H
        MOVFF M3_U16,F9_U16
        MOVLW 2
        MOVWF F11_U08,0
        RCALL PROC_OL_6_DECTOSTR_0
        MOVLW 38
        MOVWF W2_ADR
        CLRF W2_ADRH
        MOVFF W0_ADRH,A0H
        MOVFF W0_ADR,A0
        MOVFF W2_ADRH,A1H
        MOVFF W2_ADR,A1
        MOVF POSTINC1,0,0
        BZ $ + 6
        MOVWF POSTINC0,0
        BRA $ - 6
        CLRF INDF0,0
        RCALL PROC_OL_0_WRITEITEM_0
?I000160_F000_000043_M000000 ; L#MK LCD.WRITE("VOLTS = ", DECTOSTR(ADVAL / 100), ".", DECTOSTR(A...
        MOVLW 32
        MOVWF F3_U08,0
        RCALL PROC_WRITEITEM_0
?I000161_F000_000044_M000000 ; L#MK IF ADVAL >= 350 THEN
        MOVLW 94
        SUBWF M3_U16,0
        MOVLW 1
        SUBWFB M3_U16H,0
        BNC FALSE_10
?I000162_F000_000045_M000000 ; L#MK WRITEAT(4,14,"HIGH!  ")
        MOVLW 4
        MOVWF F0_U08,0
        RCALL PROC_SETLOCATIONY_0
?I000163_F000_000045_M000000 ; L#MK WRITEAT(4,14,"HIGH!  ")
        MOVLW 14
        MOVWF F0_U08,0
        RCALL PROC_SETLOCATIONX_0
?I000164_F000_000045_M000000 ; L#MK WRITEAT(4,14,"HIGH!  ")
        RCALL PROC_MOVETO_0
?I000165_F000_000045_M000000 ; L#MK WRITEAT(4,14,"HIGH!  ")
        LFSR 0,F53_U136
        MOVLW ((_DB_STRCONST_04 >> 8) & 255)
        MOVWF TBLPTRLH,0
        MOVLW (_DB_STRCONST_04 & 255)
        MOVWF TBLPTRL,0
        CALL SB_LOAD_MEMSTR
        CLRF INDF0,0
        RCALL PROC_OL_0_WRITEITEM_0
        BRA ENDIF_7
FALSE_10
?I000166_F000_000046_M000000 ; L#MK ELSEIF ADVAL < 350 AND ADVAL >= 150 THEN
        MOVLW 94
        SUBWF M3_U16,0
        MOVLW 1
        SUBWFB M3_U16H,0
        BC FALSE_11
        MOVF M3_U16H,1
        BNZ SBCPLBL6
        MOVLW 149
        CPFSGT M3_U16
        BRA FALSE_11
SBCPLBL6
?I000167_F000_000047_M000000 ; L#MK WRITEAT(4,14,"MEDIUM!")
        MOVLW 4
        MOVWF F0_U08,0
        RCALL PROC_SETLOCATIONY_0
?I000168_F000_000047_M000000 ; L#MK WRITEAT(4,14,"MEDIUM!")
        MOVLW 14
        MOVWF F0_U08,0
        RCALL PROC_SETLOCATIONX_0
?I000169_F000_000047_M000000 ; L#MK WRITEAT(4,14,"MEDIUM!")
        RCALL PROC_MOVETO_0
?I000170_F000_000047_M000000 ; L#MK WRITEAT(4,14,"MEDIUM!")
        LFSR 0,F53_U136
        MOVLW ((_DB_STRCONST_05 >> 8) & 255)
        MOVWF TBLPTRLH,0
        MOVLW (_DB_STRCONST_05 & 255)
        MOVWF TBLPTRL,0
        CALL SB_LOAD_MEMSTR
        CLRF INDF0,0
        RCALL PROC_OL_0_WRITEITEM_0
        BRA ENDIF_7
FALSE_11
?I000171_F000_000048_M000000 ; L#MK ELSEIF ADVAL <150 THEN
        MOVF M3_U16H,1
        BNZ FALSE_12
        MOVLW 150
        CPFSLT M3_U16
        BRA FALSE_12
?I000172_F000_000049_M000000 ; L#MK WRITEAT(4,14,"LOW!   ")
        MOVLW 4
        MOVWF F0_U08,0
        RCALL PROC_SETLOCATIONY_0
?I000173_F000_000049_M000000 ; L#MK WRITEAT(4,14,"LOW!   ")
        MOVLW 14
        MOVWF F0_U08,0
        RCALL PROC_SETLOCATIONX_0
?I000174_F000_000049_M000000 ; L#MK WRITEAT(4,14,"LOW!   ")
        RCALL PROC_MOVETO_0
?I000175_F000_000049_M000000 ; L#MK WRITEAT(4,14,"LOW!   ")
        LFSR 0,F53_U136
        MOVLW ((_DB_STRCONST_06 >> 8) & 255)
        MOVWF TBLPTRLH,0
        MOVLW (_DB_STRCONST_06 & 255)
        MOVWF TBLPTRL,0
        CALL SB_LOAD_MEMSTR
        CLRF INDF0,0
        CALL PROC_OL_0_WRITEITEM_0
        BRA ENDIF_7
FALSE_12
?I000176_F000_000051_M000000 ; L#MK WRITEAT(4,13,"       ")
        MOVLW 4
        MOVWF F0_U08,0
        RCALL PROC_SETLOCATIONY_0
?I000177_F000_000051_M000000 ; L#MK WRITEAT(4,13,"       ")
        MOVLW 13
        MOVWF F0_U08,0
        RCALL PROC_SETLOCATIONX_0
?I000178_F000_000051_M000000 ; L#MK WRITEAT(4,13,"       ")
        CALL PROC_MOVETO_0
?I000179_F000_000051_M000000 ; L#MK WRITEAT(4,13,"       ")
        LFSR 0,F53_U136
        MOVLW ((_DB_STRCONST_07 >> 8) & 255)
        MOVWF TBLPTRLH,0
        MOVLW (_DB_STRCONST_07 & 255)
        MOVWF TBLPTRL,0
        CALL SB_LOAD_MEMSTR
        CLRF INDF0,0
        CALL PROC_OL_0_WRITEITEM_0
ENDIF_7
?I000180_F000_000053_M000000 ; L#MK DELAYMS(250)
        MOVLW 250
        CALL SBDLYMS
        BRA WHILE_4
?I000181_END; L#MK
 
Last edited:
Assembly is invaluable and gives you an excellent understanding of how the CPU thinks. I can program in assembly but I wouldn't tackle a big complex program written in it unless I had to.
 
When you can write some "if then and for next repeat until " and do what took a page of asm. It makes going back hard LOL
 
After the recent discussion about Burts INTOSC8.bas module, I thought it would be worth talking about a more extended version which you may find handy with your venture with SF.

The Swordfish User Module Pack includes several useful modules created/maintained by the DD/SFB community, one of them is a variant of the "INTOSC8", namely "InternalOscillator.bas".

The InternalOscillator.bas module will configure the internal oscillator based on the defined clock speed. It simplifies the whole process, and also includes support for very low/fast speeds (such as with PLL enabled). Support speeds are those available between 31Khz to 64Mhz.

For example:

Code:
Device = 18F4550
Clock = 8

Include "InternalOscillator.bas"

// now configured to operate at 8Mhz with the internal oscillator!
Code:
Device = 18F4550
Clock = 0.031

Include "InternalOscillator.bas"

// now configured to operate at 31Khz with the internal oscillator!
Check out the module notes for more information on other devices supported, and you can always update/request for additional device support!
 
Last edited:
After the recent discussion about Burts INTOSC8.bas module
That not my naming it was for Mrdeb And people that think there only one way of doing things. There a lot of good help for swordfish at gramo site**broken link removed**

Here some Ir receiver code you may want to look at.
Code:
Include "Utils.bas"
Include "INTOSC8.bas" 
 

Dim leds As PORTB    //renames portb
Dim ledsTR As TRISB  // renames trisb
Dim IR_mod As PORTA.0  //pin the IR module on
Dim i As Byte
Dim IR_cmd As Byte
Dim loop As Byte
leds = 0           //sets portb low
ledsTR = 0        // makes portb all input
SetAllDigital
ADCON1=$7 
Input (IR_mod)
IR_cmd = 0
While true
start:

While (IR_mod = 1)   //loop while high
    i = 0
Wend

While (IR_mod = 0)   //loop while low
    i = i + 1
    DelayUS (200)
Wend
    If i <= 10 GoTo start     //if to short goto start
    If i >= 14 GoTo start     //if to long goto start
    i = 0                     // reset count
    loop = 0
        For loop = 0 To 7 
            IR_cmd = IR_cmd >>1        // this gets the 0 bits
                While (IR_mod = 1)
                    i = 0
                Wend
                While (IR_mod = 0)
                    i = i + 1
                    DelayUS (200)
                Wend
            If (i >= 6) Then 
                IR_cmd = (IR_cmd Or $40) //this gets the 1 bits
            End If 
        Next        
    leds = IR_cmd   // this is just a test that outputs the binary 
                    // value to leds on portb
Wend
 
Last edited:
Does the module check for out of spec frequencies. The max clock for the 4550 is 48MHz (12MIPs)
Hi Bill,

The devices that are supported should validate the clock speeds and produce errors if something is out of spec. Should being the key word!

As always, changes + suggestions are welcomed, it only makes it easier for everyone
 
Last edited:
Does the module check for out of spec frequencies. The max clock for the 4550 is 48MHz (12MIPs)

It will not set PLL on a 18f4550

Code:
#elseif _clock = 16 And _device in (18F2420, 18F2520, 18F2620, 18F4420, 18F4520, 18F4620)

    OSCCON = $6C                                'Set internal oscillator to 4MHz
    OSCTUNE.6 = 1                               'Enables PLL
    
#elseif _clock = 32 And _device in (18F2420, 18F2520, 18F2620, 18F4420, 18F4520, 18F4620)

    OSCCON = $7C                                'Set internal oscillator to 8MHz
    OSCTUNE.6 = 1                               'Enables PLL
    
#else

    #error "Can not configure OSCCON for chosen clock speed" 
    
#endif

But it is easy to add to it Andy0 did i nice Job with it.
 
Last edited:
You guys have given me a great deal of help here. Thanks for that.
Burt: On your IR code, I am curious on something...
I'm sure it's just my ignorance of the language, but how does the actual received value actually make it to the LED Port? It seems to me that the value is never actually passed to "IR_cmd". I see it getting shifted right by one (I think thats what IR_cmd = IR_cmd >>1 is doing) in the for loop after the "start" pulse is confirmed, but if it's initialized to 0 aren't you just shifting 0s? I'm missing something here.

As to the PLL: I'm not intimately familiar with the '4550, but I don't think the PLL is available to the internal oscillator.
 
Status
Not open for further replies.

Latest threads

New Articles From Microcontroller Tips

Back
Top