O código fonte:
/* * usando o modo comparador de tensão no MPlab XC8 * * Compilador : MPlabXC8 * Microcontrolador: 16F628A * Autor: aguivone * Versão: 1 * Data : 01 de março de 2013 * compara 2 valores de tensão. * */ #include <stdio.h> #include <stdlib.h> #define _XTAL_FREQ 20000000 // cristal de 20 Mhz #include <xc.h> #define delay_us(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000000.0))) #define delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000.0))) /////////////////////////////////////////////////////////configuraçôes////////////////////////////////////////////////// #define led RB0 #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled) #pragma config MCLRE = OFF // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD) #pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled) #pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming) #pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) //////////////////////////////////////////////funçoes auxiliares//////////////////////////////////////////////////////// void inicializa_comparador(int modo) { /* * 0 ligado mas com saidas desligadas * 1 3 entradas,sendo uma selecionavel o pino(entrada não inversora comum ) * 2 2 entradas,sendo duas entradas ligadas a referencia de tensão interna(entrada não inversora comum) * 3 3 entradas(entrada não inversora comum ) * 4 2 comparadores independentes * 5 habilita apenas 1 comparador (C2) * 6 3 entradas(entrada não inversora comum ) e saidas independentes * 7 os dois comparadores desligados */ CMCON = modo;//saidas não invertidas VRCON = 0;//por garantia desliga-se o modulo de referencia de tensão } //////////////////////////////////////////////////////Rotina principal/////////////////////////////////////////////////////////////// void main(void) { TRISA = 0X07; PORTA = 0; // limpar as portas que estão configuradas como saidas TRISB = 0X00; PORTB = 0; // limpar as portas que estão configuradas como saidas inicializa_comparador(6);//lembre se que deve ser colocado um resistor de pull up no pino ra4,pois ele é dreno aberto led = 0;//desliga led for(;;) { led = 1; delay_ms(100); led = 0; delay_ms(100); }//loop infinito }
Nenhum comentário :
Postar um comentário
olá,digite aqui seu comentário!