;Thanks Scott, your code is very instructive.
;Total execution time:
;worst case: 47 + 66 + 58 + 39 + 2 = 213 cycles(with known zero)
;worst case: 53 + 73 + 58 + 39 + 2 = 226 cycles(without known zero)
;Code size: 68
clrf temp
sub30k
movlw 3
addwf temp, f
movlw low(30000)
subwf Lo, f
IFNDEF known_zero
movlw high(30000)
skpc
movlw high(30000) + 1
subwf Hi, f
ELSE
rlf known_zero, w
sublw high(30000) + 1
subwf Hi, f
ENDIF
skpnc
goto sub30k
add10k
decf temp, f
movlw low(10000)
addwf Lo, f
IFNDEF known_zero
movlw high(10000)
skpnc
movlw high(10000) + 1
addwf Hi, f
ELSE
rlf known_zero, w
addlw high(10000)
addwf Hi, f
ENDIF
skpc
goto add10k
; Output(temp) ;output temp = TenK
;worst case: 10 * 3 + 9 * 3 - 1 = 47 (with known zero)
;worst case: 11 * 3 + 10 * 3 - 1 = 53 (without known zero)
clrf temp
sub3k
movlw 3
addwf temp, f
movlw low(3000)
subwf Lo, f
IFNDEF known_zero
movlw high(3000)
skpc
movlw high(3000) + 1
subwf Hi, f
ELSE
rlf known_zero, w
sublw high(3000) + 1
subwf Hi, f
ENDIF
skpnc
goto sub3k
add1k
decf temp, f
movlw low(1000)
addwf Lo, f
IFNDEF known_zero
movlw high(1000)
skpnc
movlw high(1000) + 1
addwf Hi, f
ELSE
rlf known_zero, w
addlw high(1000)
addwf Hi, f
ENDIF
skpc
goto add1k
; Output(temp) ;output temp = Thou
;worst case: 10 * 4 + 9 * 3 - 1 = 66 (with known zero)
;worst case: 11 * 4 + 10 * 3 - 1 = 73 (without known zero)
clrf temp
sub300
movlw 3
addwf temp, f
movlw low(300)
subwf Lo, f
IFNDEF known_zero
movlw high(300)
skpc
movlw high(300) + 1
subwf Hi, f
ELSE
rlf known_zero, w
sublw high(300) + 1
subwf Hi, f
ENDIF
skpnc
goto sub300
movlw 100
add100
decf temp, f
addwf Lo, f
skpc
goto add100
incf Hi, f
btfsc Hi, 7
goto add100
; Output(temp) ;output temp = Hund
;worst case: 10 * 4 + 5 * 3 + 3 = 59
clrf temp
movlw 30
sub30
incf temp, f
subwf Lo, f
skpnc
goto sub30
movfw temp
rlf temp, f
addwf temp, f
movlw 10
add10
decf temp, f
addwf Lo, f
skpc
goto add10
; Output(temp) ;output temp = Tens
;worst case: 5 * 4 + 5 * 3 + 4 = 39
; Output(Lo) ;output temp = Ones
Questions:
I am new to PIC, so I apologise in advance for this question.James Newton replies: If I remember correctly, high() takes the upper 8 bits of the value and low() takes only the lower 8 bits.
I am trying to get the ten-bit number from a 16F877a's A/D convertor to a computer using Hyperterminal, so this code converts the binary ADC value into an ASCII decimal, I assume?
I am using MPASM to programme the code, and understand the basics. What I do not understand is the numbers in brackets after movlw. Do I take out the "high"/"low" before it?
Also, since the ADC is only 10-bit, can the first section of the code "Output(temp) ;output temp = TenK" be discarded?
Thank you in advance!
Yes, you can safely remove the TenK output.+
Comments:
Thank you for the reply!James Newton replies: Try it and see! Let us know the result? Ken of Operation Radiation replies: To answer my own question from a long time ago, it does not work. Anyways, the result is not actually in ASCII, but in decimal. One needs to add 0x30h or .48 to the output digits to obtain the ASCII result. Thank you Nikolai for the great code!+
How about the Hi and Lo variables? I thought those two would be high and low bytes of the binary number...
I assembled the unedited code with MPASM and it seemed to have assembled fine.
My second question was not too clear; sorry! I meant whether I can take out the entire code from the beginning up to the TenK output. If I do that, would it affect the last four digits?
Thank you very much!
| file: /Techref/microchip/math/radix/b2a-16b4a-ng.htm, 5KB, , updated: 2005/11/4 22:22, local time: 2025/10/27 04:56,
216.73.216.22,10-3-83-201:LOG IN
|
| ©2025 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions? <A HREF="http://www.piclist.com/techref/microchip/math/radix/b2a-16b4a-ng.htm"> PIC Microcontoller Radix Math Method </A> |
| Did you find what you needed? |
|
o List host: MIT, Site host massmind.org, Top posters @none found - Page Editors: James Newton, David Cary, and YOU! * Roman Black of Black Robotics donates from sales of Linistep stepper controller kits. * Ashley Roll of Digital Nemesis donates from sales of RCL-1 RS232 to TTL converters. * Monthly Subscribers: Gregg Rew. on-going support is MOST appreciated! * Contributors: Richard Seriani, Sr. |
|
The Backwoods Guide to Computer Lingo |
.