Ir ao conteúdo
  • Cadastre-se

Duvidas compilador CCS


Posts recomendados

Olá, estou utilizando o compilador CCS para fazer um programa utilizando o timer0 do PIC 12F675. Estou sem muita pratica nesse compilador e já faz muito tempo da ultima vez programei “timer”. Minhas duvidas partem principalmente do fato de nesse compilador não atribua valores diretamente aos registradores, sendo feita  a utilização de funções já pré-definidas pelo compilador como “SETUP_TIMER0()”, e portanto não entendo exatamente o que estou selecionando quando coloco por exemplo “RTCC_INTERNAL”. Eis minhas principais  duvidas com relação ao CCS:

 

1-O que estou selecionando quando coloco “RTCC_INTERNAL” na  função  “SETUP_TIMER0”?Estou selecionando algum tipo de oscilador interno do hardware do PIC, que é independente do externo?

 

2-Por que todos os exemplos de timer0 utilizando o compilador CCS utilizam “RTCC_INTERNAL”?

 

3-No caso do timer0 li em vários textos que o mesmo conta até 256 (8 bits), porém já vi exemplos em se utilizava esse timer para realizar uma contagem até 65536 (16 bits), sem nenhum tipo especifico de alteração na sintaxe da função do timer, isso realmente é possível?

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

oi. 1ªmente informo que não uso este compilador por isso não tenho base pra meter o pau nesta porcaria. (!) kk.

Faz todo o sentido você (querer) ter acesso aos registros internos do cara. Por isso te sugiro usar o mikroc que te dá esta liberdade. Junte-se a isso o fato de este pic ser hipermegasimples. Mas antes você precisa entender um pouquinho dele. Veja o timer0 em questão...

PIC16F688_Timer0.png

Tipo assim: Pra fazer o timer contar com a quarta parte do clock do o oscilador 4MHz, ou seja vai entrar 1MHz no prescaler (divisor) devemos fazer T0CS=0 e PSA=1.  Se quiser 1MHz direto no contador, PSA=0. Note que podemos dividir de 2 até 256 por isso ele "aparenta" 16 bits pois temos mais 8 do contador propriamente dito. Basta isso pra dar acesso ao hw dele e nem precisa apelar pro asm. Bom foi só um resuminho bobo pra você notar como o trem é simples. Quanto aos comandos do seu compilador,  sorry, aguarde uma boa alma ou pratique mais um pouco. Também tens a opção de dar uma lida no help dele

Link para o comentário
Compartilhar em outros sites

Não uso o CCS. Apenas o estudo.

Olá, estou utilizando o compilador CCS para fazer um programa utilizando o timer0 do PIC 12F675. Estou sem muita pratica nesse compilador e já faz muito tempo da ultima vez programei “timer”. Minhas duvidas partem principalmente do fato de nesse compilador não atribua valores diretamente aos registradores, sendo feita  a utilização de funções já pré-definidas pelo compilador como “SETUP_TIMER0()”, e portanto não entendo exatamente o que estou selecionando quando coloco por exemplo “RTCC_INTERNAL”. Eis minhas principais  duvidas com relação ao CCS:

 

1-O que estou selecionando quando coloco “RTCC_INTERNAL” na  função  “SETUP_TIMER0”?Estou selecionando algum tipo de oscilador interno do hardware do PIC, que é independente do externo? Sim. Timer0 com clock interno. Frequência do cristal dividido por 4.

 

2-Por que todos os exemplos de timer0 utilizando o compilador CCS utilizam “RTCC_INTERNAL”? Como o clock interno possui frequência fixa, você pode usar períodos fixos para o que lhe convier. Ex. Gerar uma interrupção a cada período fixo de tempo para ler o CAD. Você também pode medir intervalos de tempo, já que com uma frequência fixa, a sua contagem equivale ao número de períodos fixos de clock.

 

3-No caso do timer0 li em vários textos que o mesmo conta até 256 (8 bits), porém já vi exemplos em se utilizava esse timer para realizar uma contagem até 65536 (16 bits), sem nenhum tipo especifico de alteração na sintaxe da função do timer, isso realmente é possível?

