Revision: 1660
Author: [email protected]
Date: Fri Feb 12 22:50:33 2010
Log: added bit array library + sample
http://code.google.com/p/jallib/source/detail?r=1660

Added:
 /trunk/include/jal/bit_array_1.jal
 /trunk/sample/18f452_bit_array.jal

=======================================
--- /dev/null
+++ /trunk/include/jal/bit_array_1.jal  Fri Feb 12 22:50:33 2010
@@ -0,0 +1,146 @@
+-- Title: bit array library
+-- Author: Matthew Schinkel - borntechi.com, copyright (c) 2009, all rights reserved.
+-- Adapted-by:
+-- Compiler: >=2.4m
+--
+-- This file is part of jallib (http://jallib.googlecode.com)
+-- Released under the ZLIB license (http://www.opensource.org/licenses/zlib-license.html)
+--
+-- Description: This library creates one bit array up to 2047 bits
+--
+-- Sources:
+--
+-- notes:
+-- const dword BIT_ARRAY_1_SIZE = 600   -- choose number of array variables
+-- include bit_array                    -- include the array library
+-- alias test is bit_array_1            -- rename/alias the array to test
+
+-- create a byte array to hold the bits
+const byte _bit_array_1_calc1 = BIT_ARRAY_1_SIZE / 8
+const byte _bit_array_1_calc2 = _bit_array_1_calc1 * 8
+const byte _bit_array_1_calc3 = BIT_ARRAY_1_SIZE - _bit_array_1_calc1
+
+
+-- this is the byte array that holds the bit array data
+var byte bit_array_1_byte_array[(BIT_ARRAY_1_SIZE / 8)+ 1]
+-- the size of the byte array
+const byte bit_array_1_byte_array_size = (BIT_ARRAY_1_SIZE / 8)+ 1
+
+-- ----------------------------------------------------------------------------
+-- Writes one bit to the correct byte array (internal use only)
+-- ---------------------------------------------------------------------------- +procedure _bit_array_1_set_byte(word in byte_address, byte in bit_address, bit in data) is
+   var byte holder
+ holder = bit_array_1_byte_array[byte_address] -- get the byte out of the byte array
+
+   var bit bit0 at holder : 0   -- get the bits out of the byte
+   var bit bit1 at holder : 1
+   var bit bit2 at holder : 2
+   var bit bit3 at holder : 3
+   var bit bit4 at holder : 4
+   var bit bit5 at holder : 5
+   var bit bit6 at holder : 6
+   var bit bit7 at holder : 7
+
+   if bit_address == 0 then     -- set the correct bit in the byte
+       bit0 = data
+   elsif bit_address == 1 then
+       bit1 = data
+   elsif bit_address == 2 then
+       bit2 = data
+   elsif bit_address == 3 then
+       bit3 = data
+   elsif bit_address == 4 then
+       bit4 = data
+   elsif bit_address == 5 then
+       bit5 = data
+   elsif bit_address == 6 then
+       bit6 = data
+   elsif bit_address == 7 then
+       bit7 = data
+   end if
+
+ bit_array_1_byte_array[byte_address] = holder -- save the new byte to the byte array
+
+end procedure
+
+-- ----------------------------------------------------------------------------
+-- Reads one bit from the correct byte array (internal use only)
+-- ---------------------------------------------------------------------------- +function _bit_array_1_get_byte(word in byte_address, byte in bit_address) return bit is
+   var bit data
+
+   var byte holder
+ holder = bit_array_1_byte_array[byte_address] -- get the byte out of the byte array
+
+   var bit bit0 at holder : 0   -- get the bits out of the byte
+   var bit bit1 at holder : 1
+   var bit bit2 at holder : 2
+   var bit bit3 at holder : 3
+   var bit bit4 at holder : 4
+   var bit bit5 at holder : 5
+   var bit bit6 at holder : 6
+   var bit bit7 at holder : 7
+
+   if bit_address == 0 then     -- get the correct bit out of the byte
+       data = bit0
+   elsif bit_address == 1 then
+       data = bit1
+   elsif bit_address == 2 then
+       data = bit2
+   elsif bit_address == 3 then
+       data = bit3
+   elsif bit_address == 4 then
+       data = bit4
+   elsif bit_address == 5 then
+       data = bit5
+   elsif bit_address == 6 then
+       data = bit6
+   elsif bit_address == 7 then
+       data = bit7
+   end if
+
+   return data
+end function
+
+-- ----------------------------------------------------------------------------
+-- Write to bit array
+-- ----------------------------------------------------------------------------
+procedure bit_array_1'put(word in address, bit in data) is
+
+   var word byte_array_location
+   var byte bit_location
+   var word calc_bit_location
+
+   -- find the byte location
+   byte_array_location = address / 8
+   -- find the bit location
+   calc_bit_location = address - (byte_array_location * 8)
+   var byte val[2] at calc_bit_location
+   bit_location = val[0]
+   -- write the bit
+   _bit_array_1_set_byte(byte_array_location, bit_location, data)
+
+end procedure
+
+-- ----------------------------------------------------------------------------
+-- Read from bit array
+-- ----------------------------------------------------------------------------
+function bit_array_1'get(word in address) return bit is
+   var bit data
+
+   var word byte_array_location
+   var byte bit_location
+   var word calc_bit_location
+
+   -- find the byte location
+   byte_array_location = address / 8
+   -- find the bit location
+   calc_bit_location = address - (byte_array_location * 8)
+   var byte val[2] at calc_bit_location
+   bit_location = val[0]
+   -- write the bit
+   data = _bit_array_1_get_byte(byte_array_location, bit_location)
+
+   return data -- return the bit
+end function
=======================================
--- /dev/null
+++ /trunk/sample/18f452_bit_array.jal  Fri Feb 12 22:50:33 2010
@@ -0,0 +1,66 @@
+-- Title: bit array library
+-- Author: Matthew Schinkel - borntechi.com, copyright (c) 2009, all rights reserved.
+-- Adapted-by:
+-- Compiler: >=2.4m
+--
+-- This file is part of jallib (http://jallib.googlecode.com)
+-- Released under the BSD license (http://www.opensource.org/licenses/bsd-license.php)
+--
+-- Description: This samples shows usage of one bit array up to 2047 bits
+--
+-- Sources:
+--
+-- notes:
+-- const dword BIT_ARRAY_1_SIZE = 2047  -- choose number of array variables
+-- include bit_array_1                  -- include the array library
+-- alias test is bit_array_1            -- rename/alias the array to test
+--
+
+-- include chip
+include 18F452                   -- target picmicro
+
+-- This program assumes a 20 MHz resonator or crystal
+-- is connected to pins OSC1 and OSC2.
+pragma target clock 20_000_000     -- oscillator frequency
+-- configuration memory settings (fuses)
+pragma target OSC  HS              -- HS crystal or resonator
+pragma target WDT  disabled        -- no watchdog
+pragma target LVP  disabled        -- no Low Voltage Programming
+
+enable_digital_io()                -- disable analog I/O (if any)
+
+-- setup uart for communication
+const serial_hw_baudrate  = 115200   -- set the baudrate
+include serial_hardware
+serial_hw_init()
+
+const dword BIT_ARRAY_1_SIZE = 2047    -- choose number of array variables
+include bit_array_1                    -- include the array library
+alias test is bit_array_1              -- rename/alias the array to test
+
+;example write bit
+test[2000] = 1
+test[2001] = 0
+test[2002] = 1
+
+;example read bit
+var bit x,y,z
+x = test[2000]
+y = test[2001]
+z = test[2002]
+
+-- send these three bytes via serial port 10 times
+for 10 loop
+   serial_hw_data = x
+   serial_hw_data = y
+   serial_hw_data = z
+end loop
+
+-- show the array byte that contains these bits
+-- location is 2000 / 8 = 250
+-- non-valued bits will be unpredictable
+-- in this sample, output will be byte XXXXX101
+for 10 loop
+   serial_hw_data = bit_array_1_byte_array[250]
+end loop
+

--
You received this message because you are subscribed to the Google Groups 
"jallib" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/jallib?hl=en.

Reply via email to