Перейти к содержанию
    

atmega8+ds18b20

atmega8+ds18b20 проблема в протеусе не работает, есть вопрос, а в живую будет работать кто-нить подскажите?! Написано в кодевижион сильно ногами не пинать только начинаю разбираться подскажите в живую будет работать или нет и какие фьюзы ставить при прошивке от встроенного генератора?!

#define xtal 1000000L
#include <mega8.h>
#asm
   .equ __w1_port=0x12 ; //PORTD     
   .equ __w1_bit=0
#endasm
#include <ds18b20.h>
#include <delay.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAX_DEVICES 8
unsigned char pos=0;
unsigned char str[4];
unsigned char st;
unsigned char mesto[4]={
0b11110111,
0b11111011,
0b11111101,
0b11111110
};
unsigned char rom_codes[MAX_DEVICES][9];
unsigned char i,devices; 
int z; 
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
TCNT2=0x00;
}
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
 TCNT0=0x00;
switch (str[pos]) 
   {
   case '0':
   i=0b00111111;
   break;
   case '1':
   i=0b00000110;
   break;
   case '2':
   i=0b01011011;
   break;
   case '3':
   i=0b01001111;
   break;
   case '4':
   i=0b01100110;
   break;
   case '5':
   i=0b01101101;
   break;
   case '6':
   i=0b01111101;
   break;
   case '7':
   i=0b00000111;
   break;
   case '8':
   i=0b01111111;
   break;
   case '9':
   i=0b01101111;
   break; 
   case '-':
   i=0b01000000;    // Минус
   break;
   case 'B':
   i=0b01100011;    // Градус
   break;
   case 'C':
   i=0b00000000;   //  пусто
   break;         
   };
PORTC=mesto[pos];
PORTB=i; 
pos++;
if (pos==4) pos=0;  
}
void main(void)
{
#asm("cli");
TIMSK=0b01000001;
TCCR0=0b00000001;
TCCR2=0b00000010;
DDRB=0xFF;
DDRC=0b00001111;
DDRD=0x01;
PORTB=0b01000000;
PORTC=0b00001111;
devices=w1_search(0xf0,rom_codes);
z=ds18b20_temperature(&rom_codes[0][0]);   
//z=100;
itoa(z, str);

if (z>=100) str[3]='B';     

if (z==0) {str[0]='C';str[1]='C';str[2]='0';str[3]='B';goto ggg;};      
if ((z>=10) && (z<100)) 
{
  str[3]='B';
  str[2]=str[1];
  str[1]=str[0];
  str[0]='C'; 
  goto ggg;
};  
if ((z>0) && (z<10)) 
{
  st=str[0];

  str[0]='C';
  str[1]='C';
  str[2]=st;
  str[3]='B';
  goto ggg;
};     
if (abs(z)<10)
 {
  str[3]='B';
  str[2]=str[1];
  str[1]=str[0];
  str[0]='C';
  goto ggg;
 };        

if (abs(z)>=10)
 {
  str[3]='B';

 }; 


 ggg: 
#asm("sei");
}

Изменено пользователем rezident
Оформление цитаты исходника.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В протеусе 7.6 sp4 такая связка работает. Ищите в себе.

не могли бы выслать проект на протеусе может я что не так делаю? протеус сейчас закачаю у меня показывает на индикаторе все девятки

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...