[Device] Pins=64 Ports=7 ADCPins=8 ADCBits=10 ADCType=3 MaxClock=16000000 PrescalerBits=10 ClockDivider=1 TimerOverflow=256 ConfigAddress=0x0000 ConfigCount=3 PWMCount=2 UARTCount=2 EepromSize=4096 DefaultPackageType=1 FlowcodeProduct=AVR ChipName=at90can128 AltChipName=c128 FlashSize=131072 RamSize=4096 [ICD] ClockPort=1 ClockPin=6 DataPort=1 DataPin=7 [Pins] Pin1="NC" Pin2="RXD0/(PDI) PE0" Pin3="(TXD0/PDO) PE1" Pin4="(XCK0/AIN0) PE2" Pin5="(OC3A/AIN1) PE3" Pin6="(OC3B/INT4) PE4" Pin7="(OC3C/INT5) PE5" Pin8="(T3/INT6) PE6" Pin9="(ICP3/INT7) PE7" Pin10="(/SS) PB0" Pin11="(SCK) PB1" Pin12="(MOSI) PB2" Pin13="(MISO) PB3" Pin14="(OC2A) PB4" Pin15="(OC1A) PB5" Pin16="(OC1B) PB6" Pin17="(OC0A/OC1C) PB7" Pin18="TOSC2/PG3" Pin19="TOSC1/PG4" Pin20="/RESET" Pin21="VCC" Pin22="GND" Pin23="XTAL2" Pin24="XTAL1" Pin25="(SCL/INT0) PD0" Pin26="(SDA/INT1) PD1" Pin27="(RXD1/INT2) PD2" Pin28="(TXD1/INT3) PD3" Pin29="(ICP1) PD4" Pin30="(TXCAN/XCK1) PD5" Pin31="(RXCAN/T1) PD6" Pin32="(T0) PD7" Pin33="PG0 (/WR)" Pin34="PG1 (/RD)" Pin35="PC0 (A8)" Pin36="PC1 (A9)" Pin37="PC2 (A10)" Pin38="PC3 (A11)" Pin39="PC4 (A12)" Pin40="PC5 (A13)" Pin41="PC6 (A14)" Pin42="PC7 (A15/CLKO)" Pin43="PG2 (ALE)" Pin44="PA7 (AD7)" Pin45="PA6 (AD6)" Pin46="PA5 (AD5)" Pin47="PA4 (AD4)" Pin48="PA3 (AD3)" Pin49="PA2 (AD2)" Pin50="PA1 (AD1)" Pin51="PA0 (AD0)" Pin52="VCC" Pin53="GND" Pin54="PF7 (ADC7/TDI)" Pin55="PF6 (ADC6/TDO)" Pin56="PF5 (ADC5/TMS)" Pin57="PF4 (ADC4/TCK)" Pin58="PF3 (ADC3)" Pin59="PF2 (ADC2)" Pin60="PF1 (ADC1)" Pin61="PF0 (ADC0)" Pin62="AREF" Pin63="GND" Pin64="AVCC" [Ports] PortPin2=0x0400 PortPin3=0x0401 PortPin4=0x0402 PortPin5=0x0403 PortPin6=0x0404 PortPin7=0x0405 PortPin8=0x0406 PortPin9=0x0407 PortPin10=0x0100 PortPin11=0x0101 PortPin12=0x0102 PortPin13=0x0103 PortPin14=0x0104 PortPin15=0x0105 PortPin16=0x0106 PortPin17=0x0107 PortPin18=0x0603 PortPin19=0x0604 PortPin25=0x0300 PortPin26=0x0301 PortPin27=0x0302 PortPin28=0x0303 PortPin29=0x0304 PortPin30=0x0305 PortPin31=0x0306 PortPin32=0x0307 PortPin33=0x0600 PortPin34=0x0601 PortPin35=0x0200 PortPin36=0x0201 PortPin37=0x0202 PortPin38=0x0203 PortPin39=0x0204 PortPin40=0x0205 PortPin41=0x0206 PortPin42=0x0207 PortPin43=0x0602 PortPin44=0x0007 PortPin45=0x0006 PortPin46=0x0005 PortPin47=0x0004 PortPin48=0x0003 PortPin49=0x0002 PortPin50=0x0001 PortPin51=0x0000 PortPin54=0x0507 PortPin55=0x0506 PortPin56=0x0505 PortPin57=0x0504 PortPin58=0x0503 PortPin59=0x0502 PortPin60=0x0501 PortPin61=0x0500 [PortMasks] PortMask0=0xFF PortMask1=0xFF PortMask2=0xFF PortMask3=0xFF PortMask4=0xFF PortMask5=0xFF PortMask6=0x1F [ADCPins] ADC0=61 ADC1=60 ADC2=59 ADC3=58 ADC4=57 ADC5=56 ADC6=55 ADC7=54 [Code] ;Substitute macros ;%c Clock Speed ;%o Operand ;%s Prescaler ;%p PortID ;%m MaskBits ;%i Inverse Mask ;%a ADC channel ;%a Config Address ;%v Config Value ;%r Interrupt Flag Register ;%b Interrupt Flag Bit ;%n Interrupt Macro Name Directives="#define F_CPU %cUL\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n" MainStart="int main()\n{\n" MainEnd="\tmainendloop: goto mainendloop;\n}\n\n" IntStart="" IntEnd="" Initialise="MCUSR=0x00;\n\twdt_disable();\n" IntInit="EICRA=0x00;\nEICRB=0x00;\n\n" InputCmdFull="DDR%p = DDR%p & %i;\n%o = PIN%p;\n" InputCmdOneBit="DDR%p = DDR%p & %i;\n%o = ((PIN%p & %m) == %m);\n" InputCmdMask="DDR%p = DDR%p & %i;\n%o = PIN%p & %m;\n" OutputCmdFull="DDR%p = 0xFF;\nPORT%p = %o;\n" OutputCmdOneBit="DDR%p = DDR%p | %m;\nif (%o)\n\tPORT%p = (PORT%p & %i) | %m;\nelse\n\tPORT%p = PORT%p & %i;\n" OutputCmdMask="DDR%p = DDR%p | %m;\nPORT%p = (PORT%p & %i) | %o;\n" DelayCmdS="delay_s(%o);\n" DelayCmdMs="delay_ms(%o);\n" DelayCmdUs="delay_us(%o);\n" WdtDelayCmdS="Wdt_Delay_S(%o);\n" WdtDelayCmdMs="Wdt_Delay_Ms(%o);\n" InitialPortLetter="A" ConfigData="#pragma DATA %a, %v\n" IntHandler="" [Defines] Define1=#define MX_AVR Define2=#define MX_EE Define3=#define MX_EE_SIZE 4096 Define4=#define MX_SPI Define5=#define MX_SPI_B Define6=#define MX_SPI_SDI 3 Define7=#define MX_SPI_SDO 2 Define8=#define MX_SPI_SCK 1 Define9=#define MX_UART Define10=#define MX_UART_UCSRC Define11=#define MX_UART_E Define12=#define MX_UART_TX 1 Define13=#define MX_UART_RX 0 Define14=#define MX_MI2C Define15=#define MX_I2C_D Define16=#define MX_I2C_SDA 1 Define17=#define MX_I2C_SCL 0 Define18=#define MX_PWM Define19=#define MX_PWM_PORT PORTB Define20=#define MX_PWM_CNT 2 Define21=#define MX_PWM_TRIS1 DDRB Define22=#define MX_PWM_1 5 Define23=#define MX_PWM_TRIS2 DDRB Define24=#define MX_PWM_2 6 Define25=#define MX_PWMTYPE 1 [Interrupts] GeneralInit="sei();\n" Count=10 1=TMR0 2=INT0 3=INT1 4=INT2 5=INT3 6=INT4 7=INT5 8=INT6 9=INT7 10=RXINT [TMR0] Name="TMR0 Overflow" UseExplicitHandlerCode=1 FlagReg= FlagBit= HandlerCode="#ifndef MX_TIMER0OVF_HANDLER\n#define MX_TIMER0OVF_HANDLER\nISR(TIMER0_OVF_vect)\n{\n\tFCM_%n();\n}\n#else\n#warning The interrupt has previously been enabled, so the macro <%n> may never get called.\n#endif\n" UseExplicitEnableCode=1 EnReg= EnBit= EnableCode="TIMSK0 |= (1 << TOIE0);\n" DisableCode="TIMSK0 &= ~(1 << TOIE0);\n" OptCnt=1 TmrOpt=1 Opt1="Clock Source & Prescaler Select" Opt1Cnt=8 Opt1_1="no clock" Opt1_1Val="TCCR0A &= 0xf8;\n" Opt1_2="1:1" Opt1_2Val="TCCR0A &= 0xf8;\nTCCR0A |= 0x01;\n" Opt1_3="1:8" Opt1_3Val="TCCR0A &= 0xf8;\nTCCR0A |= 0x02;\n" Opt1_4="1:64" Opt1_4Val="TCCR0A &= 0xf8;\nTCCR0A |= 0x03;\n" Opt1_5="1:256" Opt1_5Val="TCCR0A &= 0xf8;\nTCCR0A |= 0x04;\n" Opt1_6="1:1024" Opt1_6Val="TCCR0A &= 0xf8;\nTCCR0A |= 0x05;\n" Opt1_7="T0 pin, -ve edge" Opt1_7Val="TCCR0A &= 0xf8;\nTCCR0A |= 0x06;\n" Opt1_8="T0 pin, +ve edge" Opt1_8Val="TCCR0A &= 0xf8;\nTCCR0A |= 0x07;\n" [INT0] Name="INT0 Input" UseExplicitHandlerCode=1 FlagReg= FlagBit= HandlerCode="#ifndef MX_INT0_HANDLER\n#define MX_INT0_HANDLER\nISR(INT0_vect)\n{\n\tFCM_%n();\n}\n#else\n#warning The interrupt has previously been enabled, so the macro <%n> may never get called.\n#endif\n" UseExplicitEnableCode=1 EnReg= EnBit= EnableCode="EIMSK |= (1 << INT0);\n" DisableCode="EIMSK &= ~(1 << INT0);\n" IntPort=3 IntPin=0 OptCnt=1 TmrOpt=0 Opt1="Interrupt Edge Select" Opt1Cnt=2 Opt1_1="rising edge of INT0" Opt1_1Val="EICRA |= (1 << ISC01) | (1 << ISC00);\n" Opt1_2="falling edge of INT0" Opt1_2Val="EICRA |= (1 << ISC01);\nEICRA &= ~(1 << ISC00);\n" [INT1] Name="INT1 Input" UseExplicitHandlerCode=1 FlagReg= FlagBit= HandlerCode="#ifndef MX_INT1_HANDLER\n#define MX_INT1_HANDLER\nISR(INT1_vect)\n{\n\tFCM_%n();\n}\n#else\n#warning The interrupt has previously been enabled, so the macro <%n> may never get called.\n#endif\n" UseExplicitEnableCode=1 EnReg= EnBit= EnableCode="EIMSK |= (1 << INT1);\n" DisableCode="EIMSK &= ~(1 << INT1);\n" IntPort=3 IntPin=1 OptCnt=1 TmrOpt=0 Opt1="Interrupt Edge Select" Opt1Cnt=2 Opt1_1="rising edge of INT1" Opt1_1Val="EICRA |= (1 << ISC11) | (1 << ISC10);\n" Opt1_2="falling edge of INT1" Opt1_2Val="EICRA |= (1 << ISC11);\nEICRA &= ~(1 << ISC10);\n" [INT2] Name="INT2 Input" UseExplicitHandlerCode=1 FlagReg= FlagBit= HandlerCode="#ifndef MX_INT2_HANDLER\n#define MX_INT2_HANDLER\nISR(INT2_vect)\n{\n\tFCM_%n();\n}\n#else\n#warning The interrupt has previously been enabled, so the macro <%n> may never get called.\n#endif\n" UseExplicitEnableCode=1 EnReg= EnBit= EnableCode="EIMSK |= (1 << INT2);\n" DisableCode="EIMSK &= ~(1 << INT2);\n" IntPort=3 IntPin=2 OptCnt=1 TmrOpt=0 Opt1="Interrupt Edge Select" Opt1Cnt=2 Opt1_1="rising edge of INT2" Opt1_1Val="EICRA |= (1 << ISC21) | (1 << ISC20);\n" Opt1_2="falling edge of INT2" Opt1_2Val="EICRA |= (1 << ISC21);\nEICRA &= ~(1 << ISC20);\n" [INT3] Name="INT3 Input" UseExplicitHandlerCode=1 FlagReg= FlagBit= HandlerCode="#ifndef MX_INT3_HANDLER\n#define MX_INT3_HANDLER\nISR(INT3_vect)\n{\n\tFCM_%n();\n}\n#else\n#warning The interrupt has previously been enabled, so the macro <%n> may never get called.\n#endif\n" UseExplicitEnableCode=1 EnReg= EnBit= EnableCode="EIMSK |= (1 << INT3);\n" DisableCode="EIMSK &= ~(1 << INT3);\n" IntPort=3 IntPin=3 OptCnt=1 TmrOpt=0 Opt1="Interrupt Edge Select" Opt1Cnt=2 Opt1_1="rising edge of INT3" Opt1_1Val="EICRA |= (1 << ISC31) | (1 << ISC30);\n" Opt1_2="falling edge of INT3" Opt1_2Val="EICRA |= (1 << ISC31);\nEICRA &= ~(1 << ISC30);\n" [INT4] Name="INT4 Input" UseExplicitHandlerCode=1 FlagReg= FlagBit= HandlerCode="#ifndef MX_INT4_HANDLER\n#define MX_INT4_HANDLER\nISR(INT4_vect)\n{\n\tFCM_%n();\n}\n#else\n#warning The interrupt has previously been enabled, so the macro <%n> may never get called.\n#endif\n" UseExplicitEnableCode=1 EnReg= EnBit= EnableCode="EIMSK |= (1 << INT4);\n" DisableCode="EIMSK &= ~(1 << INT4);\n" IntPort=4 IntPin=4 OptCnt=1 TmrOpt=0 Opt1="Interrupt Edge Select" Opt1Cnt=2 Opt1_1="rising edge of INT4" Opt1_1Val="EICRB |= (1 << ISC41) | (1 << ISC40);\n" Opt1_2="falling edge of INT4" Opt1_2Val="EICRB |= (1 << ISC41);\nEICRB &= ~(1 << ISC40);\n" [INT5] Name="INT5 Input" UseExplicitHandlerCode=1 FlagReg= FlagBit= HandlerCode="#ifndef MX_INT5_HANDLER\n#define MX_INT5_HANDLER\nISR(INT5_vect)\n{\n\tFCM_%n();\n}\n#else\n#warning The interrupt has previously been enabled, so the macro <%n> may never get called.\n#endif\n" UseExplicitEnableCode=1 EnReg= EnBit= EnableCode="EIMSK |= (1 << INT5);\n" DisableCode="EIMSK &= ~(1 << INT5);\n" IntPort=4 IntPin=5 OptCnt=1 TmrOpt=0 Opt1="Interrupt Edge Select" Opt1Cnt=2 Opt1_1="rising edge of INT5" Opt1_1Val="EICRB |= (1 << ISC51) | (1 << ISC50);\n" Opt1_2="falling edge of INT5" Opt1_2Val="EICRB |= (1 << ISC51);\nEICRB &= ~(1 << ISC50);\n" [INT6] Name="INT6 Input" UseExplicitHandlerCode=1 FlagReg= FlagBit= HandlerCode="#ifndef MX_INT6_HANDLER\n#define MX_INT6_HANDLER\nISR(INT6_vect)\n{\n\tFCM_%n();\n}\n#else\n#warning The interrupt has previously been enabled, so the macro <%n> may never get called.\n#endif\n" UseExplicitEnableCode=1 EnReg= EnBit= EnableCode="EIMSK |= (1 << INT6);\n" DisableCode="EIMSK &= ~(1 << INT6);\n" IntPort=4 IntPin=6 OptCnt=1 TmrOpt=0 Opt1="Interrupt Edge Select" Opt1Cnt=2 Opt1_1="rising edge of INT6" Opt1_1Val="EICRB |= (1 << ISC61) | (1 << ISC60);\n" Opt1_2="falling edge of INT6" Opt1_2Val="EICRB |= (1 << ISC61);\nEICRB &= ~(1 << ISC60);\n" [INT7] Name="INT7 Input" UseExplicitHandlerCode=1 FlagReg= FlagBit= HandlerCode="#ifndef MX_INT7_HANDLER\n#define MX_INT7_HANDLER\nISR(INT7_vect)\n{\n\tFCM_%n();\n}\n#else\n#warning The interrupt has previously been enabled, so the macro <%n> may never get called.\n#endif\n" UseExplicitEnableCode=1 EnReg= EnBit= EnableCode="EIMSK |= (1 << INT7);\n" DisableCode="EIMSK &= ~(1 << INT7);\n" IntPort=4 IntPin=7 OptCnt=1 TmrOpt=0 Opt1="Interrupt Edge Select" Opt1Cnt=2 Opt1_1="rising edge of INT7" Opt1_1Val="EICRB |= (1 << ISC71) | (1 << ISC70);\n" Opt1_2="falling edge of INT7" Opt1_2Val="EICRB |= (1 << ISC71);\nEICRB &= ~(1 << ISC70);\n" [RXINT] Name="UART0 RX" UseExplicitHandlerCode=1 FlagReg= FlagBit= HandlerCode="#ifndef MX_UART0_RX_HANDLER\n#define MX_UART0_RX_HANDLER\nISR(USART0_RX_vect)\n{\n\tFCM_%n();\n}\n#else\n#warning The interrupt has previously been enabled, so the macro <%n> may never get called.\n#endif\n" UseExplicitEnableCode=1 EnReg= EnBit= EnableCode="UCSR0B |= (1 << RXCIE0);\n" DisableCode="UCSR0B &= ~(1 << RXCIE0);\n" OptCnt=0 TmrOpt=0