what's post #3 all about ski? Im using a 16f873.
what's post #3 all about ski? Im using a 16f873.
Last edited by Kalind; - 15th October 2008 at 19:02.
well, this is what i managed to do. i hooked it up to my circuit but the program isnt doing what i wanted it to do. Skimask?
/code
Define LCD_DREG PORTB
Define LCD_DBIT 0
Define LCD_RSREG PORTB
Define LCD_RSBIT 5
Define LCD_EREG PORTB
Define LCD_EBIT 4
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
mode var byte
keyin var byte
adval var word
tempc var word
highpt var byte
lowpt var byte
up var portc.0
down var portc.1
sethighp var portc.2
setlowp var portc.3
maindisp var portc.4
trisc=$ff
trisa=$ff
adcon1=$82
adcon0=$c1
pause 100
mode = 1
lcdout $fe , 1
goto main
getkey:
pause 50
keyin = portc
return
gettemp:
adcon0.2=1
pause 1
checkdone:
if adcon0.2=1 then checkdone
adval.highbyte=adresh
adval.lowbyte=adresl
tempc=(50*adval)/100
return
main:
gosub gettemp
gosub getkey
'saving part
if maindisp = 1 then
write 0 , sethighp
pause 10
write 1 , sethighp
mode = 1
endif
if sethighp = 1 then mode = 2
if setlowp = 1 then mode = 3
select case mode
case 1
lcdout $fe , $80 , "Temp = ", DEC3 tempc , $DF , "C"
case 2
lcdout $fe , $80 , "High Sp=" , $fe , $c0 , highpt
if up = 1 then highpt = highpt + 1
if down = 1 then highpt = highpt - 1
case 3
lcdout $fe , $80 , "Low Pt=" , $fe , $c0 , lowpt
if up = 1 then lowpt = lowpt + 1
if down = 1 then lowpt = lowpt - 1
end select
goto main
Last edited by Kalind; - 20th October 2008 at 13:02.
taking your advice with the program, i hooked it up and on the lcd it prompts the user to enter a LOW SP. upon the use of the increment decrement buttons, on the second line of the lcd are characters which are being displayed. when the 'main' button is pressed, it does not go to the main display and also when the HighSp button is pressed, it does not go to that screen. im so lost with this whole thing
Put yours subrouteenes at the end of your code, never at the beginning!
Modify your If then in the following manner:
if maindisp = 1 then
write 0 , sethighp
pause 10
write 1 , sethighp
mode = 1
maindisp = 0 ' reset flag
endif
Otherwise it will write at every cycle and in this case you do not need the " IF Then " statement. Set your flag to 1 when writing is needed
Yours code for reading key:
getkey:
pause 50
keyin = portc
return
You read the status of the all 8 inputs, than you need to decode to find which key has been pressed.
More:
Are you pulling up your inputs using normally closed switches? otherwise with this code you have to pull down your inputs.
Al.
Last edited by aratti; - 20th October 2008 at 14:23.
Disagree 100%, ok maybe 99%
If using a PIC16 (or 12,or 10) series PIC, if you are able to keep the 'subroutines' in the first bank of code space, you'll save code space due to the fact that the BANK Select registers don't need to be changed, and at the same time save instruction cycles. And if your subroutines are at the beginning, they're the first thing to get seen while skimming thru the code, makes them harder to forget them (I guess more of a brain thing there).
At any rate, there's one more small bug in your If/Then correction above (post #13)...a small one...actually two small bugs...one matters, the other doesn't really matter...
Humour me for a bit...
Push the buttons, what happens?Code:Define LCD_DREG PORTB Define LCD_DBIT 0 Define LCD_RSREG PORTB Define LCD_RSBIT 5 Define LCD_EREG PORTB Define LCD_EBIT 4 DEFINE LCD_BITS 4 DEFINE LCD_LINES 2 keyin var byte : trisc=$ff : pause 1000 : lcdout $fe,1 main: keyin = portc : lcdout $fe, $80, BIN8 keyin : goto main end
i dont know..this isnt the main concern...lets get back to reality
Bookmarks