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
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
Config FOSC= INTOSCIO_EC
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
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")
Module IntOSC8
OSCCON = %01110110
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
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
?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
Device = 18F4550
Clock = 8
Include "InternalOscillator.bas"
// now configured to operate at 8Mhz with the internal oscillator!
Device = 18F4550
Clock = 0.031
Include "InternalOscillator.bas"
// now configured to operate at 31Khz with the internal oscillator!
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**After the recent discussion about Burts INTOSC8.bas module
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
Hi Bill,Does the module check for out of spec frequencies. The max clock for the 4550 is 48MHz (12MIPs)
Does the module check for out of spec frequencies. The max clock for the 4550 is 48MHz (12MIPs)
#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
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?