Помогите сделать HEX

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
KillJoy
Открыл глаза
Сообщения: 60
Зарегистрирован: Пт окт 29, 2010 19:45:07

Помогите сделать HEX

Сообщение KillJoy »

Всем привет! Помогите получить HEX вот из этого!) Я так понял , что написано под ICC , но получить HEX не получилось) Помогите!
Вложения
clock.zip
(8.38 КБ) 297 скачиваний
Реклама
otest
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Re: Помогите сделать HEX

Сообщение otest »

****************
Последний раз редактировалось otest Ср ноя 24, 2010 22:25:01, всего редактировалось 1 раз.
Реклама
KillJoy
Открыл глаза
Сообщения: 60
Зарегистрирован: Пт окт 29, 2010 19:45:07

Re: Помогите сделать HEX

Сообщение KillJoy »

ATTINY2313
KillJoy
Открыл глаза
Сообщения: 60
Зарегистрирован: Пт окт 29, 2010 19:45:07

Re: Помогите сделать HEX

Сообщение KillJoy »

up
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Помогите сделать HEX

Сообщение vitalik_1984 »

Там много косяков, возможно изза отсутсвующих библиотек,

Код: Выделить всё

#include <macros.h>
#include <io2313v.h>
можно заменить
еще странное обращение:

Код: Выделить всё

OCR1 = Latch + Adder;
а генератором кода инициилизируется как

Код: Выделить всё

OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
После некотырых изменений:

Код: Выделить всё

//**************************************
// Clock 16Mhz
// Version 1.0 Janvier 2002
// Sylvain Bissonnette
//**************************************

//**************************************
//            I N C L U D E
//**************************************
#include <tiny2313.h>
#include <io.h>

//**************************************
//            D E F I N E
//**************************************
#define TRUE        0x01
#define FALSE        0x00
#define ANALOG        0x01
#define DIGITAL        0x02
#define SEI() #asm("sei")

//**************************************
//  I N T E R R U P T   H A N D L E R
//**************************************
#define interrupt_handler Crossing_interrupt:2 

//**************************************
//          P R O T O T Y P E
//**************************************

void Crossing_interrupt(void);
void Degre_interrupt(void);
void Time(unsigned char);
void IR_interrupt(void);
void Ticker_interrupt(void);
void Display(void);
void CopyData(int Value);
void CopyDot(void);

//**************************************
//   G L O B A L   V A R I A B L E
//**************************************

int WeelPosition;
unsigned char Pos;
unsigned int Adder;

unsigned char LatchedIrData;

unsigned char Sec;
unsigned char Min;
unsigned char Hrs;

int SecComp;
int MinComp;
int HrsComp;

unsigned char ClockStyle;

unsigned char TimeString[50];
unsigned char *TimeStringPtr;


unsigned char i;

//**************************************
//           C O N S T A N T
//**************************************
const unsigned char table[12][6] = {{ 0x3e, 0x41, 0x41, 0x41, 0x3e, 0x00 }, // 0    
                                         { 0x00, 0x21, 0x7f, 0x01, 0x00, 0x00  }, // 1 
                                         { 0x21, 0x43, 0x45, 0x49, 0x31, 0x00  }, // 2 
                                    { 0x42, 0x41, 0x51, 0x69, 0x46, 0x00  }, // 3
                                    { 0x0c, 0x14, 0x24, 0x5f, 0x04, 0x00  }, // 4
                                    { 0x72, 0x51, 0x51, 0x51, 0x4e, 0x00  }, // 5
                                    { 0x1e, 0x29, 0x49, 0x49, 0x06, 0x00  }, // 6
                                    { 0x40, 0x47, 0x48, 0x50, 0x60, 0x00  }, // 7
                                    { 0x36, 0x49, 0x49, 0x49, 0x36, 0x00  }, // 8
                                    { 0x30, 0x49, 0x49, 0x4a, 0x3c, 0x00  }, // 9
                                    { 0x00, 0x36, 0x36, 0x00, 0x00, 0x00  }, // :
                                    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00  }};// space


