At 01:34 AM 19/06/2007, you wrote:
>A more efficient alternative is to use a macro
>An example GNU Assembler macro for input is shown below.
Atmel's macros.inc (AVR001 app notes) contains a few useful
macros for the AVR assembler. The zip file is only 1k.
It has become one of my favorite bit of code :-)
I will paste the code here as it is very small:
;*****************************************************************
;* file: macros.inc
;*
;* Description:
;* Source file for application note AVR001 - Conditional Assembly
;* and Portability Macros.
;*
;* Defines a number of macros that makes it easier to access
;* IO registers and extended IO registers (or SRAM locations up
;* to adress $FF if applicable).
;* The macros can be used to produce code that assembles to
;* any target AVR, without considering if the accessed IO
;* registers are located in low, standard or extended IO space
;*
;* $Revision: 2.2 $
;* $Author: jllassen $
;* $Date: Wednesday, January 26, 2005 10:55:18 UTC $
;*****************************************************************
;*********************************************************
;* BIT access anywhere in IO or lower $FF of data space
;* SETB - SET Bit in IO of data space
;* CLRB - CLeaR Bit in IO of data space
;*********************************************************
.listmac
.MACRO SETB ;Arguments: Address, Bit, Register
.if @1>7
.message "Only values 0-7 allowed for Bit parameter"
.endif
.if @0>0x3F
lds @2, @0
sbr @2, (1<<@1)
sts @0, @2
.elif @0>0x1F
in @2, @0
sbr @2, (1<<@1)
out @0, @2
.else
sbi @0, @1
.endif
.ENDMACRO
.MACRO CLRB ;Arguments: Address, Bit, Register
.if @1>7
.message "Only values 0-7 allowed for Bit parameter"
.endif
.if @0>0x3F
lds @2, @0
cbr @2, (1<<@1)
sts @0, @2
.elif @0>0x1F
in @2, @0
cbr @2, (1<<@1)
out @0, @2
.else
cbi @0, @1
.endif
.ENDMACRO
;*********************************************************
;* Bit test anywhere in IO or in lower $FF of data space
;* SKBS : SKip if Bit Set
;* SKBC : SKip if Bit Cleared
;*********************************************************
.MACRO SKBS ;Arguments: Address, Bit, Register
.if @1>7
.message "Only values 0-7 allowed for Bit parameter"
.endif
.if @0>0x3F
lds @2, @0
sbrs @2, @1
.elif @0>0x1F
in @2, @0
sbrs @2, @1
.else
sbis @0, @1
.endif
.ENDMACRO
.MACRO SKBC ;Arguments: Address, Bit, Register
.if @1>7
.message "Only values 0-7 allowed for Bit parameter"
.endif
.if @0>0x3F
lds @2, @0
sbrc @2, @1
.elif @0>0x1F
in @2, @0
sbrc @2, @1
.else
sbic @0, @1
.endif
.ENDMACRO
;*********************************************************
;* Byte access anywhere in IO or lower $FF of data space
;* STORE - Store register in IO or data space
;* LOAD - Load register from IO or data space
;*********************************************************
.MACRO STORE ;Arguments: Address, Register
.if @0>0x3F
sts @0, @1
.else
out @0, @1
.endif
.ENDMACRO
.MACRO LOAD ;Arguments: Register, Address
.if @1>0x3F
lds @0, @1
.else
in @0, @1
.endif
.ENDMACRO
Regards
John Samperi
********************************************************
Ampertronics Pty. Ltd.
11 Brokenwood Place Baulkham Hills, NSW 2153 AUSTRALIA
Tel. (02) 9674-6495 Fax (02) 9674-8745
Email: john@ampertronics.com.au
Website http://www.ampertronics.com.au
*Electronic Design * Custom Products * Contract Assembly
********************************************************
--
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.5.472 / Virus Database: 269.9.0/852 - Release Date: 17/06/2007 8:23 AM