Recientemente, mi microcontrolador no ejecuta ningún programa, estoy probando el siguiente código:
#include <mega32.h>
#include <delay.h>
#define xtal 16000000
void main(void)
{
DDRA=0xFF;
DDRB=0xFF;
DDRC=0xFF;
DDRD=0xFF;
while (1)
{
PORTA=0x00;
PORTB=0x00;
PORTC=0x00;
PORTD=0x00;
delay_ms(500);
PORTA=0xFF;
PORTB=0xFF;
PORTC=0xFF;
PORTD=0xFF;
delay_ms(500);
}
}
He probado cuatro controladores diferentes, tanto mega32a como mega16a. El código es compilado por CodeVisionAVR Evaluation y programado por Atmel Studio 6.1 (también probé PROGISP). El programador es una programación MK2 e ISP original.
Fusibles:
Cristal de reloj interno y externo probado. LED con 220 resistencia conectada a un pin.
Otro código de prueba:
Cuando programo el siguiente código:
#include <mega32.h>
#include <delay.h>
void main(void)
{
DDRA=0xFF;
DDRB=0xFF;
while (1)
{
PORTA=0x00;
PORTB=0x00;
delay_ms(500);
PORTA=0xFF;
PORTB=0xFF;
delay_ms(500);
}
}
Todos los LED están apagados, y cuando programo el siguiente código:
#include <mega32.h>
#include <delay.h>
void main(void)
{
DDRA=0xFF;
DDRB=0xFF;
while (1)
{
PORTA=0xFF;
PORTB=0xFF;
delay_ms(500);
PORTA=0x00;
PORTB=0x00;
delay_ms(500);
}
}
Todos los LED están encendidos. ¿Cuál es el problema? Otra prueba:
#include <mega32.h>
#include <delay.h>
#define xtal 16000000
void main(void)
{
DDRA=0xFF;
DDRB=0x01;
while (1)
{
PORTA=0x00;
PORTB=0x02;
delay_ms(500);
PORTA=0xFF;
PORTB=0x00;
delay_ms(500);
}
}
El segundo pin del puerto B tiene poca luz y PORTB=0x00;
después delay_ms(500);
No importa si es: 0x00;
o0xFF;
De lo que declaró en la última declaración sobre dos códigos, uno con todos los LED encendidos y otro apagado, primero suponga que estas condiciones son verdaderas:
Entonces el problema es sobre su reloj. Debido a que la diferencia de sus dos últimos códigos se trata principalmente de antes de la declaración "delay_ms (500)". Entonces creo que el problema se relaciona con el reloj de su MCU. En primer lugar, compruebe la frecuencia de su programa mediante:
Proyecto->Configurar->C-Compiler->Frecuencia de reloj.
y asegúrese de que sea 8 en la unidad de megahercios.
Ahora cambie sus bits de fusible MCU a:
BAJO: 0xE4
Alto: 0xD9
¡Ahora esperamos que su código funcione bien!
Dzarda
musefiano
krambo
musefiano
tom carpintero
#define xtal
no hará absolutamente nada en absoluto, no lo usará en ningún lado. Además, los #defines son visibles solo en el archivo en el que están definidos y cualquiera que incluya el archivo.<delay.h>
no va a ver nada de ti#define
en tu archivo c. Debe definir F_CPU globalmente. Asumiendo GCC, puede usar el interruptor de línea de comando:-DF_CPU=16000000