Pesquisar neste blog

12/08/2020

Prova 1 2020/1

Prova aplicada em 25/06/2020 
1) Pisca LEDs  

matrícula = 4230948754   LED1 --> Ex: 7 + 5 + 4 + 50 = 66 Hz

LED1 --> piscar com frequência U + P + A + 50   Hz
LED2 --> piscar com frequência U + P + 50 Hz
LED3 --> piscar com frequência U + 50 Hz

U - Último número da matricula
P - Penúltimo número da matrícula
A - Antepenúltimo número da matrícula

Resolução:

Código feito em CCS C Compiler

#include <main1.h>
#use delay(clock = 20MHz)

//Matricula = 2013178440488
int U = 4 + 8 + 8 + 50;
int P = 8 + 8 + 50;
int A = 8 + 50;

void main(){

   while(TRUE){
      
         output_high(pin_b0);
         delay_ms(1000/U);
         output_low(pin_b0);
         delay_ms(1000/U);
      
         output_high(pin_b1);
         delay_ms(1000/P);
         output_low(pin_b1);
         delay_ms(1000/P);
      
         output_high(pin_b2);
         delay_ms(1000/A);
         output_low(pin_b2);
         delay_ms(1000/A);
         
   }
}




2) Fazer um programa para bord3 que quando o botão S3 conectado a B1 o PIC grava em sua memória interna seu (aluno) primeiro nome e ao precionar o botão S3 conectado ao B2 O PIC lê o que foi escrito na memória e escreve no LCD com a sequência invertida das letras.

Ex:   
HENRIQUE

EUQIRNEH

Resolução:

Código feito em CCS C Compiler

#include <main.h>
#include <LCD.C>
#include <lcd.c>
#use delay(clock=20MHz)

const char vetor[]= "HENRIQUE";
int i, cont = 0;

void crescente(){
   printf(lcd_putc,"\f");//Limpa tela
   for(i = 0; i < sizeof(vetor)/sizeof(int); i++){
      lcd_gotoxy(i+1, 1);
      lcd_putc(vetor[i]);
      delay_ms(200);
   }
}

void decrescente(){
   printf(lcd_putc,"\f");
   for(i = sizeof(vetor)/sizeof(int) -2; i >= 0; i--){
      //lcd_gotoxy(i+1, 2);
      lcd_putc(vetor[i]);
      delay_ms(200);
   }
}

void main(){
   lcd_init();
   lcd_init();

   while(TRUE){
      
      if(input(PIN_B0) == true){
         if(cont %2 == 0){//em par, crescente
            crescente();
            cont++;

         }else{//em ímpar, decrescente
            decrescente();
            cont++;
            
         }
      }
      //TODO: User Code
   }

}



















3) Fazer um programa para board3 que lê os valores (inteiro de oito bits) de tensão do potenciômetro, numa frequência de 10 Hz durante 5 segundos. Guarda esses valores na memória 24C04 que esta nessa placa. Quando o botão S3 é pressionado, o PIC envia esses valores via serial. A sequência de valores deve ser precedida pelo seu primeiro nome.

Ex:  ......., 28, 50, 58, 55, 'N', 'A', 'I, 'R', 'I', 'M'    --> PORTA SERIAL

Resolução:

Código feito em CCS C Compiler

#include <main.h>
#include <LCD.C>
#include <lcd.c>

#FUSES HS                   //High speed Osc  (> 4mhz for PCM/PCH) (>1 )
#FUSES NOPUT               //No Power Up Timer
#FUSES NOPROTECT           //Code not protected from readin
#FUSES NODEBUG             //No Debug mode for LCD
#FUSES NOBROWNOUT          //No brownout reset
#FUSES NOLVP               //No low voltage prging, B3(PIC16) or B5
#FUSES NOCPD               //No EE protection
#FUSES NOWRT               //Program memory not write protected

#define lcd_d/ pin_d/d

#use delay(clock = 20MHz)

#use rs232(baud=9600, xmit = PIN_C6, rcv = PIN_C7, parity = N, bits = 8, errors)

#include "2404.C"

void main(){
   unsigned int i, j, aux = 0;
   setup_adc_ports(AN0_AN1_AN3), (ADC_CLOCK_DIV_16);
   setup_psp(PSP_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED, 0, 1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   
   
   lcd_init();
   delay_ms(10);
   init_ext_eeprom();
   delay_ms(10);
   
   printf(lcd_putc,"\f iniciando...");
   delay_ms(2000);
   
   set_adc_channel(1);
   delay_us(50);
   
   while(TRUE){
      if(!input(PIN_B0)){
         printf(lcd_putc,"\fLeitura do Potenciometro\n\rEscrevendo em Menor");
         write_ext_eeprom(1, 'H');
         write_ext_eeprom(2, 'E');
         write_ext_eeprom(3, 'N');
         write_ext_eeprom(4, 'R');
         write_ext_eeprom(5, 'I');
         write_ext_eeprom(6, 'Q');
         write_ext_eeprom(7, 'U');
         write_ext_eeprom(8, 'E');
         
         for(j = 0; j <= 58; j++){
            aux = read_adc();
            write_ext_eeprom(j, aux);
            delay_ms(100);
         }
         
         delay_ms(3000);
         printf(lcd_putc,"\f");//limpa tela
      }
      
      if(!input(PIN_B2)){
         printf(lcd_putc,"\fExpedindo informação...");
         for(i = 1; i <= 8; i++){
            printf(lcd_putc, "%c, ", read_ext_eeprom(i));
            delay_ms(100);
         }
         
         for(i = 9; i <= 58; i++){
            printf(lcd_putc, "%u, ", read_ext_eeprom(i));
            delay_ms(100);
         }
      }
      printf(lcd_putc, "\f");
      //TODO: User Code
   }
}

Nenhum comentário: