help needed

General discussion on mikroElektronika website & forums.
Post Reply
Author
Message
james
Posts: 4
Joined: 02 Jan 2006 19:14

help needed

#1 Post by james » 26 Apr 2006 13:01

please i need help from members to help convert this source code to mikrobasic.it was compile in picbasic..
i will be grateful if my request is granted.

PIC 16F877A
FREQ 20
OSCILLATOR CRYSTAL
'The fastest we can transfer data at is 9600bps, so we need to fool the PIC to send data faster.
'We will do this by saying that we have a 10MHz oscillator, but in fact we are using a 20MHz
'oscillator. By doing this, everything will run twice as fast, therefore, 9600*2=19200
DEFINE OSC 10
INCLUDE "modedefs.bas"
'
TRISB = 0
TRISC = 0
'
TRISA.5 = 0 : TRISA.4 = 1 : TRISA.3 = 0 : TRISA.2 = 0 : TRISA.1 = 0 : TRISA.0 = 0
'
POWER var PORTA.5
SERIALIN var PORTA.4
CTS var PORTA.3
databits var PORTA.2
addsbits var PORTA.1
modsbits var PORTA.0
'
Addss VAR BYTE[8]
Mods VAR BYTE[8]
Datas var byte[64]
loops con 1
columns con 63
module con 8
EOM CON ""
'
character_segment VAR BYTE
column_select VAR BYTE
module_select VAR BYTE
'
i VAR BYTE
iTMP var byte
char var byte
charTMP var byte
ColumnAddress VAR BYTE
LoopDisplay var byte
char2disp var byte
NEWcharflag var byte
message var byte
displayme var word
'
'
POWER = 1
pause 5
POWER = 0
'
'set all latches to blank state, no bits are ON, no latches are OM
PORTB = Mods[$FF] : databits = 0 : modsbits = 1
PORTC = Addss[$00] : modsbits = 0 : addsbits = 1
PORTC = Datas[$FF] : addsbits = 0 : databits = 1
'
''''' W R I T E T O E E P R O M ''''''''''''''''''''''''''''''''''''''''''''''
i = 0
getdata : 'grab each character, and store it in the EEPROM
LOOKUP i,[" Krzysztof Uscinski "],char
write i, char
i = i + 1
IF char = EOM THEN 'is this character the end of the message?
GOTO gotdata 'yes, exit this loop
ELSE 'no
GOTO getdata 'grab next character from message, and put it in the EEPROM
END IF 'done checking if character is the last in message
gotdata : 'go on with the program
'
''''' S T O R E A D D R E S S S E Q U E N C E S IN A R R A Y S ''''''''
FOR i = 0 TO 7
' LOOKUP i,[$01,$02,$04,$08,$10,$20,$40,$80],module_select 'used with NPN transistors
LOOKUP i,[$FE,$FD,$FB,$F7,$EF,$DF,$BF,$7F],module_select
Mods = module_select
'
LOOKUP i,[$10,$20,$40,$80,$01,$02,$04,$08],column_select
Addss = column_select
NEXT
'
''''' S T O R E C H A R A C T E R S E G M E N T S I N A R R A Y ''''''
start : ' very start of the whole loop, this point will reset all variabled, and will start on a clean start
'
char = 0 : charTMP = 0 : i = 0 : iTMP = 0 : NEWcharflag = 0 : CTS = 0
message = columns
'
MoveDataByOneColumn : 'the data display stars here
'
i = iTMP : char = charTMP
NEWcharflag = 0
'
FOR ColumnAddress = 0 TO columns 'store max. no. of segments in the data array, which is 64
'
'does the PC want to send data?
CTS = 0
if SERIALIN = 1 then goto PCtalk
'
READ char,char2disp
'
'check if the character from the eeprom memory is a lower/upper case char. or a number or a special char.
'then grab its' segment data from the 4 lookup tables containing all character
IF (char2disp >= "A") and (char2disp <= "Z") THEN
GOTO UPPERcase
END IF
'
IF (char2disp >= "a") and (char2disp <= "z") THEN
GOTO LOWERcase
ELSE
GOTO OTHERcase
END IF
'done checking the character format, and grabbing its' segment values
'
donecharacterlookup : 'done looking up the character data
'
IF character_segment = EOM THEN 'check to see if end of character
character_segment = $FF
char = char + 1
i = 0
IF (ColumnAddress = 0) THEN 'check to see if this is the first time we're looping, we do not want to do this 64 times!
charTMP = charTMP + 1
iTMP = 0
NEWcharflag = 1
END IF 'end if
ELSE 'no, not the end of character
i = i + 1
END IF 'done checking character segments
'
Datas[ColumnAddress] = character_segment
'
NEXT 'do this 64 times to fill up the whole character segment array
'
IF NEWcharflag = 0 THEN 'check to see if the 'new character' flag was set
iTMP = iTMP + 1
END IF 'done incrementing pointer of character segments
'
GOTO startDISPLAY
'
fillDISPLAY :
iTMP = 0 : charTMP = 0 : NEWcharflag = 0
message = ColumnAddress
'
FOR i = ColumnAddress TO columns 'fill up the data array with blanks if message is shorter than the length of the SIGN
'
CTS = 0
if SERIALIN = 1 then goto PCtalk
'
Datas = $FF
NEXT
'
''''' S T A R T D I S P L A Y I N G C H A R A C T E R S F R O M A R R A Y '''''
startDISPLAY :
'
column_select = 0 : module_select = 0
'
FOR LoopDisplay = 0 TO loops 'repeat the same data few times for flicker-free effect
FOR ColumnAddress = 0 TO columns 'display all 64 char. segments from the data array
'
'does the PC want to send data?
CTS = 0
if SERIALIN = 1 then goto PCtalk
'
PORTB = Mods[module_select] : databits = 0 : modsbits = 1
PORTC = Addss[column_select] : modsbits = 0 : addsbits = 1
PORTC = Datas[ColumnAddress] : addsbits = 0 : databits = 1
'
IF message = columns THEN 'check if we have a scrolling message, or something sorter that doesn't even scroll
displayme = 300
ELSE
displayme = 200
END IF
'
pauseus displayme
'
' _
'___| |__________ PORTA.0 = modsbits... select module
' _
'_______| |______ PORTA.1 = addsbits... select where on module to display data
' _
'___________| |__ PORTA.2 = databits... send actual char. seg. data
'
'blank out the 'just lit' column of LEDs to prevent cross-talk
PORTB = Mods[module_select] : databits = 0 : modsbits = 1
PORTC = Addss[column_select] : modsbits = 0 : addsbits = 1
PORTC = $FF : addsbits = 0 : databits = 1
'
column_select = column_select + 1
IF column_select = module THEN 'there are 8 column on each module, have we reached it?
column_select = 0
'
module_select = module_select + 1
IF module_select = module THEN 'there are 8 modules to display data on, have we reached it?
module_select = 0
END IF 'done incrementing module
END IF 'done incrementing colum addresses
'
NEXT 'display data on next column
NEXT 'display same data once more for flicker-free effect
GOTO MoveDataByOneColumn 'if done displaying on all columns, for few times, go back, increment message, and display again
'
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' C O M M U N I C A T I N G W I T H T H E C O M P U T E R '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'
PCtalk : 'start communicating with PC by sending acknowledge bit
'set the acknowledge bit high to let the PC know to start sending data
i = 0 : pause 100 : CTS = 1
'
SERIN SERIALIN,N9600,["@"],char
'
getserial : 'start receiving serial data
Serin SERIALIN,N9600,char
'
write i, char
'
IF char = EOM THEN 'check to see if incoming character is EOM
'iTMP = i 'debug
CTS = 0
'goto readeeprom 'debug
GOTO start 'go back to the very beginning of program to reset everything
END IF 'end checking if character is EOM
i = i + 1
GOTO getserial 'if incoming character was not EOM, return for more chars.
'
'debug function
'readeeprom:
' for i = 0 to iTMP
' read i, char
' Serout SERIALOUT,N9600,[#i," = ",char,13,10]
' next i
'goto start
'
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' C H A R A C T E R T A B L E S '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
OTHERcase :
' " and ^ missing since ^ is EOM and " is comment in PICbasic
'
select case char2disp
case EOM
GOTO fillDISPLAY
case " "
LOOKUP i,[$FF,$FF,EOM],character_segment
CASE "
lookup i,[$BF,$CF,EOM],character_segment
case "."
LOOKUP i,[$F9,$F9,EOM],character_segment
case "!"
LOOKUP i,[$0A,EOM],character_segment
case "?"
LOOKUP i,[$DF,$EF,$6A,$6F,$9F,EOM],character_segment
case ","
LOOKUP i,[$F7,$F9,EOM],character_segment
case "$"
LOOKUP i,[$BD,$5D,$49,$5D,$DE,EOM],character_segment
case ":"
LOOKUP i,[$99,$99,EOM],character_segment
case "&"
LOOKUP i,[$9C,$6B,$9A,$FD,$FA,EOM],character_segment
case "-"
LOOKUP i,[$7F,$7F,$7F,$7F,EOM],character_segment
case "%"
LOOKUP i,[$CD,$CE,$7F,$B9,$D9,EOM],character_segment
case "+"
LOOKUP i,[$7F,$7F,$1C,$7F,$7F,EOM],character_segment
case "_"
LOOKUP i,[$F7,$F7,$F7,EOM],character_segment
case "`"
LOOKUP i,[$8F,EOM],character_segment
case "~"
LOOKUP i,[$7F,$BF,$7F,$FE,$7F,EOM],character_segment
case "@"
LOOKUP i,[$18,$E7,$24,$E5,$16,EOM],character_segment
case "#"
LOOKUP i,[$BE,$1C,$BE,$1C,$BE,EOM],character_segment
case "*"
LOOKUP i,[$5F,$BF,$0E,$BF,$5F,EOM],character_segment
case "\"
LOOKUP i,[$CF,$3F,$FC,$F3,EOM],character_segment
case "/"
LOOKUP i,[$F3,$FC,$3F,$CF,EOM],character_segment
case ";"
LOOKUP i,[$F7,$79,EOM],character_segment
'case """
case $22
LOOKUP i,[$8F,$FF,$8F,EOM],character_segment
case "^"
LOOKUP i,[$BF,$DF,$EF,$DF,$BF,EOM],character_segment
case "<"
LOOKUP i,[$7F,$BE,$DD,$EB,EOM],character_segment
case ">"
LOOKUP i,[$EB,$DD,$BE,$7F,EOM],character_segment
case "["
LOOKUP i,[$00,$E7,$E7,EOM],character_segment
case "]"
LOOKUP i,[$E7,$E7,$00,EOM],character_segment
case "("
LOOKUP i,[$3C,$DB,$E7,EOM],character_segment
case ")"
LOOKUP i,[$E7,$DB,$3C,EOM],character_segment
case "="
LOOKUP i,[$BE,$BE,$BE,$BE,EOM],character_segment
case "{"
LOOKUP i,[$7F,$98,$E7,EOM],character_segment
case "}"
LOOKUP i,[$E7,$98,$7F,EOM],character_segment
case "|"
LOOKUP i,[$00,EOM],character_segment
case "0"
LOOKUP i,[$1C,$EA,$6B,$AB,$1C,EOM],character_segment
case "1"
LOOKUP i,[$DB,$08,$FB,EOM],character_segment
case "2"
LOOKUP i,[$DB,$E9,$EA,$6B,$9B,EOM],character_segment
case "3"
LOOKUP i,[$ED,$EB,$6B,$2B,$CC,EOM],character_segment
case "4"
LOOKUP i,[$7E,$BE,$DE,$08,$FE,EOM],character_segment
case "5"
LOOKUP i,[$8D,$AB,$AB,$AB,$6C,EOM],character_segment
case "6"
LOOKUP i,[$3C,$5B,$6B,$6B,$FC,EOM],character_segment
case "7"
LOOKUP i,[$EF,$E8,$6F,$AF,$CF,EOM],character_segment
case "8"
LOOKUP i,[$9C,$6B,$6B,$6B,$9C,EOM],character_segment
case "9"
LOOKUP i,[$9F,$6B,$6B,$6D,$1E,EOM],character_segment
case else
LOOKUP i,[$FF,$FF,EOM],character_segment
end select
GOTO donecharacterlookup
'
UPPERcase :
select case char2disp
case "A"
LOOKUP i,[$38,$DE,$EE,$DE,$38,EOM],character_segment
case "B"
LOOKUP i,[$EB,$08,$6B,$6B,$9C,EOM],character_segment
case "C"
LOOKUP i,[$1C,$EB,$EB,$EB,$DD,EOM],character_segment
case "D"
LOOKUP i,[$EB,$08,$EB,$EB,$1C,EOM],character_segment
case "E"
LOOKUP i,[$08,$6B,$6B,$6B,$EB,EOM],character_segment
case "F"
LOOKUP i,[$08,$6F,$6F,$6F,$EF,EOM],character_segment
case "G"
LOOKUP i,[$1C,$EB,$EB,$6B,$68,EOM],character_segment
case "H"
LOOKUP i,[$08,$7F,$7F,$7F,$08,EOM],character_segment
case "I"
LOOKUP i,[$EB,$08,$EB,EOM],character_segment
case "J"
LOOKUP i,[$FD,$FB,$FB,$FB,$0C,EOM],character_segment
case "K"
LOOKUP i,[$08,$7F,$BE,$DD,$EB,EOM],character_segment
case "L"
LOOKUP i,[$08,$FB,$FB,$FB,$FB,EOM],character_segment
case "M"
LOOKUP i,[$08,$DF,$3F,$DF,$08,EOM],character_segment
case "N"
LOOKUP i,[$08,$BF,$7F,$FE,$08,EOM],character_segment
case "O"
LOOKUP i,[$1C,$EB,$EB,$EB,$1C,EOM],character_segment
case "P"
LOOKUP i,[$08,$6F,$6F,$6F,$9F,EOM],character_segment
case "Q"
LOOKUP i,[$1C,$EB,$EA,$ED,$1A,EOM],character_segment
case "R"
LOOKUP i,[$08,$6F,$6E,$6D,$9B,EOM],character_segment
case "S"
LOOKUP i,[$9D,$6B,$6B,$6B,$DC,EOM],character_segment
case "T"
LOOKUP i,[$EF,$EF,$08,$EF,$EF,EOM],character_segment
case "U"
LOOKUP i,[$0C,$FB,$FB,$FB,$0C,EOM],character_segment
case "V"
LOOKUP i,[$8F,$7E,$F9,$7E,$8F,EOM],character_segment
case "W"
LOOKUP i,[$0C,$FB,$7C,$FB,$0C,EOM],character_segment
case "X"
LOOKUP i,[$C9,$BE,$7F,$BE,$C9,EOM],character_segment
case "Y"
LOOKUP i,[$CF,$BF,$78,$BF,$CF,EOM],character_segment
case "Z"
LOOKUP i,[$E9,$EA,$6B,$AB,$CB,EOM],character_segment
case else
LOOKUP i,[$FF,$FF,EOM],character_segment
end select
GOTO donecharacterlookup
'
LOWERcase :
select case char2disp
case "a"
LOOKUP i,[$7C,$BB,$BB,$7D,$38,EOM],character_segment
case "b"
LOOKUP i,[$08,$BB,$BB,$BB,$7C,EOM],character_segment
case "c"
LOOKUP i,[$7C,$BB,$BB,$BB,$7D,EOM],character_segment
case "d"
LOOKUP i,[$7C,$BB,$BB,$BB,$08,EOM],character_segment
case "e"
LOOKUP i,[$7C,$BA,$BA,$BA,$7A,EOM],character_segment
case "f"
LOOKUP i,[$7F,$18,$6F,$6F,$DF,EOM],character_segment
case "g"
LOOKUP i,[$7E,$B5,$B5,$75,$38,EOM],character_segment
case "h"
LOOKUP i,[$08,$BF,$BF,$BF,$78,EOM],character_segment
case "i"
LOOKUP i,[$28,EOM],character_segment
case "j"
LOOKUP i,[$F9,$F7,$28,EOM],character_segment
case "k"
LOOKUP i,[$08,$FE,$7D,$BB,EOM],character_segment
case "l"
LOOKUP i,[$0C,$FB,$FB,EOM],character_segment
case "m"
LOOKUP i,[$38,$BF,$78,$BF,$78,EOM],character_segment
case "n"
LOOKUP i,[$38,$7F,$BF,$BF,$78,EOM],character_segment
case "o"
LOOKUP i,[$7C,$BB,$BB,$BB,$7C,EOM],character_segment
case "p"
LOOKUP i,[$30,$7D,$BD,$BD,$7E,EOM],character_segment
case "q"
LOOKUP i,[$7E,$BD,$BD,$30,$F7,EOM],character_segment
case "r"
LOOKUP i,[$38,$7F,$BF,$BF,$7F,EOM],character_segment
case "s"
LOOKUP i,[$7F,$BA,$BA,$BA,$FD,EOM],character_segment
case "t"
LOOKUP i,[$BF,$0C,$BB,$FD,EOM],character_segment
case "u"
LOOKUP i,[$3C,$FB,$FB,$FD,$38,EOM],character_segment
case "v"
LOOKUP i,[$3E,$FD,$FB,$FD,$3E,EOM],character_segment
case "w"
LOOKUP i,[$3C,$FB,$3C,$FB,$3C,EOM],character_segment
case "x"
LOOKUP i,[$BB,$7D,$FE,$7D,$BB,EOM],character_segment
case "y"
LOOKUP i,[$3E,$F5,$F5,$38,EOM],character_segment
case "z"
LOOKUP i,[$BB,$B9,$BA,$3B,$BB,EOM],character_segment
case else
LOOKUP i,[$FF,$FF,EOM],character_segment
end select
GOTO donecharacterlookup
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' E N D C H A R A C T E R T A B L E S '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'
'========+=======+===============================
' PIC | RS232 | FROM PIC TO RS232 CONNECT.
'========+=======+===============================
' | | 22k
' SERIN | TX | PIC ---/\/\/\--- RS232 pin 3
' | | 1k
' SEROUT | RX | PIC ---/\/\/\--- RS232 pin 2
' GND | GND | GND ------------ RS232 pin 5
' RTS | RTS | PIC -p6-MAX-p23- RS232 pin 7
' CTS | CTS | PIC -p11-MAX-p18 RS232 pin 8
'========+=======+===============================
'
'
'
''

Post Reply

Return to “Website & Forums General Discussion”