Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 06.05.2008, 14:11  
Alexey198
Частый гость
 
Регистрация: 28.01.2007
Сообщений: 42
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
Alexey198 на пути к лучшему
По умолчанию Нужна помощь с Code Vision

Здравствуйте!
Пытаюсь научиться программировать мк, помогите,пожалуйста. Программу пишу в Code Vision v 1.25.5 Pro. МК ATmega 16 частота кварца 11,0592 МГц. Описываю переменную zz как unsigned int, но ее тип char. Почему? И как мне изменить ее тип на unsigned int или на unsigned long int? Заранее благодарен. Вот код программы.


#include ‹mega16.h›

#include ‹delay.h›

// My bits definitions http://avr123.nm.ru/m8_128.h
#include ‹m8_128.h›

// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm

#include ‹lcd.h›



#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)

// USART Receiver buffer
#define RX_BUFFER_SIZE 100
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 (++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





// Standard Input/Output functions
#include ‹stdio.h›

flash char string_1[]="Prog Start";
flash char string_2[]="The END";


// Declare your global variables here
char sign,x;
int temp;
unsigned int zz;



//++++++++++++++++++++++++++++++++++++++++++++++++

// Главная функция

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

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x08;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 115200
UCSRA=0x00;
UCSRB=0x98;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x05;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// LCD module initialization
// lcd_init(16);

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

// initialize the LCD for
// 16 columns
lcd_init(16);

lcd_gotoxy(5,0);

lcd_putsf("Hello");

lcd_gotoxy(2,1);

lcd_putsf("avr123.nm.r");

lcd_putsf("u");


delay_ms(100);

lcd_clear();

lcd_putchar('F');

lcd_putsf(string_1);


putsf("Hello, world!");

putchar('\n');

printf(string_1);

putchar(71);

printf(string_2);

putchar('\n');


sign='+';
temp=578;

printf("temp = %c%i.%u C\r\n",sign,temp/10,temp%10);


putchar('\n');

putchar('G'); putchar('\n');
putchar(71); putchar('\r');putchar('\n');
putchar(0x47); putchar('\n');putchar('\n');
putchar('F');

putchar('\n');

while(!(UCSRA & (1‹‹UDRE))); UDR = 'G';
while(!(UCSRA & (1‹‹UDRE))); UDR = 71;
while(!(UCSRA & (1‹‹UDRE))); UDR = 0x47;

delay_ms(3);

putchar('\n');





delay_ms(100);

lcd_clear();

lcd_putsf("Click TX window and type keyb.");


while (!(getchar()=='f'));
x=getchar()-48;
zz=x*100;
printf ("x=%d\n",x);
printf ("z=%d\n",zz);
x=getchar()-48;
zz=zz+(x*10);
printf ("x=%d\n",x);
printf ("z=%d\n",zz);
x=getchar()-48;
zz=zz+x;
printf ("x=%d\n",x);
printf ("z=%d\n",zz);

// +++++++++++++++++++++++++++++++++++++++++++++


while (1)
{
putchar(getchar());
};
}
Реклама:
Alexey198 вне форума  
Непрочитано 06.05.2008, 14:51  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

(С)Я уже столько знаю о прокладках, что сам могу их носить..
Я не кодил для для авр...В смысле, а что мешает объявить лонг ???
urry вне форума  
Непрочитано 06.05.2008, 14:52  
AlexTA
Прописка
 
Регистрация: 07.10.2006
Сообщений: 108
Сказал спасибо: 0
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
AlexTA на пути к лучшему
По умолчанию

Возможно потому что x описан как char (zz=x*100, надо преобразовать x*100 в unsigned int:
zz=(unsigned int) (x*100);
AlexTA вне форума  
Непрочитано 06.05.2008, 15:27  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

возможно даже дак :

Код:
zz=((unsigned int)x)*100;
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 07.05.2008, 08:33  
Alexey198
Частый гость
 
Регистрация: 28.01.2007
Сообщений: 42
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
Alexey198 на пути к лучшему
По умолчанию

Спасибо огромное. Теперь все работает.
avr123-nm-ru Вам отдельное "ОГРОМНОЕ СПАСИБО" за такие замечательные курсы.

Может я не правильно понял и поэтому заранее извиняюсь, но по моему здесь ошибка (в задаче 5):

"while (getchar() == 'F');
/* взять из буфера наиболее старый
символ и если это не F то повторять действие,
а если это F пойти на следующий код программы */

"
правильно будет так "while (!(getchar() == 'F'));"

Есть еще вапрос:
разница между "zz=(unsigned int) (x*100);" и "zz=((unsigned int)x)*100;" в том, что в первом случае тип unsigned int присваивается вычисленному значению находящимуся справа от "(unsigned int)", а во втором случае тип unsigned int присваивается переменной х и после этого унажается на 100?
Alexey198 вне форума  
Непрочитано 07.05.2008, 09:54  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Сообщение от Alexey198
ошибка (в задаче 5):
правильно будет так "while (!(getchar() == 'F'));
Спасибо ! Верно подмечено. Исправлю щас.

Сообщение от Alexey198
во втором случае тип unsigned int присваивается переменной х и после этого унажается на 100?
Да. Мне кажется такой порядок приведения типа правильней.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу переустановить Code Vision на более новую версию. Zemlyanov Proteus, KiCAD и другие ECAD 37 16.12.2009 00:44
gcc, iar, code vision AVR ? schotki Микроконтроллеры, АЦП, память и т.д 48 26.05.2009 20:15
[Решено] Code Vision на Windows Vista 64 Alexey198 Отвлекитесь, эмбеддеры! 1 08.07.2008 16:10
Люди помогите с ATMega и Code Vision 7Fantomas7 Микроконтроллеры, АЦП, память и т.д 2 05.04.2008 21:10
Code Vision и аппаратный i2c day177 Микроконтроллеры, АЦП, память и т.д 7 25.01.2008 20:03


Часовой пояс GMT +4, время: 20:39.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot