
Скорее всего эта функция прилично места занимает. Если она уже в коде где то используется, то наверно выигрыш будет. Она конечно проработана и оптимизирована, но она слишком универсальна и поэтому видимо не маленькая.
|  | roboforum.ruТехнический форум по робототехнике. |  | 





то мы начали уже без вас дискутировать на тему ненужной вам оптимизации
 
 

 
  rt.c
 rt.c


ну зачем так сразу. на каждый индикатор по триггеру и все ок.
 
 
Ваша занимает 688 байт, моя 426.
Нужно каким-то способом сделать так, чтобы во время вычислений на индикаторах оставалось число с прошлого замера...


 unsigned char segment[10]= {
 0b0000001, 0b1001111, //0,1
 0b0010010, 0b0000110, //2,3
 0b1001011, 0b0100100, //4,5
 0b0100000, 0b0001111, //6,7
 0b0000000, 0b0000100  //8,9
 };PORTC = segment[x];

HarryStar писал(а):PORTC = a;
PORTD = (a & 0b01000000) << 1;
Например так. (в случае, если вам не важно что на битах PORTC.6, PORTC.7 и битах PORTD.0-6)
 )) Уж хотел так написать, так ограничился бы PORTD.7 = PORTC.6;
)) Уж хотел так написать, так ограничился бы PORTD.7 = PORTC.6;

PORTC = segment[x];
PORTD.7 = PORTC.6;


#include <mega16.h> //Включаем библиотеку для работы с микроконтроллером ATMega16
#include <delay.h> //Включаем библиотеку для организации задержек
int i,a, x1,x10, disp;
 
 unsigned char segment[10]= {   
 // gedcfab    gedcfab   
  0b1000000, 0b1110110, //0,1
  0b0001100, 0b0100100, //2,3
  0b0110010, 0b0100001, //4,5
  0b0000001, 0b1110100, //6,7
  0b0000000, 0b0100000  //8,9
 };
 
 
 void clr_all()
 {
   
PORTD=0xFF;          //  Подтянуть порт D к 1
PORTC=0xFF;          // Подтянуть порт C  к 1
PORTA=0x00;          // Подтянуть порт A к 0
 }
void main(void)          
{
while(1)
{ 
PORTD=0xFF;          //  Подтянуть порт D к 1
DDRD=0xFF;         // Все порты D - выходы 
 
PORTC=0xFF;          // Подтянуть порт C  к 1
DDRC=0xFF;         // Все порты C - выходы      
PORTA=0x00;          // Подтянуть порт A к 0
DDRA=0xFF;         // Все порты A - выходы 
 
//disp = 42;
for (disp=0; disp<99; disp++)
 {
 delay_ms(500);
x10=disp/10;
x1=disp-x10*10;
                  
PORTA.7 = 0; 
PORTA.6 = 1; 
PORTC = segment[x1]; 
PORTD.7 = PORTC.6;
delay_ms(5);                  
                  
PORTA.6 = 0;
PORTA.7 = 1; 
PORTC = segment[x10]; 
PORTD.7 = PORTC.6;
delay_ms(5); 
  
      
 };
       
        
       
};  
}
for (i=0; i<99; i++)
 {
 delay_ms(500);
 disp = 42;
x10=disp/10;
x1=disp-x10*10;
                  
PORTA.7 = 0; 
PORTA.6 = 1; 
PORTC = segment[x1]; 
PORTD.7 = PORTC.6;
delay_ms(5);                  
                  
PORTA.6 = 0;
PORTA.7 = 1; 
PORTC = segment[x10]; 
PORTD.7 = PORTC.6;
delay_ms(5);   
}; 
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0