If you come back and have it counting from 0 to <strike>1,000,000</strike> File Length ...
I will ..., uh ...,
oh hell, I don't know what I'd do.
<br>
If you come back and have it counting from 0 to <strike>1,000,000</strike> File Length ...
I will ..., uh ...,
oh hell, I don't know what I'd do.
<br>
DT
Hi Darrel,
Sorry for the delay. I had some hardware problems which I had to fix.
Also I’m using a USB to serial interface to communicate with HT and every now and then Windows will see my device as a mouse.
Here is what I have so far:
I am able to count down and send out the big_number. I made few changes to your code to format the output as a 8 digit number (kept the leading zeros).
I’m also receiving the big_number as two 4 digit decimal numbers.
The only thing left is to make one big_number from the two word size variable (in_high and in_low).
I was thinking to use your PutMultResult?D macro Din but I’m not quite sure how to do it.
Here is the latest working code:
INCLUDE "modedefs.bas"
@ device pic16F876a,hs_osc,pwrt_on, protect_on
DEFINE OSC 16
DEFINE LOADER_USED 1
DEFIne HSER_RCSTA 90h
DEFINE HSER_TXSTA 20h
DEFINE HSER_BAUD 4800
define HSER_CLROERR 1
HighDigits VAR WORD
LowDigits VAR WORD
big_number VAR WORD[2] ; 32-bit variable
in_low var word
in_high var word
led var PORTA.2
ADCON1=6
CMCON=7
ASM
MOVE?CN macro Cin, Nout
MOVE?CW Cin & 0xFFFF, Nout ; Low Word
MOVE?CW (Cin >> 16), Nout + 2 ; High Word
endm
ENDASM
ASM
PutMulResult?N macro Nin
MOVE?WW Nin, R2
MOVE?WW Nin + 2, R0
endm
ENDASM
pause 10000 ' Allow for the USB device to enumerate
hserout [13,10,"Waiting for Big_number",13,10] ' Add time out later
hserin [dec4 in_high,dec4 in_low]
main:
@ MOVE?CN 20000, _big_number
WHILE (big_number[1] > 0) OR (big_number[0] > 0)
big_number[0] = big_number[0] - 1
IF big_number[0] = $ffff THEN big_number[1] = big_number[1] - 1
@ PutMulResult?N _big_number
GOSUB SendBigNum
toggle led ' Show if any action
WEND
pause 5000
goto main
SendBigNum:
HighDigits = DIV32 10000
LowDigits = R2
'IF (HighDigits > 0) THEN
HSEROUT [DEC4 HighDigits, DEC4 LowDigits," and ",dec4 in_high,dec4 in_low,13,10]
'ELSE
'HSEROUT [DEC4 LowDigits,13,10]
'ENDIF
RETURN
End
Thanks again for your patience.
Nick
BTW: I'm practising to post code the right way.
Last edited by Nicmus; - 26th January 2008 at 17:02. Reason: Posting code practice
This one I'm not so sure about. And I don't have anything handy to test it on.I’m also receiving the big_number as two 4 digit decimal numbers.
The only thing left is to make one big_number from the two word size variable (in_high and in_low).
I'm pretty sure it will work, but not Positive...P.S. To put code in a scrolling box that doesn't scrunch it all to the left, use ...Code:HighDigits = 100 ; Simulating File Length of 1,000,000 LowDigits = 0000 big_number[0] = HighDigits * 10000 big_number[1] = R0 big_number[0] = big_number[0] + LowDigits IF (big_number[0] < LowDigits) THEN big_number[1] = big_number[1] + 1
[code]' --- code goes here ---[/code]
oops, nevermind. I see you're even using colors in the test area.
<br>
Last edited by Darrel Taylor; - 26th January 2008 at 22:39. Reason: oops
DT
Hi Darrel,
I’m a bit confused by your last post.
I’m not sure were to add this code. Also I have the feeling that the big_number[0] and big_number[1] are switched from the way they are in my code.
Here is the code in “colors” format:
How do I process the in_low and in_high variables to get the big_number before entering the main loop?Code:<font color="#000000"><b>INCLUDE </b><font color="#FF0000">"modedefs.bas" </font><font color="#008000">@ device pic16F876a,hs_osc,pwrt_on, protect_on </font><b>DEFINE </b>OSC 16 <b>DEFINE</b> LOADER_USED 1 <b>DEFINE </b>HSER_RCSTA 90h <b>DEFINE </b>HSER_TXSTA 20h <b>DEFINE </b>HSER_BAUD 4800 <b>DEFINE </b>HSER_CLROERR 1 HighDigits <b>VAR WORD </b>LowDigits <b>VAR WORD </b>big_number <b>VAR WORD</b>[2] <font color="#000080"><i>; 32-bit varia </i></font>in_low <b>VAR WORD </b>in_high <b>VAR WORD </b>led <b>VAR </b>PORTA.2 ADCON1=6 CMCON=7 <b>ASM </b><font color="#008000">MOVE?CN macro Cin, Nout MOVE?CW Cin & 0xFFFF, Nout </font><font color="#000080"><i>; Low Word </i></font><font color="#008000">MOVE?CW (Cin >> 16), Nout + 2 </font><font color="#000080"><i>; High Word </i></font><font color="#008000">endm </font><b>ENDASM ASM </b><font color="#008000">PutMulResult?N macro Nin MOVE?WW Nin, R2 MOVE?WW Nin + 2, R0 endm </font><b>ENDASM PAUSE </b>1000 <b>HSEROUT </b>[13,10,<font color="#FF0000">"Waiting for Big_number"</font>,13,10] <b>HSERIN </b>[<b>DEC4 </b>in_high,<b>DEC4 </b>in_low] main: <font color="#008000">@ MOVE?CN 20000, _big_number </font><b>WHILE </b>(big_number[1] > 0) <b>OR </b>(big_number[0] > 0) big_number[0] = big_number[0] - 1 <b>IF </b>big_number[0] = $ffff <b>THEN </b>big_number[1] = big_number[1] - 1 <font color="#008000">@ PutMulResult?N _big_number </font><b>GOSUB </b>SendBigNum <b>TOGGLE </b>led <b>WEND PAUSE </b>5000 <b>GOTO </b>main SendBigNum: HighDigits = <b>DIV32 </b>10000 LowDigits = R2 <font color="#000080"><i>'IF (HighDigits > 0) THEN </i></font><b>HSEROUT </b>[<b>DEC4 </b>HighDigits, <b>DEC4 </b>LowDigits,<font color="#FF0000">" and "</font>,<b>DEC4 </b>in_high,<b>DEC4 </b>in_low,13,10] <font color="#000080"><i>'ELSE 'HSEROUT [DEC4 LowDigits,13,10] 'ENDIF </i></font><b>RETURN END </b>
Am I pulling them right as DEC4 or should I do it differently?
Regards,
Nick
Sorry. Should have used your variable names ...Just stick it after the HSERIN.Code:big_number[0] = in_high * 10000 big_number[1] = R0 big_number[0] = big_number[0] + in_low IF (big_number[0] < in_low) THEN big_number[1] = big_number[1] + 1
P.S. Nice "Colors".![]()
DT
Hi Darrel,
I added your last lines and had to REM the line:
After that everything works as intended.Code:@ MOVE?CN 1000000, _big_number
I guess the macro this line was pointing to is no longer needed.
I will open an other thread with a question on detecting EOF.
There are no words to thank you enough for your help.
Best Regards,
Nick
Yup, that statement/macro is no longer needed.
EOF marker for a .txt file is usually 26. That's a byte with the decimal value 26.
In hex it's 1A, ASCII it's ctrl-Z, whichever way you want to look at it.
Of course that ruins everything we just did.
And you're welcome.
<br>
DT
Bookmarks