En aquest cas el dispositiu mesura el corrent i en mostra el valor eficaç a la pantalla amb dos dígits decimals. Si es prem el polsador 0 la pantalla mostra, addicionalment, la potència consumida, sense decimals. A més, els LED s'encenen per indicar si el corrent és més o menys elevat.
| Intensitat | Nombre de LED |
| 0 < I ≤ 2 A | 1 |
| 2 < I ≤ 6 A | 2 |
| 6 < I ≤ 11 A | 3 |
| I > 11 | 4 |
El programa és el següent:
#pragma config FOSC = INTRCIO, WDTE = OFF, PWRTE = OFF, MCLRE = OFF, CP = OFF #pragma config CPD = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF #include <xc.h> #include <math.h> #define _XTAL_FREQ 4000000 #define numEsp 2 #define Polsador RA3 // Li assigna un nom a l'adreça del polsador
char Polsad; char Ref = 0; char a = 0; unsigned int refer, mesura; int Valor,intpot; unsigned int suma = 0; float mitjana, RMS, Val,pot; unsigned char compta = 0; char Digits[5]; // Reducir el tamaño del arreglo
void configuracio(void); void auxiliar(void); void Esborra(void); void EnviaL(char Caracter);
void main(void) {
configuracio();
while (1) {
if (compta == 32) {
Esborra();
mitjana = (float)suma / compta;
Val = (30.0 / numEsp) * 5 * 1.1107 * mitjana / 1023.0;
RMS = Val * 100;
Valor = (int)round(RMS);
pot=Val*230;
intpot=(int)pot;
if (Val < 2) {
PORTC = 0b00000001;
} else if (Val < 6) {
PORTC = 0b00000011;
} else if (Val < 11) {
PORTC = 0b00000111;
} else {
PORTC = 0b00001111;
}
compta = 0;
suma = 0;
for (signed char j = 0; j < 5; j++) { // Reducir la cantidad de dígitos
Digits[j] = Valor % 10 + '0';
Valor /= 10;
}
if (Digits[4] == '0') {
Digits[4] = ' ';
if (Digits[3] == '0') {
Digits[3] = ' ';
}
}
for (signed char j = 4; j >= 0; j--) { // Modificar los índices para el nuevo tamaño del arreglo
if (j == 1) {
EnviaL(',');
}
EnviaL(Digits[j]);
}
EnviaL(' ');
EnviaL('A');
a=0;
}
if(a==0){
if(Polsador==0){
EnviaL(' ');
EnviaL(intpot/100 + '0');
EnviaL((intpot%100)/10+'0');
EnviaL((intpot%10)+'0');
EnviaL(' ');
EnviaL('W');
a=1;
compta = 0;
suma = 0;
}
}
if(compta == 0) {
auxiliar();
}
}
}
void __interrupt() temporit(void) {
if (TMR1IF) {
TMR1ON = 0;
TMR1H = 253;
TMR1L = 143;
TMR1ON = 1;
TMR1IF = 0;
GO_DONE = 1;
while (GO_DONE);
mesura = (ADRESH << 8) | ADRESL;
suma += abs(mesura - refer);
compta++;
}
if (compta == 32) {
TMR1ON = 0;
}
}
void configuracio(void) {
TRISC = 0b11110000;
TRISB = 0;
TRISA = 0xFF;
__delay_ms(2000);
BRGH = 1;
BRG16 = 0;
SPBRG = 25;
SYNC = 0;
TX9 = 0;
SPEN = 1;
TXEN = 1;
ANSEL = 0b00000101;
ANSELH = 0;
ADCON1 = 0b00010000;
ADCON0 = 0b00001001;
INTCON = 0b01000000;
PIE1 = 0b00000001;
TMR1IF = 0;
TMR1H = 253;
TMR1L = 143;
T1CON = 0b00000000;
GIE = 1;
}
void auxiliar(void) {
ADCON0 = 0b10100001;
GO_DONE = 1;
while (GO_DONE);
GO_DONE = 1;
while (GO_DONE);
refer = (ADRESH << 8) | ADRESL;
ADCON0 = 0b10100101;
GO_DONE = 1;
while (GO_DONE);
__delay_ms(1000);
TMR1H = 253;
TMR1L = 143;
TMR1ON = 1;
}
void EnviaL(char Caracter) {
TXREG = Caracter;
__delay_ms(1);
while (!TXIF)
;
}
void Esborra(void) {
EnviaL(254);
EnviaL(1);
}

Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.