//**************************************
//            M A I N
//**************************************
void main()
{

WDTCR = 0x0e;            // Enable WatchDog at 0.97 sec
        
PORTD = 0x0d;            // Pull up on PD2&PD3 & Led White ON
DDRD = 0x03;            // PD0-O PD1-O PD2-I PD3-I PD4-I PD5-I PD6-I PD7-I

//INT 0
MCUCR = 0x02;            // Int0 generate int on falling eadge
GIMSK = 0x40;            // Int0 enable

//Timer0
TCCR0 = 0x05;            // Timer0 / 1024 

//Timer1
TCCR1B = 0x42;            // Timer1 / 8 & Input Capture on Rising eadge
TIMSK = 0x4a;             // int enable on Timer1 Compare Match 
                          // int enable on Timer 1 Input Capture
                        // int enable on Timer0 Overflow
PORTB = 0x00;            
DDRB = 0xff;            // PB0-7 as output

Hrs = 0;
Min = 0;
Sec = 0;
ClockStyle = ANALOG;

SEI();

while(1)
    {
    #asm("WDR");
    for (i=0;i<200;i++);
    if ((LatchedIrData == 0xbb) || (LatchedIrData == 0x92)) Time(TRUE);
    if ((LatchedIrData == 0xb3) || (LatchedIrData == 0xb0)) ClockStyle = DIGITAL;
    if ((LatchedIrData == 0xb4) || (LatchedIrData == 0xb1)) ClockStyle = ANALOG;    
   
    LatchedIrData = 0;
    }
}

/**********************************************************

Name:            void Time(void)
**********************************************************/    
void Time(unsigned char Fast)
{
if (Fast == FALSE) Sec++;
else Sec += 60;
if (Sec > 59)
   {
   Sec = 0;
   Min++;
   if (Min > 59)
         {
      Min = 0;
      Hrs++;
      if (Hrs > 11)
           {
         Hrs = 0;
         }
      }
   }
  
if (ClockStyle == ANALOG)
   {   
   SecComp = Sec*6;
   MinComp = Min*6;
   HrsComp = (Hrs*30)+(Min/2);
   }
else
   {
   TimeStringPtr = &TimeString[0];
   CopyData(Hrs);
   CopyDot();
   CopyData(Min);
   CopyDot();
   CopyData(Sec);   
   }
}

/**********************************************************

Name:            void CopyData(int Value)

**********************************************************/    

void CopyData(int Value)
{
if (Value < 10)
   {
   for (i=0;i<6;i++) *TimeStringPtr++ = table[0][i];
   for (i=0;i<6;i++) *TimeStringPtr++ = table[Value][i];
   }
else
   {
   for (i=0;i<6;i++) *TimeStringPtr++ = table[Value/10][i];    
   for (i=0;i<6;i++) *TimeStringPtr++ = table[Value-((Value/10)*10)][i];
   }    
}

/**********************************************************

Name:            void CopySpace(void)


**********************************************************/    

void CopyDot(void)
{
for (i=0;i<6;i++) *TimeStringPtr++ = table[10][i];
}

/**********************************************************

Name:            void Crossing_interrupt(void

**********************************************************/    
void Crossing_interrupt(void)
{
static unsigned int LastCount;
static unsigned int TotalCount;
static int Latch;
static unsigned char Lap;

Latch = TCNT1;
TotalCount = Latch - LastCount;
LastCount = Latch;
Lap++;
if (Lap > 250)
   {
   Adder = TotalCount / 378; 
   Lap = 0;
   }
   
WeelPosition = 0;
OCR1 = Latch + Adder;
TIFR |= 0x80;
Display();
}

/**********************************************************

Name:            void Degre_interrupt(void)

**********************************************************/    
void Degre_interrupt(void)
{
OCR1 = TCNT1 + Adder;
Display();
}

/**********************************************************

Name:            void Display(void)

**********************************************************/    

