Jump to content

    
Sign in to follow this  
Andrew82

atmega8+ds18b20

Recommended Posts

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");
}

Edited by rezident
Оформление цитаты исходника.

Share this post


Link to post
Share on other sites
В протеусе 7.6 sp4 такая связка работает. Ищите в себе.

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this