O timer0 possui um contador de 8 bits, permitindo a contagem até 256. Mas se você usar um divisor antes, como o tal prescaler, sua contagem pode ser multiplicada pelo fator de divisão do prescaler. Como o nosso amig...herr nossa amiga Isadora já mencionou.

 

MOR_AL

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

Olá, me desculpe minha ignorância pois sou novo em programação PIC. Estou tendo o mesmo problema com acesso aos registradores pelo CCS, gostaria de saber se é possível no início do programa eu usar um define com um nome e um endereço e depois simplesmente acessar o registrador por ai, por exemplo o registrador T2CON que configura o prescaler e postscaler do Timer2 do 16f628a e segundo o datasheet do componente ele esta no endereço 12h, eu posso simplesmente no início de meu programa usar a linha:

 

#define T2CON 0x12h

 

e depois configurá-lo no meio do meu programa assim:

 

T2CON = 0b00000100;

 

ou sou abrigado a aprender as funções internas do compilador para acessar cada registrador?

 

PS: Se for possível eu já posso alterar o arquivo 16f628a.h que chamo toda vez q vou programar para este pic e colocar estes defines lá?

 

 

Obrigado.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

pode até ser que seja possível sim amigo. Aguarde algum expert no seu compilador.

De fato pra mim tal ausência de acesso aos registros foi um grande buraco deste compilador.

Mas já que estás rumando no rumo "certo", cogite o mikro c. Este sim dá acesso aos registros do mc. Outro bem bacaninha é o sdcc. Gratuito

 

Em tempo.. usei mikroc e sdcc há... bastante tempo

adicionado 3 minutos depois

ah sim... do jeito que você fez não dá certo pois o compilador entenderia como

0x12h=0b00000100;//sem sentido pro c

Mas sim.. está no caminho certo: um #define qualquer

Link para o comentário
Compartilhar em outros sites

Caro, para ter acesso ao registrador usando o ccs antes do main faço assim:

 

#byte timer0 = 0x01// acesso ao registrador completo.

#bit timer0_b5 = 0x01.5 // acesso ao bit 5 do registrador timer0 

 

no main é só fazer:

timer0 = 0x00; //ou 0b00000000;

timer0_b5 = 1;

 

existe outras formas de acessa-los mas está é a que menos utiliza memória.

O mikroc e melhor nesse quesito já que não precisa saber a posição da memória do registrador.

 

 

 

Link para o comentário
Compartilhar em outros sites

O CCS também pode criar um arquivo .h com todos os registradores (ou apenas os escolhidos por você), para isso use o "Device table editor" aba "Registers" olhe um exemplo para o PIC16F877A (é configurável de forma que no lugar de MCU_ pode ser REG_ ou outra coisa que você julgar melhor):

 

Spoiler

