помогите разобратся что не так?

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Закрыто
dimka86
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Вт фев 21, 2012 15:05:12

помогите разобратся что не так?

Сообщение dimka86 »

пишу тестовую программу принимающую c com-порта строку формата kxxxdxxxxxe
считываю значения от k до d в одну переменную от d до e в другую
пробую вывести на дисплей но на нем не наблюдаю их в чем ошибаюсь
занимаюсь программированием не длго так что если что то не правильно спрашиваю особо не ругайте
вот текст:
/****************************************************
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 : 27.02.2013
Author : Demon
Company : home
Comments:


Chip type : ATmega8
Program type : Application
Clock frequency : 8,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*****************************************************/

#include <mega8.h>
#include <stdlib.h>
#include <delay.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>
#include <delay.h>
#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7

#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)


char tmp=0;
char buf[31];
char com_str[2];
char dan_str[5];
int com=0;
int dan=0;
bit bit_R=0;

// USART Receiver buffer
#define RX_BUFFER_SIZE 8
char rx_buffer[RX_BUFFER_SIZE];

#if RX_BUFFER_SIZE<256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif

// This flag is set on USART Receiver buffer overflow
bit rx_buffer_overflow;

// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index]=data;
if (data=='e') {bit_R=1;} //если символ "e" то считываем значения
if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
};
};
}

#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
#pragma used-
#endif

// USART Transmitter buffer
#define TX_BUFFER_SIZE 8
char tx_buffer[TX_BUFFER_SIZE];

#if TX_BUFFER_SIZE<256
unsigned char tx_wr_index,tx_rd_index,tx_counter;
#else
unsigned int tx_wr_index,tx_rd_index,tx_counter;
#endif

// USART Transmitter interrupt service routine
interrupt [USART_TXC] void usart_tx_isr(void)
{
if (tx_counter)
{
--tx_counter;
UDR=tx_buffer[tx_rd_index];
if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
};
}

#ifndef _DEBUG_TERMINAL_IO_
// Write a character to the USART Transmitter buffer
#define _ALTERNATE_PUTCHAR_
#pragma used+
void putchar(char c)
{
while (tx_counter == TX_BUFFER_SIZE);
#asm("cli")
if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
{
tx_buffer[tx_wr_index]=c;
if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
++tx_counter;
}
else
UDR=c;
#asm("sei")
}
#pragma used-
#endif

// Standard Input/Output functions
#include <stdio.h>

// Declare your global variables here

void main(void)
{
// Declare your local variables here



// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0xD8;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;


// LCD module initialization
lcd_init(16);

// Global enable interrupts
#asm("sei")

while (1)
{


// Place your code here


// tmp=getchar();

//lcd_gotoxy(0,0);
//sprintf(buf,"%i\n",tmp);
// lcd_puts(buf);
// lcd_gotoxy(3,0);
// if (tmp=='k') lcd_putsf("Kom");
// if (tmp=='d') lcd_putsf("Data");
if (bit_R==1)
{ char i=0;
tmp=getchar();
if(tmp=='k') //встретился симвот к
{while (tmp!='d') //пока не d считываем команду
{ tmp=getchar();
i=i+1;
com_str=tmp;
}
}
i=0;
if (tmp=='d') //встретился симвот d
{while (tmp!='e') //пока не "e" считываем данные
{ tmp=getchar();
i=i+1;
dan_str=tmp;
}
}
com=atoi(com_str);
dan=atoi(dan_str);
bit_R=0;
lcd_clear();
lcd_putsf("Kom=");
lcd_gotoxy(5,0);
sprintf(buf,"%i",com);
lcd_puts(buf);
lcd_gotoxy(0,1);
lcd_putsf("dan=");
lcd_gotoxy(5,1);
sprintf(buf,"%i",dan);
lcd_puts(buf);
}//конец if
delay_ms(10);

};
}
Вложения
проб.rar
(80.92 КБ) 172 скачивания
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: помогите разобратся что не так?

Сообщение Аlex »

Нарушение правил форума 1.4.
Тема закрыта !
Реклама
Закрыто

Вернуться в «Разные вопросы по МК»