[Device] FlowcodeProduct=AVR ChipName=atmega164p AltChipName=m164 Pins=40 Ports=4 ADCPins=8 ADCBits=10 MaxClock=20000000 PrescalerBits=3 ClockDivider=1 TimerOverflow=256 ConfigAddress=0x0000 ConfigCount=3 PWMCount=2 [Pins] Pin1="(PCINT8/XCK0/T0) PB0" Pin2="(PCINT9/CLKO/T1) PB1" Pin3="(PCINT10/INT2/AIN0) PB2" Pin4="(PCINT11/OC0A/AIN1) PB3" Pin5="(PCINT12/OC0B/SS) PB4" Pin6="(PCINT13/MOSI) PB5" Pin7="(PCINT14/MISO) PB6" Pin8="(PCINT15/SCK) PB7" Pin9="/RESET" Pin10="Vcc" Pin11="Gnd" Pin12="XTAL2" Pin13="XTAL1" Pin14="(PCINT24/RXD0) PD0" Pin15="(PCINT25/TXD0) PD1" Pin16="(PCINT26/RXD1/INT0) PD2" Pin17="(PCINT27/TXD1/INT1) PD3" Pin18="(PCINT28/XCK1/OC1B) PD4" Pin19="(PCINT29/OC1A) PD5" Pin20="(PCINT30/OC2B/ICP) PD6" Pin21="PD7 (OC2A/PCINT31)" Pin22="PC0 (SCL/PCINT16)" Pin23="PC1 (SDA/PCINT17)" Pin24="PC2 (TCK/PCINT18)" Pin25="PC3 (TMS/PCINT19)" Pin26="PC4 (TDO/PCINT20)" Pin27="PC5 (TDI/PCINT21)" Pin28="PC6 (TOSC1/PCINT22)" Pin29="PC7 (TOSC2/PCINT23)" Pin30="AVcc" Pin31="Gnd" Pin32="ARef" Pin33="PA7 (ADC7/PCINT7)" Pin34="PA6 (ADC6/PCINT6)" Pin35="PA5 (ADC5/PCINT5)" Pin36="PA4 (ADC4/PCINT4)" Pin37="PA3 (ADC3/PCINT3)" Pin38="PA2 (ADC2/PCINT2)" Pin39="PA1 (ADC1/PCINT1)" Pin40="PA0 (ADC0/PCINT0)" [Ports] PortPin1=0x0100 PortPin2=0x0101 PortPin3=0x0102 PortPin4=0x0103 PortPin5=0x0104 PortPin6=0x0105 PortPin7=0x0106 PortPin8=0x0107 PortPin14=0x0300 PortPin15=0x0301 PortPin16=0x0302 PortPin17=0x0303 PortPin18=0x0304 PortPin19=0x0305 PortPin20=0x0306 PortPin21=0x0307 PortPin22=0x0200 PortPin23=0x0201 PortPin24=0x0202 PortPin25=0x0203 PortPin26=0x0204 PortPin27=0x0205 PortPin28=0x0206 PortPin29=0x0207 PortPin33=0x0007 PortPin34=0x0006 PortPin35=0x0005 PortPin36=0x0004 PortPin37=0x0003 PortPin38=0x0002 PortPin39=0x0001 PortPin40=0x0000 [PortMasks] PortMask0=0xFF PortMask1=0xFF PortMask2=0xFF PortMask3=0xFF [ADCPins] ADC0=40 ADC1=39 ADC2=38 ADC3=37 ADC4=36 ADC5=35 ADC6=34 ADC7=33 [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" MainStart="int main()\n{\n" MainEnd="\tmainendloop: goto mainendloop;\n}\n\n" IntStart="" IntEnd="" Initialise="MCUSR=0x00;\n\tWDTCSR=0x10;\n" IntInit="" 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" ADCCapture="char ddc;\nddc = DDRC;\nDDRC &= ~(1 << %a);\nADCSRA = (1 << ADEN) | 0x05;\nADMUX = 0x60 | %a;\ndelay_10us(2);\nADCSRA |= (1 << ADSC);\nwhile(ADCSRA & (1 << ADSC));\nDDRC = ddc;\n" ADCHigh="return ADCH;\n" ADCLow="char adchigh, adclow;\nadclow = ADCL;\nadchigh = ADCH;\nreturn adclow;\n" ADCFull="int iRetVal;\niRetVal = (ADCL >> 6);\niRetVal |= (ADCH << 2);\nreturn (iRetVal);\n" InitialPortLetter="A" ConfigData="#pragma DATA %a, %v\n" IntHandler= [Defines] Define1=#define MX_AVR Define2=#define MX_EE Define3=#define MX_EE_SIZE 512 Define4=#define MX_SPI Define5=#define MX_SPI_B Define6=#define MX_SPI_SDI 6 Define7=#define MX_SPI_SDO 5 Define8=#define MX_SPI_SCK 7 Define9=#define MX_UART Define10=#define MX_UART_ID Define11=#define MX_UART_UCSRC Define12=#define MX_UART_D Define13=#define MX_UART_TX 1 Define14=#define MX_UART_RX 0 Define15=#define MX_MI2C Define16=#define MX_I2C_C Define17=#define MX_I2C_SDA 1 Define18=#define MX_I2C_SCL 0 Define19=#define MX_PWM Define20=#define MX_PWM_PORT PORTD Define21=#define MX_PWM_CNT 2 Define22=#define MX_PWM_TRIS1 DDRD Define23=#define MX_PWM_1 5 Define24=#define MX_PWM_TRIS2 DDRD Define25=#define MX_PWM_2 4 [Interrupts] GeneralInit="sei();\n" Count=5 1=TMR0 2=PORTB 3=INT0 4=INT1 5=INT2 [TMR0] ;it is vital that this section remains exactly as-is (for all chips?) Name=(this is retrieved from the resource file) UseExplicitHandlerCode=1 FlagReg= FlagBit= HandlerCode="ISR(TIMER0_OVF_vect)\n{\n\tFCM_%n();\n}\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="TCCR0B &= 0xf8;\n" Opt1_2="1:1" Opt1_2Val="TCCR0B &= 0xf8;\nTCCR0B |= 0x01;\n" Opt1_3="1:8" Opt1_3Val="TCCR0B &= 0xf8;\nTCCR0B |= 0x02;\n" Opt1_4="1:64" Opt1_4Val="TCCR0B &= 0xf8;\nTCCR0B |= 0x03;\n" Opt1_5="1:256" Opt1_5Val="TCCR0B &= 0xf8;\nTCCR0B |= 0x04;\n" Opt1_6="1:1024" Opt1_6Val="TCCR0B &= 0xf8;\nTCCR0B |= 0x05;\n" Opt1_7="T0 pin, -ve edge" Opt1_7Val="TCCR0B &= 0xf8;\nTCCR0B |= 0x06;\n" Opt1_8="T0 pin, +ve edge" Opt1_8Val="TCCR0B &= 0xf8;\nTCCR0B |= 0x07;\n" [PORTB] Name=(this is retrieved from the resource file) UseExplicitHandlerCode=1 FlagReg= FlagBit= HandlerCode="ISR(PCINT1_vect)\n{\n\tFCM_%n();\n}\n" UseExplicitEnableCode=1 EnReg= EnBit= EnableCode="PCMSK1 = 0xFF;\nPCICR |= (1 << PCIE1);\n" DisableCode="PCICR &= ~(1 << PCIE1);\n" OptCnt=0 TmrOpt=0 [INT0] Name="INT0 Input" UseExplicitHandlerCode=1 FlagReg= FlagBit= HandlerCode="ISR(INT0_vect)\n{\n\tFCM_%n();\n}\n" UseExplicitEnableCode=1 EnReg= EnBit= EnableCode="EIMSK |= (1 << INT0);\n" DisableCode="EIMSK &= ~(1 << INT0);\n" IntPort=3 IntPin=2 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="ISR(INT1_vect)\n{\n\tFCM_%n();\n}\n" UseExplicitEnableCode=1 EnReg= EnBit= EnableCode="EIMSK |= (1 << INT1);\n" DisableCode="EIMSK &= ~(1 << INT1);\n" IntPort=3 IntPin=3 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="ISR(INT2_vect)\n{\n\tFCM_%n();\n}\n" UseExplicitEnableCode=1 EnReg= EnBit= EnableCode="EIMSK |= (1 << INT2);\n" DisableCode="EIMSK &= ~(1 << INT2);\n" IntPort=1 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"