С++ to HEX
Добавлено: Пт июл 27, 2012 20:02:50
Всем привет, ребят подскажите пожалуйста есть код прошивки в текстовом файле написанный на с++
Вот мне надо прошить его в микруху ATTINY13 насколько я понимаю его сначала надо скомпилить в HEX файл а потом зашиввать CodeVisionAVR, Pony-Prog или AVReal по вкусу. Ну так вот как перевести из сишного файла или txt в HEX не устанавливая с++. У меня есть билдер но под вин 7 он както неработает оживить можно путем колдований но неуверен в надежности результата. Помогите пожалуйста.
Код: Выделить всё
/*****************************************************
Project : PWM Bipolar Locomotive Controller;
Version : 2.00 for MOSFET bridge with overcurrent protection.
Date : 18.04.2007
Author : Yuri V. Kalashnikov;
Company : KRTPC
Comments: Bipolar PWM Power Supply Controller
for railway models;
questions you can send by e-mail: tigerail@yandex.ru
Chip type : ATtiny13
Clock frequency : 9,600000 MHz internal RC option;
CKSEL1..0 = 10;
Memory model : Tiny
External SRAM size : 0
Data Stack size : 16
*****************************************************/
#include <tiny13.h>
#include <delay.h>
void main(void)
{
int k,i;
int AH, AL;
int OC;
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=Out Func3=In Func2=In Func1=Out Func0=Out
// State5=T State4=0 State3=T State2=T State1=0 State0=0
PORTB=0x00;
DDRB=0x17;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;
// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;
// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;
ADMUX=0x03; // Vcc as VRef, ADC connect to PB3 pin
ADCSRA=86; // ADC enable, ADC CLK divider=0b110 (9600/64=150kHz)
OC=1;
while (OC==1)
{ // overcurrent/START cycle
ADCSRA=0xC6; //START conversion
PORTB.2=0;
delay_ms(300);
PORTB.2=1;
delay_ms(300);
// ADC result performing
AL=ADCL; // extract low part ADC result;
AH=ADCH; // extract high part ADC result;
k=AH*256; // shift high part to most significant byte;
k=k+AL; // add low byte;
if ((k>412) && (k<612))
{
OC=0; // USER set trimmer to STOP position, out from cycle
}
}
while (1)
{
ADCSRA=0xC6; //START conversion
if ((k>412) && (k<612)) // CENTRAL "STOP" trimmer position
{
PORTB.2=0; // LED "STOP" is lighting;
PORTB.1=0;
PORTB.0=0;
}
else // 412<k<612
{
PORTB.2=1; // LED "STOP" is OFF;
if (k<=412) // RIGHT-turned trimmer position;
{
k=412-k;
// Pulse Width Modulation cycles "FORWARD";
for(i=1; i<=k; i=i+1)
{
PORTB.0=1;
delay_us(10);
}
for(i=k; i<=412; i=i+1)
{
PORTB.0=0;
delay_us(10);
}
} //(k<=412)
if(k>=612) // LEFT-turned trimmer position;
{
k=k-612;
// Pulse Width Modulation cycles "BACK";
for(i=1; i<=k; i=i+1)
{
PORTB.1=1;
delay_us(10);
}
for(i=k; i<=412; i=i+1)
{
PORTB.1=0;
delay_us(10);
}
} //(k>=612)
} // else
AL=ADCL; // extract low part ADC result;
AH=ADCH; // extract high part ADC result;
k=AH*256; // shift high part to most significant byte;
k=k+AL; // add low byte;
};// while
} // main