реклама на сайте
подробности

 
 
> Изменение текста программы при смене компилятора и чипа
RW6MKA
сообщение Oct 25 2010, 11:58
Сообщение #201


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401



Привет всем. rolleyes.gif
Есть исходник программы написаный в IAR C v.3.10C для AT90S2313P, но такого камня уже не достать поэтому нужно переписать исходник для ATTINY2313V-10PU. Проблема в том,что IAR C v.3.10C триал или ломаная без библиотек и многого другого,поэтому изменять текст придётся в AVR Studio,но некоторые функции,как я понимаю,свойственны только IAR C v.3.10C(в частности h-файлы типа inavr.h и др.) Вообщем HELP!!! help.gif
Проще говоря нужно чтобы прога работала и компилировалась в AVR Studio или Code Vision AVR под камень ATTINY2313V-10PU. Вот сам исходник(чёт не получается файлом выложить)
/*
Компилировать IAR C v.3.10C
*/
#include <2313.h>
#include <inavr.h>

//#define DEBUG 1

// Подручные макросы
#define SetBit(address,bit) (address|=(1<<bit))
#define ClrBit(address,bit) (address&=~(1<<bit))
#define InvBit(address,bit) (address^=(1<<bit))
#define BitOn(address,bit) (address&(1<<bit))
#define BitOff(address,bit) (!(address&(1<<bit)))
#define NOP __no_operation()
#define IE __enable_interrupt()
#define DI __disable_interrupt()

#define DEBOUNCE 300
#define RUN 6 // Управление реле хода
#define REV 7 // Управление реле реверса
#define PRESC 2 // Прескалер таймера 0 (CLK/8)
#define AIN0 0
#define AIN1 1
#define T 7
#define SUM 50
#define YES 1
#define NO 0
#define REVPAUSE 800

typedef enum {Idle, RotL, RotR, LStop, RStop} State;


// Определения собственных типов данных
typedef unsigned char byte;
typedef unsigned int word;
typedef unsigned long ulong;

// Объявления прототипов функций
#ifdef DEBUG
void sb(byte data);
void phex(byte ch);
#define CRLF sb(13); sb(10)
#endif

byte GetKey(void);
byte KbdRotate(byte m);
byte KbdTest(void);
void ShiftReg(void);
void ShiftOne(byte r);
void RegClk(void);
void Strobe_1(void);
void Strobe_2(void);
void delayms (unsigned count);
unsigned getcount(void);
void RotCW(void);
void RotCCW(void);
void Stop(void);
word measure(void);
byte gp(void);
void Convert(byte data);
void Alarm(void);


__eeprom word dummy[8]= {0,0,0,0,0,0,0,0};
__eeprom State ee_stat;
__eeprom byte ee_angle;

// Таблица перевода количества импульсов, соответствующих входному
// напряжению в номер группы и номер светодиода в группе.
__flash byte LedPos[] = {
0x00,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x06,0x06,0x06,
0x07,0x07,
0x10,0x10,0x10,0x11,0x11,0x12,0x12,0x12,0x13,0x13,0x14,0x14,0x15,0x15,0x15,0x16,
0x16,0x17,
0x17,0x17,0x20,0x20,0x21,0x21,0x21,0x22,0x22,0x23,0x23,0x23,0x24,0x24,0x25,0x25,
0x26,0x26,
0x26,0x27,0x27,0x30,0x30,0x30,0x31,0x31,0x32,0x32,0x32,0x33,0x33,0x34,0x34,0x35,
0x35,0x35,
0x36,0x36,0x37,0x37,0x37,0x40,0x40,0x41,0x41,0x41,0x42,0x42,0x43,0x43,0x43,0x44,
0x44,0x45,
0x45,0x46,0x46,0x46,0x47,0x47,0x50,0x50,0x50,0x51,0x51,0x52,0x52,0x52,0x53,0x53,
0x54,0x54,
0x54,0x55,0x55,0x56,0x56,0x57};

