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

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


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

Группа: Участник
Сообщений: 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
 
Start new topic
Ответов
RW6MKA
сообщение Dec 19 2010, 14:51
Сообщение #2


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

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



Да мне всего и нужно сказать в проге косяк или в схеме чтоб знать где рыть то.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- RW6MKA   Изменение текста программы при смене компилятора и чипа   Oct 25 2010, 11:58
- - sigmaN   Цитатанужно чтобы прога работала и компилировалась...   Oct 26 2010, 02:46
- - RW6MKA   Кода действительно немного и переделать эту програ...   Oct 27 2010, 12:28
- - sigmaN   Не волоку в специфике CodeVisionAVR, я от WinAWR и...   Oct 28 2010, 17:52
- - RW6MKA   ЦитатаНе волоку в специфике CodeVisionAVR, я от Wi...   Oct 29 2010, 17:08
- - sigmaN   Давайте разберемся какая у вас цель то? 1. Вам нуж...   Oct 29 2010, 18:22
- - RW6MKA   Цитата1. Вам нужен просто рабочий девайс? Да,мне н...   Oct 30 2010, 17:27
- - sigmaN   Насчёт лички не согласен ) Прокомментировать ваш к...   Oct 30 2010, 17:50
- - RW6MKA   Спасибо,эта книга у меня есть её и читаю.Литератур...   Nov 1 2010, 17:54
- - sigmaN   Хорошо. Вот с этого и начните. Делаем пустой проек...   Nov 2 2010, 16:16
- - RW6MKA   Вот кусочек моих стараний ,при компиляции ошибок ...   Nov 4 2010, 16:15
- - sigmaN   Ну конечно не будет работать. Всё дело в том, что ...   Nov 4 2010, 17:06
- - RW6MKA   ЦитатаНу конечно не будет работать. Всё дело в том...   Nov 4 2010, 20:53
- - sigmaN   ЦитатаЦитатаКстати, судя по схеме, у вас RUN 1/0 з...   Nov 5 2010, 07:03
- - RW6MKA   ЦитатаВы кажется игнорируете то, что я вам говорю....   Nov 5 2010, 12:56
- - sigmaN   ЦитатаЯ видел что у вас выражено через оператор if...   Nov 5 2010, 15:18
- - RW6MKA   ЦитатаДа, но тогда у Вас зациклится присвоение зна...   Nov 5 2010, 18:43
- - sigmaN   ЦитатаЦитатаНапряжение измеряется с помощью ADC(АЦ...   Nov 6 2010, 02:18
- - RW6MKA   ЦитатаИзмеряемое напряжение подаётся на один вход,...   Nov 6 2010, 18:35
- - sigmaN   ЦитатаКстати я думаю эту таблицу можно повзаимство...   Nov 6 2010, 23:00
- - sigmaN   А ещё я тут подумал... Светодиоды(сдвиговые регист...   Nov 7 2010, 01:31
- - RW6MKA   ЦитатаВы знаете, я ещё не смотрел как там увАжаемы...   Nov 7 2010, 17:35
- - sigmaN   ЦитатаЦитатаВы знаете, я ещё не смотрел как там ув...   Nov 7 2010, 19:11
- - RW6MKA   ЦитатаТаким образом мы сняли бит номер 3. Всё это ...   Nov 7 2010, 20:05
- - sigmaN   ЦитатаВсё это для того что бы снять третий бит в б...   Nov 7 2010, 21:15
- - RW6MKA   ЦитатаА с USI будет всё более цивилизованно - загр...   Nov 8 2010, 19:17
- - sigmaN   Нужно! Нужно знать минимальный набор слов для ...   Nov 8 2010, 20:40
- - RW6MKA   ЦитатаНа поиск в гугле потратил минуты 3.... За эт...   Nov 9 2010, 05:55
- - 314   Вот Вам небольшой примерчик, как делать нежелатель...   Nov 9 2010, 06:33
- - sigmaN   ЦитатаСажусь курить доки biggrin.gif до полного пр...   Nov 9 2010, 13:04
- - RW6MKA   Не могли бы вы проверить этот кусок исходного кода...   Nov 11 2010, 10:28
- - sigmaN   Всё проверять лень(чем-то же и вы должны заниматьс...   Nov 11 2010, 18:40
- - RW6MKA   Цитатат.е. будет так в итоге 1101001000000000 | 00...   Nov 11 2010, 21:19
- - sigmaN   ЦитатаТ.е. в данном фрагменте программы,поскольку ...   Nov 12 2010, 01:05
- - 314   В tiny2313 таймер0 8-битный, ТН скорее всего должн...   Nov 12 2010, 06:13
- - RW6MKA   sigmaN ЦитатаЧто за предупреждение? Я думаю не дол...   Nov 12 2010, 09:07
- - sigmaN   ЦитатаWarning: dira.c(173): shift result will be 0...   Nov 12 2010, 09:45
- - RW6MKA   За ссылку спасибо,разобрался всё работает. Цитатав...   Nov 12 2010, 16:00
- - sigmaN   ЦитатаБлин,а в даташите практически об этом ни сло...   Nov 12 2010, 18:25
- - sigmaN   Что-то чем дальше, тем меньше мне нравится Ваш это...   Nov 13 2010, 01:33
- - RW6MKA   ЦитатаЧто-то чем дальше, тем меньше мне нравится В...   Nov 13 2010, 10:59
- - sigmaN   Да отвяжитесь вы от этой прошивки и её автора...   Nov 13 2010, 13:00
- - RW6MKA   Обидно,да.Я так понимаю,если человек выкладывает в...   Nov 13 2010, 20:06
- - sigmaN   Не порекомендую. не о чем там читать. Создаёте про...   Nov 13 2010, 20:29
- - RW6MKA   Вот рекомендуют перед установкой студии ставить Wi...   Nov 13 2010, 21:13
- - sigmaN   тулчайн - это и есть тот самый WinAVR. Только личн...   Nov 13 2010, 21:43
- - sigmaN   Абсолютно случайно наткнулся на статью http://easy...   Nov 14 2010, 02:03
- - 314   По мне, так проще все делать сразу в Programer_Not...   Nov 14 2010, 08:02
- - sigmaN   ИМХО пусть привыкает к работе над проектом в IDE. ...   Nov 14 2010, 10:12
- - RW6MKA   Всё установил как рекомендовали и спасибо за ссыло...   Nov 14 2010, 10:23
- - sigmaN   ЦитатаБуду писать прогу под эту схему с нуля.А вот...   Nov 14 2010, 10:39
- - RW6MKA   Подтягиваю теорию и в качестве практики разбирая и...   Nov 23 2010, 16:10
- - sigmaN   чё, опять IAR? вроде ж соскакивать с него решили....   Nov 23 2010, 20:33
- - RW6MKA   Цитата(sigmaN @ Nov 23 2010, 23:33) чё, о...   Nov 24 2010, 16:18
- - RW6MKA   Так я до конца и не понял строчку: return(TH<...   Nov 25 2010, 17:16
- - sigmaN   Цитатане пойму при чем здесь DEBUGПрограмма пишетс...   Nov 25 2010, 21:49
- - RW6MKA   Ага, спасибо с дебугом всё ясно.С ТН...Если не зап...   Nov 27 2010, 15:12
- - sigmaN   ЦитатаЕсли не записать 0 в старший байт,то туда за...   Nov 28 2010, 10:54
- - RW6MKA   Что делает TH<<8,что и куда переносится я по...   Nov 28 2010, 13:42
- - RW6MKA   Обязательно ли дергать строб при зажигании светоди...   Dec 6 2010, 15:20
- - sigmaN   ЦитатаЧто делает TH<<8,что и куда переноситс...   Dec 7 2010, 00:33
- - RW6MKA   Ага, с ТН разобрался, меня ввело в заблуждение то,...   Dec 7 2010, 15:10
- - sigmaN   ЦитатаАга, с ТН разобрался, меня ввело в заблужден...   Dec 8 2010, 03:49
- - RW6MKA   Спасибо за развернутые ответы. Читал статью по ва...   Dec 9 2010, 15:16
- - sigmaN   резистор R2. Не заморачивайтесь там с расчётами, ...   Dec 9 2010, 19:00
- - RW6MKA   А как узнать сколько таймер натикал?   Dec 9 2010, 22:17
- - sigmaN   очевидно нужно как-то выводить значение функции. т...   Dec 10 2010, 01:37
- - RW6MKA   Я думаю смоделировать всё это в Протеусе.А пока я ...   Dec 10 2010, 02:38
- - RW6MKA   Итак прибыв домой попробовал свои силы в новой для...   Dec 17 2010, 04:33
- - sigmaN   щас надо уезжать. вернусь часа через 3 и всё раст...   Dec 17 2010, 07:00
- - sigmaN   ЦитатаКакой файл нужно инклудить для тиньки2313?ин...   Dec 17 2010, 10:15
- - RW6MKA   Цитатаинклудить надо avr/io.h. Для всех камней. А ...   Dec 17 2010, 12:18
- - RW6MKA   Вот что я накропал на данный момент. CODE#include ...   Dec 17 2010, 14:10
- - sigmaN   ЦитатаТ.е. вместо бла бла бла можно написатьКодvo...   Dec 17 2010, 16:54
- - RW6MKA   Вот всё в исправленном состоянии CODE#include ...   Dec 18 2010, 00:07
- - _Pasha   Ниасилил весь топик, но 1. Автору - пользуйтесь co...   Dec 18 2010, 03:47
- - sigmaN   Нда... остаётся теперь только догадываться что вы ...   Dec 18 2010, 14:08
- - RW6MKA   Скачал и установил всё как вы рекомендовали. Созда...   Dec 18 2010, 14:40
- - sigmaN   Для начала давайте ка всю папку проекта как есть з...   Dec 18 2010, 16:24
- - RW6MKA   Вот всё что там есть   Dec 18 2010, 17:21
- - sigmaN   Путь к проекту не должен содержать русских букв и,...   Dec 18 2010, 20:54
- - RW6MKA   заработало,вот немного исправленный код и результа...   Dec 19 2010, 02:07
|- - _Pasha   Цитата(RW6MKA @ Dec 19 2010, 08:07) И воп...   Dec 19 2010, 04:30
- - sigmaN   открыть delay.h и глянуть, что там _delay_ms() - р...   Dec 19 2010, 03:47
- - sigmaN   Нет, он ни то там то сям - он теперь исключительно...   Dec 19 2010, 10:50
- - RW6MKA   Вот исправленный код CODE #include <stdint.h...   Dec 19 2010, 11:27
- - sigmaN   А вот теперь вам надо крепко подумать и реализоват...   Dec 19 2010, 13:50
- - RW6MKA   Вот с помощью этого кода пытался узнать тики.К вых...   Dec 19 2010, 14:11
- - sigmaN   Поймите вы меня, мил человек, я вам помогаю, но я ...   Dec 19 2010, 14:43
|- - _Pasha   Цитата(RW6MKA @ Dec 19 2010, 20:51) в про...   Dec 19 2010, 17:22
- - sigmaN   ну мне то этот косяк тоже не с неба упадёт )) Я мо...   Dec 19 2010, 14:58
- - sigmaN   ничёё ничёё, научится. Желание есть, судя по всему...   Dec 19 2010, 17:40
- - RW6MKA   ЦитатаА не пора ли бить за такой образ мысли ? Не...   Dec 20 2010, 16:37
- - sigmaN   Ну не считает таймер и не работает компаратор очев...   Dec 20 2010, 21:37
- - RW6MKA   ЦитатаНу не считает таймер и не работает компарато...   Dec 21 2010, 01:58
- - sigmaN   Код//инициализация таймера0 TCCR0A=0x00; TCC...   Dec 21 2010, 02:20
- - RW6MKA   ЦитатаБоюсь, так дело не пойдет. Загляните в даташ...   Dec 21 2010, 07:49
- - sigmaN   Что значитЦитатаимпульс STB должен быть нулевым?? ...   Dec 21 2010, 12:34
- - RW6MKA   Ну насколько я могу понять пока STB=0 выходы Q0-8 ...   Dec 21 2010, 13:46
4 страниц V   1 2 3 > » 


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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 23:38
Рейтинг@Mail.ru


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