Beruflich Dokumente
Kultur Dokumente
CARACTERÍSTICAS ESPECIAIS
Power-on Reset
Power-up Timer
Brown-out Reset
Watchdog Timer; (ligado diretamente ao oscilador, é um contadorque atinge um valor
X e reseta)
Modo SLEEP
Code Protect
Faz-se alterações no bit fuse
A função getch serve p/ o programa esperar até que vc aperte um botão, senão ele fecha soz
inho e vc ñ ve nda
o fflush serve pra limpar a memória
ATRIBUIÇÃO
sintaxe
<identificador>=<expressão>
Exemplo:
X=2;
X=y;
X=y+2;
X=getcUSART();
Operadores
+ (adição)
- (subtração)
* (multiplicação)
/ (divisão)
% (resto da divisão)
++ (incremento, +1)
- - (decremento, -1)
> (maior que)
>= (maior ou igual que)
< (menor que)
<= (menor ou igual que)
== (igual a)
!= (diferente de)
Relacionais
Operadores lógicos relacionais
&& (E;AND)
|| (OU;OR)
! (COMPLEMENTO;NOT)
Bit-a-bit
& (E;AND)
| (OU;OR)
^(OU-EXCLUSIVO(XOR))
~(COMPLEMENTO-NOT)
>> (DESLOCAMENTO A DIREITA)
<<(DESLOCAMENTO A ESQUERDA)
eXEMPLO: X=00010000 é igual a X=2
se X<<3(deslocou 3 vezes) então X=16
OPERADORES
Incremento e decremento
++ - -
Pré-incremento / pré-decremento
X= - -y;
X= ++z;
*Você subtrai/adiciona e depois armazena o valor
Pós-incremento / pós- incremento
X=y- -
X=Z++
*Você armazena o valor de X depois subtrai/adiciona esse valor.
BIBLIOTECA DE FUNÇÕES MATEMÁTICAS: math.h
*acos
*asin
*atan
*atan2
*ceil
*cos
*cosh
*exp
*fabs
*floor
*fmod
*frexp
*Idexp
*log
*log10
*mchptoieee
etc...
CUIDADOS COM OPERAÇÕES MATEMÁTICAS
Otimização de memória
*Escolha do menor tamanho que atenda a necessidade
*evite o uso de variáveis dos tipos float e double
*Cuidado com operações de variáveis de diferente tipos
*Cuidado com atribuição de valores fora da faixa de cada tipo
*Cuidado com resultados intermediários que extrapolam a faixa de valores
OBSERVAÇÃO: SE DURANTE O PROJETO APARECER FILE NOT FOUND É PQ VC Ñ INSTALOU NO LOCAL PAD
RÃO, DEVE-SE EXCLUIR PQ O COMPILADOR ACHA SOZINHO DPS
BUILD ALL PARA COMPILAR
PROGRAM PARA GRAVAR NO MICROCONTROLADOR
USA-SE O PROGRAMMER<ICD2 e dps RESET NO CANTO SUPERIOR DIREITO
Para gravar no módulo vai em PROGRAM
Não desconectar o USB para não perder o contato com o ICD2
ACESSO A I/O EM C
Os portais e seus pinos (assim como os demais registros de função especial) estão defi
nidos no arquivo P18F4550.h
Acesso aos bits:
PORTDbits.RD0=1;
X=PORTBbits.RB1;
Configuração de direção
TRISD=Ox0F; ou DDRD=0x0F
TRISDbits.TRISD2=o; ou DDRDbits.RD2
*melhorando o código com a diretiva #define
SINTAXE
#define<identificado> <texto>
Exemplo
#define TMAX 30
#define SW0 PORTBbits.RB0
#define LEDS PORTD
#define LED0 PORTDbits.RD0
#define VENTILADOR PORTDbits.RD1
#define ALARME PORTDbits.RD7
é a msm coisa que por exemplo LEDS=PORTD
TODO REGISTRO É MAIÚSCULO
ESTRUTURAS DE DECISÃO
Executam blocos de código baseado na avaliação do resultado de uma expressão como verdad
eiro ou falso.
IF
If-else
If-else-if
Operador ternário condicional
Switch
SINTAXE
if(<condição>) {
//bloco verdadeiro
}
*Exemplo:
if(temperatura>40){
VENTILADOR=1;
ALARME = 0;
}
else{
VENTILADOR = 0;
ALARME = 0;
}
*Exemplo de decisão If-else-if
if(temperatura<=40){
VENTILADOR = 0;
ALARME = 0;
}
else if(temperatura <=60){
VENTILADOR = 1;
ALARME = 0;
}
else{
VENTILADOR =1;
ALARME = 1;
}
*Exemplo de decisão If-&&
if(Valor>674 && Valor<898){
BAR0=0;
}
else (BAR0=1);
ROTINAS DE ATRASO
Tcy = 4.Tosc
Biblioteca: delays.h
ESTRUTURAS DE REPETIÇÃO
Objetivo: Repetir um trecho de código enquanto uma condição for verdadeira
*Do-While(faça-enquanto)
Primenrio executa o bloco, depois testa a condição
Executa o bloco de comando ao menos uma vez
*While (Enquanto)
Primeiro testa, depois executa o bloco
Pode não executar o bloco nenhuma vez
*For (Para)
A repetição do bloco acontece conforme contagem definida!
________________________________________________________________________________
______________________________________________
EXERCÍCIO 7, FAZENDO SIMULAÇÃO NO PC
PRIMEIRO DEVE-SE COMPILAR O PROGRAMA E IR EM WATCH E ADICIONAR OS PORTS USADOS E
AS VARIÁVEIS(COLOCAR OS VALORES EM BINÁRIO)
DPS ADICIONAR O STIMULUS EM DEBUGGER, STIMULLUS E NEW WORBOOK
ADICIONAR O PIN E COLOCAR ACTION TOGGLE
DPS ACHAR AS POSIÇÕES EM STEP IN E STEP OUT, SIMULANDO O SENSOR IDENTIFICANDO AS LAT
AS
________________________________________________________________________________
______________________________________________
ESTRUTURAS DE REPETIÇÃO
Sintaxe:
do{
[bloco]
}while(<condicao>);
*Exemplo:
do{
t=medirTemp();
}while(t<20);
Sintaxe:
while(<condição>){
[bloco]
}
*Exemplo:
while(!fimDeCurso){
motor=1;
}
motor=0;
Sintaxe:
for(<valor_inicial>;<valor_final>;<passo>){
[bloco]
*Exemplo
for(i=o;I<10;i++){
PORTD=~PORTD;
delay10KTCYx(200);
}
for(i=10;i;i--){
PORTD=~PORTD;
delay10KTCYx(200)
}
COMANDO BREAK
Aborta a execução de repetição
se vc usa break vc para a rotina em questão(no caso de um estopo, pula p/ o próximo)
*Exemplo
for(i=10;i>0;i--){
if(!CHAVE)break;
LED = 1;
Delay10KTCYx(20);
LED=0;
Delay10KTCYx(20);
}
LOOP INFINITOS
Para repetir um bloco de código indefinidamente
*VÁRIAS FORMAS DE FAZER
while(1){
[bloco]
}
for(;;){
[bloco]
}
*PARA "TRAVAR" O PROGRAMA:
while(1):
________________________________________________________________________________
____
REVISÃO: O FOR É INFINITO E O WHILE E DO-WHILE SÃO FINITOS, DEPENDEM DE UMA CONDIÇÃO
O BREAK PAUSA
O LOOP INFINITO É FEITO QUANDO SE QUER UM FUNCIONAMENTO CONTÍNUO
LATCbits.LATc1 (declaração, igual o PORT)
PORTBbits.RB0 (exemplo)
DDR Define os portais como saída(PORTA,PORTB,PORTC)
________________________________________________________________________________
____
A exclamação (!) significa negação
O tio (~) significa o inverso
void significa nulo, não volta nenhum valor
FUNÇÕES
Mesmo que subrotinas em Assembly
Síntaxe
<tipo> nome_da_funcao(<tipo><arg1>,<tipo><arg2>,...)
{
/*geralmente aqui temos uma declaração de variáveis*/
/*os comandos da função vem em seguida*/
return(<var>); /*retorna o parâmetro de saída/
}
Usa-se return quando o main ñ é do tipo void
return(z), no exemplo de z=a+b
o valor é armazenado em z
____________________________________________________
VOID NÃO RETORNA NADA
O exemplo abaixo ilustra uma função de início de código (função principal).
void main (void){
//***Declaração de variáveis
//***Programa (linhas de codigo)
}//***fim
____________________________________________________
se não colocar return não retorna nda
no caso, o resultado da soma de dois números Z=X+Y é um variável local e será perdida
INTERRRUPÇÃO
é a capacidade de parar o programa principal e atender um periférico
é a qualquer hora e depende do periférico, interrompe-se o programa a qualquer momen
to
*Dois níveis de interrupção
Alta prioridade
Baixa prioridade
A interrupção de alta prioridade interrompe o tratamento da interrupção de baixa priorid
ade
Prioridade pode ser habilitada ou não
SELEÇÃO DE PRIORIDADE
RCONbits.IPEN = 0 : sem prioridade
RCONbits.IPEN = 1 : com prioridade
sem prioridade todas tratadas como prioridade
HABILITAÇÃO GLOBAL SEPARADA
*com prioridade
INTCONbits.GIEH : habilita alta prioridade
INTCONbits.GIEL : habilita de baixa prioridade
*sem prioridade
INTCONbits.GIEH = GIE DO pic16
intconBITS.GIEL = PELE DO PIC16
Tanto eventos de alta como de baixa prioridade causam retorno ao modo normal
vetores de interrupção
Alta prioridade: 0008h
Baixa prioridade: 0018h
_____________________________________________
O FOR É PRA SITUAÇÕES DETERMINADAS POR VC
WHILE É PARA VARIAÇÕES E TESTES NO PROGRAMA
_____________________________________________
MÓDULO CCP
CAPTURA
Captura o valor do Time 1 nos seguintes eventos:
*1 transição de descida e, RB3/CCP1
*1 transição de subida em RB3/CCP1
*4 transições de subida em RB3/CCP1
*16 transições de subida em RB3/CCP1
COMPARAÇÃO
Compara CCP1H:CCp1L com TMR1H:TMR1L
Quando coincide:
Seta o Flag CCP1|F
Zera time 1 (opcional)
Força 0 ou 1 no pino RB3(opcional)
Dispara conversão do ADC(opcional)
Modos
PWM= geração de trem de pulsos)
Controle de Duty-cicle (10bits)
Base de tempo: Timer 2
Nível alto é controlado pelo DC(duty-cicle)
é interessante pq se eu fosse fazer a conversão do sinal analógico para digital eu iri
a variar a tensão, qto mais tempo eu estiver em nível alto maior será a tensão
varia de 0V a 5V por exemplo
é dado pela % do Tempo(período)
BIBLIOTECA pwm.h
funções pág 189
Teclado
Com 8 pinos é possível faz uma varredura com 16 teclas
é como uma batalha naval
0 1 0 0
0
0
0
1 x
x é a tecla pressionada
HABILITAR PULL-ups!
Interrupção por mudança de estado em PORTB
BIBLIOTECA DE FUNÇÕES
void OpenKeyboard(void)
char getKey(void)
PIC 18F1220
uTILIZANDO PROTOBOARD+MÓDULO