__flash byte Mask[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

// Определение переменных программы
volatile word SysmS;
byte Regs[2];
byte Btn;
byte cnt;
volatile byte TH;
State Status;
byte Merge;
byte Angle;

// Начало основного модуля программы
__C_task void main(void){

// Настройка последовательного порта. Для настройки.
#ifdef DEBUG
UBRR = 25;
SetBit(UCR,TXEN);
#endif
Regs[1]=Regs[0]=0;
DDRD=0x71; PORTD=0x0E; // Настройка портов ввода/вывода
KbdRotate(0xFF); // Очистка регистра кнопок
ShiftReg(); // Очистка сдвигового регистра
// Настройка системного таймера на прерывания раз в 1 мсек
TCCR1B=0x0A;
OCR1=500;
TCNT1=0;
SetBit(TIMSK,OCIE1A);
SetBit(TIMSK,TOIE0);
ClrBit(DDRB,T); // Выключить транзистор
SetBit(DDRB,AIN0); // Разрядить конденсатор
delayms(1);
IE; // Разрешить глобальные прерывания
Merge = NO;
Status = ee_stat;
if ((Status==RotL) || (Status==RotR)) Alarm();
else Convert(Angle = ee_angle);
ee_stat = Status;

// ---------------------------------------------------------------
// Главная петля программы
while(1){
if ((Status==RotL)||(Status==RotR)){
Angle = gp();
Convert(Angle);
if (((Angle == 0x00)&&(Status==RotL)) || ((Angle == 0x57)&&(Status==RotR))){
Merge = YES;
Stop();
}
}
cnt = 0;
switch(Btn=GetKey()){
case 0x04: RotCW(); break;
case 0x08: Stop(); break;
case 0x10: RotCCW(); break;
}
}
}

void Alarm(void){
// Прокрутка трех кругов
byte c,i,j;
for (c=0; c!=3; c++)
for (j=0; j!=6; j++)
for (i=0; i!=8; i++){
Convert(i + (j<<4));
delayms(25);
}
Regs[0] = 0xFF;
Regs[1] = 0x00;
ShiftReg();
Status = Idle;
}

byte gp(void){
// Накопление и округление
word m = 0; byte i = SUM;
while(i--) m += measure();
i = m / SUM;
return((LedPos[i-20] & 0x77));
}

// Применение компаратора при измерении аналоговых величин.
word measure(void){
ClrBit(DDRB,AIN0); // Перевести в Z-состояние
TCNT0 = TH = 0; // Очистить счетчик-накопитель
TCCR0 = PRESC; // Включить Таймер 0
SetBit(DDRB,T); // Включить транзистор
while(BitOff(ACSR,ACO)); // Ждать изменения состояния компаратора
TCCR0 = 0; // Выключить Таймер 0
ClrBit(DDRB,T); // Выключить транзистор
SetBit(DDRB,AIN0); // Разрядить конденсатор
delayms(2); // Время для разряда
return(TH<<8 | TCNT0); // Возвращаем результат замера времени
}

#pragma vector = TIMER0_OVF0_vect
// Обработчик прерывания системного таймера
// Периодичность прерывания = 1 мсек
__interrupt void MeasureTick(void){
TH++;
}

void RotCW(void){
// Вращение по часовой стрелке
if (Status == RStop) return;
Merge = NO;
if (Status == RotL){
Stop();
delayms(REVPAUSE);
}
ClrBit(Regs[1],REV); // Выключить реле реверса
SetBit(Regs[1],RUN); // Включить реле хода
ShiftReg(); // Вывести в регистр
delayms(DEBOUNCE);
ee_stat = Status = RotR;
}

void RotCCW(void){
// Вращение против часовой стрелки
// Аналогично предыдущей функции
if (Status == LStop) return;
Merge = NO;
if (Status == RotR){
Stop();
delayms(REVPAUSE);
}
SetBit(Regs[1],REV); // но реле реверса включить
SetBit(Regs[1],RUN);
ShiftReg();
delayms(DEBOUNCE);
ee_stat = Status = RotL;
}

void Stop(void){
// Останов вращения
if ((Status==RotR)||(Status==RotL)){
ClrBit(Regs[1],REV);
ClrBit(Regs[1],RUN);
ShiftReg();
switch (Merge){
case YES: { if (Status==RotR)
Status = RStop; else
Status = LStop; break;}
case NO : Status = Idle; break;
}
Merge = NO;
ee_stat = Status;
ee_angle = Angle;
//CRLF; sb('S');sb('=');phex(Status);sb(' '); CRLF;
}
}

void Convert(byte data){
byte led, group;
static byte old;
if (data != old){
old = data;
led = data & 0x0F;
group = (data & 0x70)>>4;
Regs[0] = ~Mask[led];
Regs[1] &= 0xC0;
Regs[1] |= Mask[group];
ShiftReg();
}
}

void ShiftReg(void){
// Загрузка сдвигового регистра
ShiftOne(Regs[1]);
ShiftOne(Regs[0]);
Strobe_1();
}
void ShiftOne(byte r){
// Загрузка одного байта в регистр
char i=8;
while(i--){
if(!(r & 0x80)) ClrBit(PORTD,5); else SetBit(PORTD,5);
RegClk(); r <<=1;
}
}

byte GetKey(void){
// Сканирование кнопок с возвратом кода нажатой
byte Mask, temp = 0;
Mask = 0x3E; temp |= KbdRotate(Mask);
Mask = 0x3D; temp |= KbdRotate(Mask);
Mask = 0x3B; temp |= KbdRotate(Mask);
Mask = 0x37; temp |= KbdRotate(Mask);
Mask = 0x2F; temp |= KbdRotate(Mask);
Mask = 0x1F; temp |= KbdRotate(Mask);
return(temp & 0x3F);
}

byte KbdRotate(byte m){
// Вспомогательная функция для опроса кнопок
byte i=6, n = m;
while (i--){
if(!(m & 0x20)) ClrBit(PORTD,5); else SetBit(PORTD,5);
RegClk(); m <<=1;
}
Strobe_2();
if (BitOff(PIND,3)) return(~n);
return(0);
}

void RegClk(void){
// Формирование импульса тактировки регистра
SetBit(PORTD,4); ClrBit(PORTD,4);
}

void Strobe_1(void){
// Формирование строба первого регистра
SetBit(PORTD,6); ClrBit(PORTD,6);
}

void Strobe_2(void){
// Формирование строба второго регистра
SetBit(PORTD,0); ClrBit(PORTD,0);
}


#pragma vector = TIMER1_COMP1_vect
// Обработчик прерывания системного таймера
__interrupt void DelayTick(void){
++SysmS;
}

unsigned getcount(void){
// Возвращает значение системного счетчика (мсек)
unsigned t;
IE; t = SysmS; DI;
return (t);
}

void delayms (unsigned count){
// Функция формирования задержки в мсек
unsigned t = getcount();
while ((getcount() - t) <= count){}
}

#ifdef DEBUG
void phex(byte ch){
// Выводит байт в шестнадцатиричном формате
byte n;
n = (ch >> 4) + 0x30;
if (n > 0x39) n += 7;
sb(n);
n = (ch & 0x0F) + 0x30;
if (n > 0x39) n += 7;
sb(n);
}

void sb(byte data){
// Передача одного байта по последовательному порту
while ( !(USR & (1<<UDRE)) );
UDR = data;
}
#endif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- RW6MKA   Изменение текста программы при смене компилятора и чипа   Oct 25 2010, 11:58
- - sigmaN   Ну всё. Вот эта - точно последняя.   Feb 11 2011, 12:34
- - RW6MKA   Да, индикация исправилась, идёт плавно. Напрягает ...   Feb 11 2011, 13:09
- - sigmaN   Минусы? Опять минусы? Не было же уже их в WALK...   Feb 11 2011, 13:36
- - sigmaN   Отказался я от извращенного метода программного ув...   Feb 11 2011, 21:14
- - RW6MKA   ЦитатаУже даже не буду говорить, что это последний...   Feb 12 2011, 07:45
- - sigmaN   ЦитатаА возможна ли реализация 3-4минут?(именно за...   Feb 12 2011, 12:33
- - RW6MKA   Тут вот ещё вопросики возникли ЦитатаМало того, ...   Feb 13 2011, 16:45
- - sigmaN   ЦитатаПочему при включении USE_UART_DEBUG так резк...   Feb 13 2011, 18:47
- - RW6MKA   ЦитатаКроме того, как я уже говорил, занимают мест...   Feb 13 2011, 19:07
- - sigmaN   Ну если знакомы с Delphi - проще всего будет C++ B...   Feb 13 2011, 20:32
- - RW6MKA   ЦитатаЧто значит передача чисел в компьютер мне по...   Feb 13 2011, 21:08
- - sigmaN   Не только можно, но и нужно. Если в терминал не в...   Feb 13 2011, 22:34
- - RW6MKA   Возникла пара вопросов. Если я правильно понял, в ...   Feb 18 2011, 13:48
- - sigmaN   ЦитатаА если не использовать инклуд для UART, а не...   Feb 18 2011, 14:19
- - RW6MKA   Да, если самостоятельно реализовать драйвер. То ...   Feb 19 2011, 04:38
- - sigmaN   Начальную установку - это загнать константы в EEPR...   Feb 19 2011, 08:51
- - RW6MKA   Да-да, используя кнопку setup и кнопки управления ...   Feb 19 2011, 14:27
- - sigmaN   а вот это Цитата#define SENSOR_POINTS_FOR_ONE_LED...   Feb 19 2011, 14:51
- - sigmaN   не удержался... таки поигрался с настройками компи...   Feb 20 2011, 02:54
- - RW6MKA   UART я не хочу отбрасывать, поскольку в будущем пл...   Feb 21 2011, 04:50
- - sigmaN   ну так а делители все эти на плате тут внизу разме...   Feb 21 2011, 08:27
- - RW6MKA   Не желательно их размещать внизу т.к. возрастет ко...   Feb 21 2011, 15:10
- - sigmaN   надо хорошо подумать.... кажется там тремя провод...   Feb 21 2011, 16:23
- - RW6MKA   Да, только питание идет на движок, а он кушает 6-7...   Feb 21 2011, 19:55
- - sigmaN   Ну глюки обеспечены на 20м кабеле.... кажется грам...   Feb 22 2011, 03:21
- - RW6MKA   Вот именно поэтому в свое время я и спрашивал про ...   Feb 22 2011, 04:33
- - sigmaN   ну спрашивали про возможность - про возможность и ...   Feb 22 2011, 11:32
|- - RW6MKA   Цитата(sigmaN @ Feb 22 2011, 14:32) я за ...   Feb 23 2011, 14:51
- - RW6MKA   Вот наступит весна, установлю железо на свою мачт...   Feb 22 2011, 14:40
- - sigmaN   ЦитатаВот наступит весна, установлю железо на свою...   Feb 22 2011, 16:27
- - sigmaN   Да, на мачте смонтирован источник тока, а переменн...   Feb 23 2011, 17:12
- - RW6MKA   Доброго времени sigmaN. Столкнулся с проблемой зап...   Mar 22 2011, 15:47
- - sigmaN   Нет, всё, хватит )) Не хочу разбираться с Вашим к...   Mar 22 2011, 19:34
- - RW6MKA   Тогда просто подскажите как работать с eeprom в ст...   Mar 23 2011, 17:02
- - sigmaN   не а студии, а в WinAVR. студия - просто оболочка,...   Mar 24 2011, 10:35
- - RW6MKA   Не подскажите, почему компилятор выдаёт предупрежд...   Apr 6 2011, 12:52
- - sigmaN   не знаю   Apr 6 2011, 15:30
- - RW6MKA   Извиняюсь. Затупил. Исправил.   Apr 6 2011, 19:07
- - RW6MKA   Не подскажите, как в данном случае избавится от др...   Apr 7 2011, 09:22
- - sigmaN   гуглить пробовали? http://masteroid.ru/content/vie...   Apr 7 2011, 10:32
- - RW6MKA   Да, наверно я немного не так выразился.Используетс...   Apr 7 2011, 11:45
- - sigmaN   что конкретно говорит компилятор? нет, ну если за...   Apr 8 2011, 05:58
|- - MaslovVG   А аппаратно прерывание на каждом из фронтов входны...   Apr 8 2011, 06:38
|- - RW6MKA   Цитата(sigmaN @ Apr 8 2011, 09:58) что ко...   Apr 9 2011, 08:25
- - RW6MKA   Все вопросы снимаются. Всё выличилось заменой схем...   Apr 12 2011, 03:50
- - RW6MKA   Всем доброго времени. Вот созрел такой вопрос. Во ...   Nov 25 2011, 14:29
|- - Палыч   Цитата(RW6MKA @ Nov 25 2011, 18:29) Как т...   Nov 25 2011, 15:42
- - RW6MKA   Нет, штатного выключения прибора нет, но когда пит...   Nov 26 2011, 12:07
|- - Палыч   Цитата(RW6MKA @ Nov 26 2011, 16:07) Нет, ...   Nov 26 2011, 12:21
|- - RW6MKA   Цитата(Палыч @ Nov 26 2011, 16:21) Как же...   Nov 26 2011, 12:36
|- - Палыч   Цитата(RW6MKA @ Nov 26 2011, 16:36) Стоп,...   Nov 26 2011, 14:05
- - sigmaN   Приветствую )) А индикатор положения у нас сейачс...   Nov 28 2011, 11:51
|- - RW6MKA   Цитата(sigmaN @ Nov 28 2011, 15:51) Приве...   Nov 29 2011, 14:03
- - toweroff   Интересно... У меня вот мотоподвес спутниковой тар...   Nov 28 2011, 16:42
- - sigmaN   toweroff, я так понимаю у вас стоит что-то вроде п...   Nov 29 2011, 20:06
|- - toweroff   Цитата(sigmaN @ Nov 30 2011, 00:06) tower...   Nov 29 2011, 20:41
|- - RW6MKA   Цитата(sigmaN @ Nov 30 2011, 00:06) Собст...   Dec 2 2011, 06:47
- - sigmaN   ну и как в таком случае ваш прибор определит своё ...   Nov 30 2011, 10:31
|- - toweroff   Цитата(sigmaN @ Nov 30 2011, 14:31) ну и ...   Nov 30 2011, 12:13
- - sigmaN   ну так я просто думал, что ЦитатаТак вот если его ...   Nov 30 2011, 13:22
|- - toweroff   Цитата(sigmaN @ Nov 30 2011, 17:22) ну та...   Nov 30 2011, 15:19
- - sigmaN   На его месте я именно так и поступил бы. Однако я ...   Nov 30 2011, 16:19
|- - toweroff   Цитата(sigmaN @ Nov 30 2011, 20:19) Гляну...   Nov 30 2011, 17:12
- - sigmaN   Хотя это уже и не нам решать )))   Nov 30 2011, 17:26
- - RW6MKA   Да, вот ещё вопрос. Если отказаться от записи в EE...   Dec 2 2011, 09:59
|- - Палыч   Цитата(RW6MKA @ Dec 2 2011, 13:59) Можно ...   Dec 3 2011, 08:22
- - RW6MKA   Вот ещё назрел вопрос. Почему в коде Кодvoid Rotor...   Dec 2 2011, 17:50
|- - toweroff   Цитата(RW6MKA @ Dec 2 2011, 21:50) Вот ещ...   Dec 2 2011, 18:19
||- - RW6MKA   Цитата(toweroff @ Dec 2 2011, 22:19) 1UL ...   Dec 3 2011, 06:06
||- - toweroff   Цитата(RW6MKA @ Dec 3 2011, 10:06) А это ...   Dec 3 2011, 07:42
|- - Палыч   Цитата(RW6MKA @ Dec 2 2011, 21:50) Почему...   Dec 3 2011, 06:59
|- - RW6MKA   Цитата(Палыч @ Dec 3 2011, 10:59) Вероятн...   Dec 3 2011, 07:41
- - RW6MKA   Остался один насущьный вопрос))) Почему в реальном...   Dec 3 2011, 09:15
- - 314   В датчике ЛА7 на ТЛ2 (4093, 40106) в смысле с триг...   Dec 3 2011, 10:27
|- - RW6MKA   Цитата(314 @ Dec 3 2011, 14:27) В датчике...   Dec 3 2011, 12:19
- - toweroff   Как-то стремно передавать ИМПУЛЬСЫ, тем более счет...   Dec 3 2011, 10:36
- - 314   Говорят, что когда передавали первую фотографию об...   Dec 3 2011, 10:52
- - 314   просто lc-фильтр может звенеть на фронтах импульса...   Dec 3 2011, 18:12
- - sigmaN   Цитатаможет кто глянет, что я не так в USE_UART_DE...   Dec 3 2011, 23:45
|- - RW6MKA   Цитата(sigmaN @ Dec 4 2011, 03:45) Ну я н...   Dec 4 2011, 05:36
- - RW6MKA   Вот результаты мониторинга((( (это в сокращенном в...   Dec 5 2011, 07:11
- - sigmaN   По-моему если проц уже заскочил в обработчик, то п...   Dec 5 2011, 08:47
|- - MaslovVG   Внимательно проработайте подключение сигнала DATA....   Dec 5 2011, 09:34
|- - RW6MKA   Цитата(sigmaN @ Dec 5 2011, 12:47) По-мое...   Dec 5 2011, 09:38
|- - Палыч   Цитата(sigmaN @ Dec 5 2011, 12:47) По-мое...   Dec 5 2011, 12:29
|- - RW6MKA   Цитата(Палыч @ Dec 5 2011, 16:29) Не-а......   Dec 5 2011, 13:15
|- - Палыч   Цитата(RW6MKA @ Dec 5 2011, 17:15) Или я ...   Dec 5 2011, 15:01
|- - RW6MKA   Цитата(Палыч @ Dec 5 2011, 19:01) Как тол...   Dec 5 2011, 15:11
|- - Палыч   Цитата(RW6MKA @ Dec 5 2011, 19:11) пока и...   Dec 5 2011, 15:22
|- - RW6MKA   Цитата(Палыч @ Dec 5 2011, 19:22) Да. Об ...   Dec 5 2011, 16:27
|- - MaslovVG   Всетаки обратите внимание на мой пост 283. Земля...   Dec 5 2011, 17:25
|- - RW6MKA   Цитата(MaslovVG @ Dec 5 2011, 21:25) Всет...   Dec 7 2011, 06:45
|- - MaslovVG   Цитата(RW6MKA @ Dec 7 2011, 10:45) Но не ...   Dec 7 2011, 07:23
- - sigmaN   Цитата(Палыч @ Dec 5 2011, 16:29) Не-а......   Dec 5 2011, 22:53
- - toweroff   Но подождите... вернусь к тому же интерфейсу DiSEq...   Dec 7 2011, 07:42
- - sigmaN   Я считаю, что с учетом полученного опыта нужно пер...   Dec 7 2011, 22:56
- - RW6MKA   Доброго всем времени. Схожий код и не пойму в чём ...   Jan 21 2012, 11:39
- - RW6MKA   Ну что, никто не подскажет в чём проблема?   Jan 22 2012, 13:06
- - sigmaN   Переменные Run_Time и Time_Sec точно volatile? Пе...   Jan 22 2012, 20:25
- - RW6MKA   ЦитатаПеременные Run_Time и Time_Sec точно volatil...   Jan 23 2012, 04:39
4 страниц V  < 1 2 3 4 >


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 9th August 2025 - 15:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01496 секунд с 7
ELECTRONIX ©2004-2016