void Display(void)
{
PORTB = 0x00;

if (ClockStyle == ANALOG)
   {
   if (WeelPosition == HrsComp) PORTB = 0x80;
   if (WeelPosition == MinComp) PORTB = 0xff;
   if (WeelPosition == SecComp) PORTB |= 0x03;

   if ((WeelPosition == 0) ||
      (WeelPosition == 30) ||
      (WeelPosition == 60) ||
      (WeelPosition == 90) ||
      (WeelPosition == 120) ||
      (WeelPosition == 150) ||
      (WeelPosition == 180) ||
      (WeelPosition == 210) ||
      (WeelPosition == 240) ||
      (WeelPosition == 270) ||
      (WeelPosition == 300) ||
      (WeelPosition == 330)) PORTB |= 0x01;
   }
else  
   {
   Pos = ((WeelPosition-100) / 3);
   if (Pos < 49)
         {
      PORTB = TimeString[48-Pos];
      }
   }
WeelPosition++;
}

/**********************************************************

Name:            void IR_interrupt(void)

Description:    This routine is called whenever a rising edge (beginning
                of valid IR signal) is received.

                - The data codes are sent using pulse coding.
                - Each packet has 12 bits and a header.
                - The basic time period T = 550us.
                - The header length = 4T (2.2ms)
                - 0 = pulse with length T followed by space of length T.
                - 1 = pulse with length 2T followed by space of length T.
                - The last 5 bits represent the Addess.
                - The first 7 bits represent the command.
                - A packet is transmitted every 25ms while a button is down.

Input:            none        

Output:            Global variable LatchedIrData

Misc:            Sony VCR protocol

**********************************************************/    
void IR_interrupt(void)
{
static unsigned int LastCapture;
unsigned int PulseWidth;
static unsigned int IrPulseCount;
static unsigned int IrData;

PulseWidth = ICR1 - LastCapture;
LastCapture = ICR1;


if (PulseWidth > 4000) 
   {
   IrPulseCount = 0;
   IrData = 0;
   }
else
   {
   IrData = IrData >> 1;
   if (PulseWidth > 2800) IrData = IrData | 0x8000;
   IrPulseCount++;
   if (IrPulseCount == 12) LatchedIrData = ((IrData >> 4) & 0x00ff);
   }
}

/**********************************************************

Name:			void Ticker_interrupt(void)

**********************************************************/	
void Ticker_interrupt(void)
{
static unsigned char Tick;
Tick++;
if (Tick > 62)
   {
   Time(FALSE);
   Tick = 0;
   }
TCNT0 = 0x04; // reload counter
}
Остается разобраться с OCR1 почему именно так к нему обращаются.

PS Есть такая прекрасная вещь как проверить синтаксис в Коде вижне:)
В поисках истины человек развивается.
Реклама
KillJoy
Открыл глаза
Сообщения: 60
Зарегистрирован: Пт окт 29, 2010 19:45:07

Re: Помогите сделать HEX

Сообщение KillJoy »

Спасибо за помощь) но в программировании я не разбираюсь и все , что вы написали для меня лишь строки)
Реклама
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Помогите сделать HEX

Сообщение vitalik_1984 »

KillJoy попробуй еще вот так:

Код: Выделить всё

//**************************************
//   G L O B A L   V A R I A B L E
//**************************************

int WeelPosition;
int OCR1;
unsigned char Pos;
unsigned int Adder;

unsigned char LatchedIrData;

unsigned char Sec;
unsigned char Min;
unsigned char Hrs;

int SecComp;
int MinComp;
int HrsComp;

unsigned char ClockStyle;

unsigned char TimeString[50];
unsigned char *TimeStringPtr;


unsigned char i;
В поисках истины человек развивается.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Помогите сделать HEX

Сообщение vitalik_1984 »

KillJoy, ты вообще где этот код накопал?
В поисках истины человек развивается.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Помогите сделать HEX

Сообщение vitalik_1984 »

KillJoy, Вот тебе Гекс файл
Clock.rar
(318 байт) 156 скачиваний
, правда что он там у тебя делать будет я уж не знаю.
В поисках истины человек развивается.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Помогите сделать HEX

Сообщение vitalik_1984 »

Ну что там работает прошивка или нет?
В поисках истины человек развивается.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»