Ir para conteúdo
Fórum Script Brasil
  • 0

C instruçoes Assembly


vitorndc

Pergunta

Galera infelizmente venho ate voces em busca de ajuda de programadores experiente infelizmente recebi esse codigo em linguagem C de comandos Assembly, pois ele e um controlador de instruçoes do processador PIC então se voces estiverem pelo menos conhecimento em uma linha deste codigo por FAVOR comentem!!!!!!!!!!!!!!!!! Isso e uma questao de vida ou morte!

Desde já obrigado!!!

#include <system.h>
#define IDENTIFICACAO 0
#define SERVO_MAX 260
#define SERVO_MIN 100 
#define SERVO_PARADO 180
#define SERVO_AUMENTA 1  
#define SERVO_DIMINUI 1
#define TEMPO20MS 12500


#pragma DATA _CONFIG, _PWRTE_ON & _BODEN_ON & _WDT_OFF & _LVP_OFF & _CPD_OFF & _DEBUG_OFF & _HS_OSC & _CP_OFF
#pragma DATA 0x2100, 0,0,0,0,0,0,0,0

//#pragma DATA 0x0, 0x2820 
//#pragma DATA 0, 0x301d,0x008a, 0x2d00, 0x3fff, 0x2824, 0x3fff, 0x3fff, 0x3fff, 0x3fff, 0x3fff, 0x3fff, 0x3fff, 0x3fff, 0x3fff, 0x3fff, 0x3fff, 0x3fff, 0x3fff, 0x3fff, 0x3fff, 0x3fff, 0x3fff, 0x3fff, 0x3fff, 0x3fff, 0x3fff, 0x3fff, 0x3fff, 0x3fff, 0x3fff, 0x3fff, 0x3fff // para uso com bootloader
#pragma DATA 19, 0x2824

#pragma CLOCK_FREQ    20000000
#define CLOCK_FREQ    20000000


#define TX_PORT        0x07
#define TX_TRIS        0x87
#define TX_BIT        6
#define RX_PORT        0x07
#define RX_TRIS        0x87
#define RX_BIT        7
#define e_SPBRG        0x99
#define e_RCREG        0x1a
#define e_TXREG        0x019
#define e_TXSTA        0x98
#define e_RCSTA        0x18
#define e_TXIF_PIR    0x0c
#define e_RCIF_PIR    0x0c
#define e_TXIF_BIT    4
#define e_RCIF_BIT    5
#define MODE        (USART_reset_wdt | USART_HW)
#define bit_time 104 

#include <rs232_driver.h>

#include <eeprom.h>

unsigned int TMR1@TMR1L; 

int servo[4];
int servo_correcao[4]={0,0,0,0};


#define servo0 porta.0
#define servo1 porta.1
#define servo2 porta.2
#define servo3 porta.3

void interrupt( void )
{
    static bool inicio=true;
    static bool timer0lig=false;
    int contador=0;
    if( intcon & (1<<T0IF) )
    {
        clear_bit( intcon, T0IF ); 
    }


    
    if( pir1 & (1<<TMR1IF) )
    {
        clear_bit( pir1, TMR1IF ); 
        TMR1=0xFFFF-TEMPO20MS;
        servo3=servo2=servo1=servo0=1;
        int correcao_MAX=servo_correcao[0];
        if(servo_correcao[1] > correcao_MAX) correcao_MAX=servo_correcao[1];
        if(servo_correcao[2] > correcao_MAX) correcao_MAX=servo_correcao[2];
        if(servo_correcao[3] > correcao_MAX) correcao_MAX=servo_correcao[3];
        correcao_MAX+=SERVO_MAX;

        for(contador=0; contador<=correcao_MAX; contador++){
            if(contador==servo[0]) servo0=0; 
            if(contador==servo[1]) servo1=0; 
            if(contador==servo[2]) servo2=0; 
            if(contador==servo[3]) servo3=0; 
            asm { 
                nop
                nop
                nop
                nop
            }
        }
    }

    
    if( pir1 & (1<<TMR2IF) )
    {
        clear_bit( pir1, TMR2IF ); 
    }

}


void print_int(int i){
    if(i<0){
        putc('-');
        i=0-i;
    }
    
    putc('0'+i/10000);
    putc('0'+(i/1000)%10);
    putc('0'+(i/100)%100%10);
    putc('0'+(i/10)%1000%100%10);
    putc('0'+i%10000%1000%100%10);
}