#byte MCU_INDF = 0x000
#byte MCU_TMR0 = 0x001
#byte MCU_PCL = 0x002
#byte MCU_STATUS = 0x003
#bit    MCU_C = MCU_STATUS.0
#bit    MCU_DC = MCU_STATUS.1
#bit    MCU_Z = MCU_STATUS.2
#bit    MCU_PD = MCU_STATUS.3
#bit    MCU_TO = MCU_STATUS.4
#bit    MCU_RP0 = MCU_STATUS.5
#bit    MCU_RP1 = MCU_STATUS.6
#bit    MCU_IRP = MCU_STATUS.7
#byte MCU_FSR = 0x004
#byte MCU_PORTA = 0x005
#byte MCU_PORTB = 0x006
#bit    MCU_RB0 = MCU_PORTB.0
#bit    MCU_RB1 = MCU_PORTB.1
#bit    MCU_RB2 = MCU_PORTB.2
#bit    MCU_RB3 = MCU_PORTB.3
#bit    MCU_RB4 = MCU_PORTB.4
#bit    MCU_RB5 = MCU_PORTB.5
#bit    MCU_RB6 = MCU_PORTB.6
#bit    MCU_RB7 = MCU_PORTB.7
#byte MCU_PORTC = 0x007
#bit    MCU_RC0 = MCU_PORTC.0
#bit    MCU_RC1 = MCU_PORTC.1
#bit    MCU_RC2 = MCU_PORTC.2
#bit    MCU_RC3 = MCU_PORTC.3
#bit    MCU_RC4 = MCU_PORTC.4
#bit    MCU_RC5 = MCU_PORTC.5
#bit    MCU_RC6 = MCU_PORTC.6
#bit    MCU_RC7 = MCU_PORTC.7
#byte MCU_PORTD = 0x008
#bit    MCU_RD0 = MCU_PORTD.0
#bit    MCU_RD1 = MCU_PORTD.1
#bit    MCU_RD2 = MCU_PORTD.2
#bit    MCU_RD3 = MCU_PORTD.3
#bit    MCU_RD4 = MCU_PORTD.4
#bit    MCU_RD5 = MCU_PORTD.5
#bit    MCU_RD6 = MCU_PORTD.6
#bit    MCU_RD7 = MCU_PORTD.7
#byte MCU_PORTE = 0x009
#byte MCU_PCLATH = 0x00A
#byte MCU_INTCON = 0x00B
#bit    MCU_RBIF = MCU_INTCON.0
#bit    MCU_INTF = MCU_INTCON.1
#bit    MCU_TMR0IF = MCU_INTCON.2
#bit    MCU_RBIE = MCU_INTCON.3
#bit    MCU_INTE = MCU_INTCON.4
#bit    MCU_TMR0IE = MCU_INTCON.5
#bit    MCU_PEIE = MCU_INTCON.6
#bit    MCU_GIE = MCU_INTCON.7
#byte MCU_INTCON = 0x00B
#bit    MCU_T0IF = MCU_INTCON.2
#bit    MCU_T0IE = MCU_INTCON.5
#byte MCU_PIR1 = 0x00C
#bit    MCU_TMR1IF = MCU_PIR1.0
#bit    MCU_TMR2IF = MCU_PIR1.1
#bit    MCU_CCP1IF = MCU_PIR1.2
#bit    MCU_SSPIF = MCU_PIR1.3
#bit    MCU_TXIF = MCU_PIR1.4
#bit    MCU_RCIF = MCU_PIR1.5
#bit    MCU_ADIF = MCU_PIR1.6
#bit    MCU_PSPIF = MCU_PIR1.7
#byte MCU_PIR2 = 0x00D
#bit    MCU_CCP2IF = MCU_PIR2.0
#bit    MCU_BCLIF = MCU_PIR2.3
#bit    MCU_EEIF = MCU_PIR2.4
#bit    MCU_CMIF = MCU_PIR2.6
#word MCU_TMR1 = 0x00E
#byte MCU_T1CON = 0x010
#bit    MCU_TMR1ON = MCU_T1CON.0
#bit    MCU_TMR1CS = MCU_T1CON.1
#bit    MCU_T1SYNC = MCU_T1CON.2
#bit    MCU_T1OSCEN = MCU_T1CON.3
#bit    MCU_T1CKPS0 = MCU_T1CON.4
#bit    MCU_T1CKPS1 = MCU_T1CON.5
#byte MCU_T1CON = 0x010
#bit    MCU_T1INSYNC = MCU_T1CON.2
#byte MCU_TMR2 = 0x011
#byte MCU_T2CON = 0x012
#bit    MCU_T2CKPS0 = MCU_T2CON.0
#bit    MCU_T2CKPS1 = MCU_T2CON.1
#bit    MCU_TMR2ON = MCU_T2CON.2
#bit    MCU_TOUTPS0 = MCU_T2CON.3
#bit    MCU_TOUTPS1 = MCU_T2CON.4
#bit    MCU_TOUTPS2 = MCU_T2CON.5
#bit    MCU_TOUTPS3 = MCU_T2CON.6
#byte MCU_SSPBUF = 0x013
#byte MCU_SSPCON = 0x014
#bit    MCU_SSPM0 = MCU_SSPCON.0
#bit    MCU_SSPM1 = MCU_SSPCON.1
#bit    MCU_SSPM2 = MCU_SSPCON.2
#bit    MCU_SSPM3 = MCU_SSPCON.3
#bit    MCU_CKP = MCU_SSPCON.4
#bit    MCU_SSPEN = MCU_SSPCON.5
#bit    MCU_SSPOV = MCU_SSPCON.6
#bit    MCU_WCOL = MCU_SSPCON.7
#word MCU_CCPR1 = 0x015
#byte MCU_CCP1CON = 0x017
#bit    MCU_CCP1M0 = MCU_CCP1CON.0
#bit    MCU_CCP1M1 = MCU_CCP1CON.1
#bit    MCU_CCP1M2 = MCU_CCP1CON.2
#bit    MCU_CCP1M3 = MCU_CCP1CON.3
#bit    MCU_CCP1Y = MCU_CCP1CON.4
#bit    MCU_CCP1X = MCU_CCP1CON.5
#byte MCU_RCSTA = 0x018
#bit    MCU_RX9D = MCU_RCSTA.0
#bit    MCU_OERR = MCU_RCSTA.1
#bit    MCU_FERR = MCU_RCSTA.2
#bit    MCU_ADDEN = MCU_RCSTA.3
#bit    MCU_CREN = MCU_RCSTA.4
#bit    MCU_SREN = MCU_RCSTA.5
#bit    MCU_RX9 = MCU_RCSTA.6
#bit    MCU_SPEN = MCU_RCSTA.7
#byte MCU_RCSTA = 0x018
#bit    MCU_RCD8 = MCU_RCSTA.0
#bit    MCU_RC9 = MCU_RCSTA.6
#byte MCU_RCSTA = 0x018
#bit    MCU_RC8 = MCU_RCSTA.6
#byte MCU_RCSTA = 0x018
#bit    MCU_RC8_9 = MCU_RCSTA.6
#byte MCU_TXREG = 0x019
#byte MCU_RCREG = 0x01A
#word MCU_CCPR2 = 0x01B
#byte MCU_CCP2CON = 0x01D
#bit    MCU_CCP2M0 = MCU_CCP2CON.0
#bit    MCU_CCP2M1 = MCU_CCP2CON.1
#bit    MCU_CCP2M2 = MCU_CCP2CON.2
#bit    MCU_CCP2M3 = MCU_CCP2CON.3
#bit    MCU_CCP2Y = MCU_CCP2CON.4
#bit    MCU_CCP2X = MCU_CCP2CON.5
#byte MCU_ADRESH = 0x01E
#byte MCU_ADCON0 = 0x01F
#bit    MCU_ADON = MCU_ADCON0.0
#bit    MCU_GO = MCU_ADCON0.2
#bit    MCU_CHS0 = MCU_ADCON0.3
#bit    MCU_CHS1 = MCU_ADCON0.4
#bit    MCU_CHS2 = MCU_ADCON0.5
#bit    MCU_ADCS0 = MCU_ADCON0.6
#bit    MCU_ADCS1 = MCU_ADCON0.7
#byte MCU_ADCON0 = 0x01F
#bit    MCU_DONE = MCU_ADCON0.2
#byte MCU_ADCON0 = 0x01F
#bit    MCU_GO_DONE = MCU_ADCON0.2
#byte MCU_OPTION_REG = 0x081
#bit    MCU_PS0 = MCU_OPTION_REG.0
#bit    MCU_PS1 = MCU_OPTION_REG.1
#bit    MCU_PS2 = MCU_OPTION_REG.2
#bit    MCU_PSA = MCU_OPTION_REG.3
#bit    MCU_T0SE = MCU_OPTION_REG.4
#bit    MCU_T0CS = MCU_OPTION_REG.5
#bit    MCU_INTEDG = MCU_OPTION_REG.6
#bit    MCU_RBPU = MCU_OPTION_REG.7
#byte MCU_TRISA = 0x085
#byte MCU_TRISB = 0x086
#bit    MCU_TRISB0 = MCU_TRISB.0
#bit    MCU_TRISB1 = MCU_TRISB.1
#bit    MCU_TRISB2 = MCU_TRISB.2
#bit    MCU_TRISB3 = MCU_TRISB.3
#bit    MCU_TRISB4 = MCU_TRISB.4
#bit    MCU_TRISB5 = MCU_TRISB.5
#bit    MCU_TRISB6 = MCU_TRISB.6
#bit    MCU_TRISB7 = MCU_TRISB.7
#byte MCU_TRISC = 0x087
#bit    MCU_TRISC0 = MCU_TRISC.0
#bit    MCU_TRISC1 = MCU_TRISC.1
#bit    MCU_TRISC2 = MCU_TRISC.2
#bit    MCU_TRISC3 = MCU_TRISC.3
#bit    MCU_TRISC4 = MCU_TRISC.4
#bit    MCU_TRISC5 = MCU_TRISC.5
#bit    MCU_TRISC6 = MCU_TRISC.6
#bit    MCU_TRISC7 = MCU_TRISC.7
#byte MCU_TRISD = 0x088
#bit    MCU_TRISD0 = MCU_TRISD.0
#bit    MCU_TRISD1 = MCU_TRISD.1
#bit    MCU_TRISD2 = MCU_TRISD.2
#bit    MCU_TRISD3 = MCU_TRISD.3
#bit    MCU_TRISD4 = MCU_TRISD.4
#bit    MCU_TRISD5 = MCU_TRISD.5
#bit    MCU_TRISD6 = MCU_TRISD.6
#bit    MCU_TRISD7 = MCU_TRISD.7
#byte MCU_TRISE = 0x089
#bit    MCU_TRISE0 = MCU_TRISE.0
#bit    MCU_TRISE1 = MCU_TRISE.1
#bit    MCU_TRISE2 = MCU_TRISE.2
#bit    MCU_PSPMODE = MCU_TRISE.4
#bit    MCU_IBOV = MCU_TRISE.5
#bit    MCU_OBF = MCU_TRISE.6
#bit    MCU_IBF = MCU_TRISE.7
#byte MCU_PIE1 = 0x08C
#bit    MCU_TMR1IE = MCU_PIE1.0
#bit    MCU_TMR2IE = MCU_PIE1.1
#bit    MCU_CCP1IE = MCU_PIE1.2
#bit    MCU_SSPIE = MCU_PIE1.3
#bit    MCU_TXIE = MCU_PIE1.4
#bit    MCU_RCIE = MCU_PIE1.5
#bit    MCU_ADIE = MCU_PIE1.6
#bit    MCU_PSPIE = MCU_PIE1.7
#byte MCU_PIE2 = 0x08D
#bit    MCU_CCP2IE = MCU_PIE2.0
#bit    MCU_BCLIE = MCU_PIE2.3
#bit    MCU_EEIE = MCU_PIE2.4
#bit    MCU_CMIE = MCU_PIE2.6
#byte MCU_PCON = 0x08E
#bit    MCU_BOR = MCU_PCON.0
#bit    MCU_POR = MCU_PCON.1
#byte MCU_PCON = 0x08E
#bit    MCU_BO = MCU_PCON.0
#byte MCU_SSPCON2 = 0x091
#bit    MCU_SEN = MCU_SSPCON2.0
#bit    MCU_RSEN = MCU_SSPCON2.1
#bit    MCU_PEN = MCU_SSPCON2.2
#bit    MCU_RCEN = MCU_SSPCON2.3
#bit    MCU_ACKEN = MCU_SSPCON2.4
#bit    MCU_ACKDT = MCU_SSPCON2.5
#bit    MCU_ACKSTAT = MCU_SSPCON2.6
#bit    MCU_GCEN = MCU_SSPCON2.7
#byte MCU_PR2 = 0x092
#byte MCU_SSPADD = 0x093
#byte MCU_SSPSTAT = 0x094
#bit    MCU_BF = MCU_SSPSTAT.0
#bit    MCU_UA = MCU_SSPSTAT.1
#bit    MCU_R = MCU_SSPSTAT.2
#bit    MCU_S = MCU_SSPSTAT.3
#bit    MCU_P = MCU_SSPSTAT.4
#bit    MCU_D = MCU_SSPSTAT.5
#bit    MCU_CKE = MCU_SSPSTAT.6
#bit    MCU_SMP = MCU_SSPSTAT.7
#byte MCU_SSPSTAT = 0x094
#bit    MCU_I2C_READ = MCU_SSPSTAT.2
#bit    MCU_I2C_START = MCU_SSPSTAT.3
#bit    MCU_I2C_STOP = MCU_SSPSTAT.4
#bit    MCU_I2C_DATA = MCU_SSPSTAT.5
#byte MCU_SSPSTAT = 0x094
#bit    MCU_W = MCU_SSPSTAT.2
#bit    MCU_A = MCU_SSPSTAT.5
#byte MCU_SSPSTAT = 0x094
#bit    MCU_WRITE = MCU_SSPSTAT.2
#bit    MCU_ADDRESS = MCU_SSPSTAT.5
#byte MCU_SSPSTAT = 0x094
#bit    MCU_R_W = MCU_SSPSTAT.2
#bit    MCU_D_A = MCU_SSPSTAT.5
#byte MCU_SSPSTAT = 0x094
#bit    MCU_READ_WRITE = MCU_SSPSTAT.2
#bit    MCU_DATA_ADDRESS = MCU_SSPSTAT.5
#byte MCU_TXSTA = 0x098
#bit    MCU_TX9D = MCU_TXSTA.0
#bit    MCU_TRMT = MCU_TXSTA.1
#bit    MCU_BRGH = MCU_TXSTA.2
#bit    MCU_SYNC = MCU_TXSTA.4
#bit    MCU_TXEN = MCU_TXSTA.5
#bit    MCU_TX9 = MCU_TXSTA.6
#bit    MCU_CSRC = MCU_TXSTA.7
#byte MCU_TXSTA = 0x098
#bit    MCU_TXD8 = MCU_TXSTA.0
#bit    MCU_TX8 = MCU_TXSTA.6
#byte MCU_TXSTA = 0x098
#bit    MCU_TX8_9 = MCU_TXSTA.6
#byte MCU_SPBRG = 0x099
#byte MCU_CMCON = 0x09C
#bit    MCU_CM0 = MCU_CMCON.0
#bit    MCU_CM1 = MCU_CMCON.1
#bit    MCU_CM2 = MCU_CMCON.2
#bit    MCU_CIS = MCU_CMCON.3
#bit    MCU_C1INV = MCU_CMCON.4
#bit    MCU_C2INV = MCU_CMCON.5
#bit    MCU_C1OUT = MCU_CMCON.6
#bit    MCU_C2OUT = MCU_CMCON.7
#byte MCU_CVRCON = 0x09D
#bit    MCU_CVR0 = MCU_CVRCON.0
#bit    MCU_CVR1 = MCU_CVRCON.1
#bit    MCU_CVR2 = MCU_CVRCON.2
#bit    MCU_CVR3 = MCU_CVRCON.3
#bit    MCU_CVRR = MCU_CVRCON.5
#bit    MCU_CVROE = MCU_CVRCON.6
#bit    MCU_CVREN = MCU_CVRCON.7
#byte MCU_ADRESL = 0x09E
#byte MCU_ADCON1 = 0x09F
#bit    MCU_PCFG0 = MCU_ADCON1.0
#bit    MCU_PCFG1 = MCU_ADCON1.1
#bit    MCU_PCFG2 = MCU_ADCON1.2
#bit    MCU_PCFG3 = MCU_ADCON1.3
#bit    MCU_ADCS2 = MCU_ADCON1.6
#bit    MCU_ADFM = MCU_ADCON1.7
#byte MCU_EEDATA = 0x10C
#byte MCU_EEADR = 0x10D
#byte MCU_EEDATH = 0x10E
#byte MCU_EEADRH = 0x10F
#byte MCU_EECON1 = 0x18C
#bit    MCU_RD = MCU_EECON1.0
#bit    MCU_WR = MCU_EECON1.1
#bit    MCU_WREN = MCU_EECON1.2
#bit    MCU_WRERR = MCU_EECON1.3
#bit    MCU_EEPGD = MCU_EECON1.7
#byte MCU_EECON2 = 0x18D

 

 

bgRrb29.png

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...