Я начинающий программист МК, поэтому скорее всего допустил глупые ошибки, если не сложно могли бы вы помочь мне поправить его:
Код: Выделить всё
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.8 Professional
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 05.05.2012
Author : F4CG
Company : F4CG
Comments:
Chip type : ATtiny2313
Clock frequency : 4,000000 MHz
Memory model : Tiny
External SRAM size : 0
Data Stack size : 32
*****************************************************/
#include <tiny2313.h> // объявляем библиотека ввода/вывода
#include <delay.h> // объявляем библиотеку для задержки
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
// 1 Wire Bus functions
#asm
.equ __w1_port=0x12 ;PORTD
.equ __w1_bit=2
#endasm
#include <1wire.h>
#include <ds1820.h>
#include <delay.h>
#define MAX_DEVICES 6
unsigned char rom_codes[MAX_DEVICES][9];
// DS18x20 Temperature Sensor functions
#include <ds18b20.h>
#include <bcd.h>
#include <1wire.h>
#include <stdio.h>
#define digit1 PORTD.6 //катод первой цифры
#define digit2 PORTD.5 //катод второй цифры
#define digit3 PORTD.4 //катод третей цифры
flash char digits[] = { //создаём массив с цифрами
0b00000011, //0
0b10011111, //1
0b00100101, //2
0b00001101, //3
0b10011001, //4
0b01001001, //5
0b01000001, //6
0b00011111, //7
0b00000001, //8
0b00001001, //9
0b11111101, //знак минуса
0b11111111 //пустота
};
char digit_out[3], cur_dig,x; //переменные для работы с LED
unsigned int indication; //переменная для хранения чисел
unsigned char devices; //переменная в которой количество присоеденённых датчиков
int temp;
short int znach,i;
void recoding(void) { //функция для перекодировки из hex в dec
if (indication<1000) { //начинаем преобразование если число < 1000 так как 3-х
//разрядный LED
digit_out[0]=indication%10; //Делим на 10 остаток в масив 1-разряд
indication=indication/10; //Оставляем 2 разряда
digit_out[1]=indication%10; //Делим на 10 остаток в масив 2-разряд
digit_out[2]=indication/10; //Делим на 10 целое число в масив 3-разряд
} //*******
} //*******
//таймер 0
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
PORTB=0xFF; //чтобы предотвратить эффект “тени” на соседних индикаторах
switch (cur_dig){
case 0:{digit3=0; digit1=1; break;}; //подаём питание на разряд 3
case 1:{digit1=0; digit2=1; break;}; //подаём питание на разряд 2
case 2:{digit2=0; digit3=1; break;}; //подаём питание на разряд 1
}
PORTB=digits[digit_out[cur_dig]]; //выводим с каждым срабатыванием таймера число с//мссива в порт В, но не для всех разрядов сразу
cur_dig++; //с каждым срабатыванием таймера, увеличиваем
//переменную cur_dig на 1
if(cur_dig==3) cur_dig=0; //если cur_dig = 3 обнуляем
}
void main(void)
{
#asm("cli");
devices=w1_search(0xf0,rom_codes);
#asm("sei");
// Инициализация портов ввода/вывода
// Port B initialization
PORTB=0xFF;
DDRB=0xFF;
// Port C initialization
PORTA=0x00;
DDRA=0x00;
// Port D initialization
// Func6=Out Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
// State6=1 State5=1 State4=1 State3=P State2=P State1=P State0=P
PORTD=0x7F;
DDRD=0x70;
// Настраиваем таймер 0// Clock source: System Clock// Clock value: 4000,000 kHz
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x02;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x02;
// разрешаем прерывания
#asm("sei")
while (1)
{
indication=znach; //
recoding(); //вызываем функцию обработки
#asm("cli");
znach=ds1820_temperature_10(&rom_codes[i][0])/10;
#asm("sei");
}
}

