Robert White shares this code:
ASCII 3 digit decimal to 8 bit binary. CONV_ASCII_HEX MOVLW 0X30 SUBWF DIGIT2, F SUBWF DIGIT3, F DIGI1 SUBWF DIGIT1, F BTFSC STATUS, Z GOTO X0 MOVF DIGIT1, W SUBLW 0X02 BTFSC STATUS, Z GOTO X200 MOVF DIGIT1, W SUBLW 0X01 BTFSC STATUS, Z GOTO X100 GOTO X0 X0 CLRF OUT GOTO DIGI2 X100 MOVLW 0X64 MOVWF OUT GOTO DIGI2 X200 MOVLW 0XC8 MOVWF OUT DIGI2 MOVLW 0X09 MOVWF COUNTN MOVF DIGIT2, W LOOPN ADDWF DIGIT2, F DECFSZ COUNTN, F GOTO LOOPN MOVF DIGIT2, W ADDWF OUT, F DIGI3 MOVF DIGIT3, W ADDWF OUT, F RETURN
the three starting digits are in <DIGIT1;DIGIT2;DIGIT3>, and the binary is in OUT. good for use in RS232 terminal applications, which is what I designed it for. Also good for keypad etc.
Comments:
; 2 digit ASCII decimal to 8 bit Binary ; This how I'd have done it as it saves having any loops - 18 clks ; ASCII DIGIT1=(hundreds), DIGIT2=(tens), DIGIT3=(units). The hex value is in OUT. ; The routine does not affect any of the ASCII DIGIT values, or need addition registers. ; CAUTION: The routine does not test that the ASCII values are valid ! ; I have just written this code to show the idea, it hasn't been tested in anyway. CONV_ASCII_HEX movlw 0X0F ; Bit pattern to strip off ASCII offset andwf DIGIT3, W ; convert ASCII value to a number (units) movwf OUT, F ; start the running total (units) rlf DIGIT2, W ; read 2*DIGIT2 doing (tens) andlw 0x1E ; clear ASCII offset + odd bits addwf OUT, F ; add to running total total 2T + U addwf OUT, F ; add to running total total 4T + U addwf OUT, F ; add to running total total 6T + U addwf OUT, F ; add to running total total 8T + U addwf OUT, F ; add to running total total 10T + U movlw '1' ; (Hundred) digit can only usefully be 1 or 2 subwf DIGIT1, W ; test value of DIGIT1 (sets flags) movlw 0x00 ; clear value to add to total btfsc STATUS, C ; test if result negative ie DIGIT1 was <='0' movlw 200 ; DIGIT1 was >'0', total needs inc by 100 or 200 btfsc STATUS, Z ; test if result = '1' movlw 100 ; DIGIT1 was = '1' inc total by 100 addwf OUT, F ; add 0, 100 or 200 to total as req+
Questions:
file: /Techref/microchip/math/radix/a2b-3d8b-rw.htm, 3KB, , updated: 2009/4/10 13:32, local time: 2024/8/22 05:26,
18.218.48.101:LOG IN
|
©2024 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://piclist.com/tecHREF/microchip/math/radix/a2b-3d8b-rw.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. |
Ashley Roll has put together a really nice little unit here. Leave off the MAX232 and keep these handy for the few times you need true RS232! |
.