Программирование микроконтроллера

Unfeshe
Offline
Зарегистрирован: 04.06.2019
Всем привет, возникла проблема с кодом. Препод злюка не хочет помогать с этим. Суть проблемы. Пишу код на микроконтроллер Atmega 32, в Atmel Studio 7.0, возникает проблема что в этом коде не работает задержка. #define F_CPU 8000000 
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
 
char M, a=1, b=2;
 
 
int main(void)
{
 
 
 
 
 
 
 
 
 while (1)
 {
  PORTA=0b00000000;
  DDRA=0b11111111;
  PORTB=0b00000000;
  DDRB=0b11111111;
  PORTC=0b00000000;
  DDRC=0b11111111;
  PORTA|=0b00000001;
  _delay_ms(100);
  PORTA|=0b00000000;
  _delay_ms(300);
  /*M=b;
  switch (M)
  {
   case 1: ;
   {
    PORTB|=(1<<0);
    _delay_ms(100);
    PORTB|=(1<<0);
    _delay_ms(300);
    
    
   break;}
   case 2: ;
   {
    PORTA|=(1<<0);
    _delay_ms(100);
    PORTA|=(1<<0);
    _delay_ms(300);
    PORTA|=(1<<0);
    _delay_ms(300);
    
   break;}
   
   default :;
  }/*/
 }
}
Как только убираю delay ms, программа работает и Proteus показывает как диод мигает по циклу. Мне нужно что бы диод мигал с задержкой которая указана в скобках, помогите прошуу..
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Unfeshe пишет:

возникла проблема с кодом.

У Вас проблема не только и не столько с кодом.

Изучите внимательно, а потом сделайте ещё одну попытку зайти.

Schwarz78
Offline
Зарегистрирован: 19.01.2019

/del

Ваш код немного ужасен. Почитайте про синтаксис языка С на досуге.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

судя по кол-ву "наложеного", либо 2, либо 3, либо ничего.

но т.к. M = b, класть будем 3 раза))

nik182
Offline
Зарегистрирован: 04.05.2015

Proteus on такой. Может моргать, может не моргать. А на платах всё работает.