void main( void )
{
    trisa = 0x00;
    trisb = 0x00;
    trisc = 0x00;
    trisd = 0x00;
    trise = 0x00;

    adcon1 = 0x06;


    porta = 0x00;
    portb = 0x00;
    portc = 0x00;
    portd = 0x00;
    porte = 0x00;
    clear_bit( option_reg, T0CS ); 
    clear_bit( option_reg, PSA ); 
    clear_bit( option_reg, PS2 ); 
    clear_bit( option_reg, PS1 );
    set_bit( option_reg, PS0 );
    set_bit( option_reg, T0SE ); 

    set_bit( t1con, T1CKPS1 ); 
    set_bit( t1con, T1CKPS0 );
    set_bit( t1con, T1SYNC );
    clear_bit( t1con, T1OSCEN ); 
    clear_bit( t1con, TMR1CS );
    
    set_bit( t1con, TMR1ON ); 
    TMR1=0xFFFF-TEMPO20MS;
    set_bit(pie1,TMR1IE); 

    clear_bit( pie2, CMIE ); 
    pie1=1;
    pie2=0;
    intcon = 0xC0;

    uart_init(0,129);  
    puts("Bem Vindo!");

    servo_correcao[0]=eeprom_read(0)*256;
    servo_correcao[0]|=eeprom_read(1);
    servo_correcao[1]=eeprom_read(2)*256;
    servo_correcao[1]|=eeprom_read(3);
    servo_correcao[2]=eeprom_read(4)*256;
    servo_correcao[2]|=eeprom_read(5);
    servo_correcao[3]=eeprom_read(6)*256;
    servo_correcao[3]|=eeprom_read(7);


    servo[0]=SERVO_PARADO+servo_correcao[0];
    servo[1]=SERVO_PARADO+servo_correcao[1];
    servo[2]=SERVO_PARADO+servo_correcao[2];
    servo[3]=SERVO_PARADO+servo_correcao[3];

    unsigned char roda=0;
    while (1){
        char c;
        while((c=getc())!='A'){putc©;};
        while((c=getc())=='A');
        if(c=='z'){
        
            while((c=getc())!=0){
                if((c >>5 ==IDENTIFICACAO)){
                    roda=c & 0b00011000;
                    roda=roda>>3;
                    switch(c& 0b111){
                        case 0b000:
                            break;
                        case 0b001:
                            if(servo[roda]+SERVO_AUMENTA>SERVO_MAX+servo_correcao[roda])
                                servo[roda]=SERVO_MAX+servo_correcao[roda];
                            else
                                servo[roda]+=SERVO_AUMENTA;
                            break;
                        case 0b010:
                            if(servo[roda]-SERVO_DIMINUI<SERVO_MIN+servo_correcao[roda])
                                servo[roda]=SERVO_MIN+servo_correcao[roda];
                            else
                                servo[roda]-=SERVO_DIMINUI;
                            break;
                        case 0b011:
                            servo[roda]=SERVO_PARADO+servo_correcao[roda];
                            break;
                        case 0b100: 
                            if(SERVO_PARADO+(SERVO_PARADO+servo_correcao[roda]-servo[roda])>SERVO_MAX+servo_correcao[roda]){
                                servo[roda]=SERVO_MAX+servo_correcao[roda];
                            } else if(SERVO_PARADO+(SERVO_PARADO+servo_correcao[roda]-servo[roda])<SERVO_MIN+servo_correcao[roda]){
                                servo[roda]=SERVO_MIN+servo_correcao[roda];
                            } else {
                                servo[roda]=SERVO_PARADO+servo_correcao[roda]+(SERVO_PARADO-servo[roda]);
                            }
                            break;
                        case 0b101:
                            servo[roda]=SERVO_MAX+servo_correcao[roda];
                            break;
                        case 0b110:
                            servo[roda]=SERVO_MIN+servo_correcao[roda];
                            break;
                        case 0b111:
                            servo_correcao[roda]=servo[roda]-SERVO_PARADO;
                            eeprom_write(roda*2,servo_correcao[roda]/256);
                            eeprom_write(roda*2+1,servo_correcao[roda]);
                            break;
                    }
                }
            }
        }
    }
}

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...