21.10.2010, 20:32
|
|
Частый гость
Регистрация: 12.07.2009
Сообщений: 22
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Помощь в WinAvr
Недавно начал изучать мк. Прочитал теорию и тд. Теперь пишу первую свою программу. Пытаюсь подключить дисплей к мк. Написал ф-ию передачи команды:
Код:
|
void Wr_com (unsigned char command) {
DDRC=127;
PORTC=0;
unsigned char Temp_data;
Clearbit(RS);
Clearbit(RW);
Temp_data=((command››1) & 0xF0);
Data_port |=Temp_data; //Передаются старшие биты
Setbit(E);
_delay_us(5);
Clearbit(E);
_delay_us(40);
??? //необходимо поменять местами биты
???
???
Setbit(E);
_delay_us(5);
Clearbit(E);
_delay_us(30);
DDRC=7;
PORTC=120; |
Т.к. использую 4х разрядное подключение, необходимо поменять местами в байте биты (7-4 на 3-0). Есть ли WinAvr для этого функция? Или использовать дополнительно 2 переменные и раскидывать на них, потом на итоговую переменную?
|
|
|
|
21.10.2010, 20:47
|
|
Частый гость
Регистрация: 21.09.2009
Сообщений: 40
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
Re: помощь в WinAvr
Почему бы не использовать побитовый сдвиг
Temp_data=Temp_data‹‹4
|
|
|
|
13.11.2010, 16:06
|
|
Прописка
Регистрация: 17.02.2009
Сообщений: 154
Сказал спасибо: 14
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Re: Помощь в WinAvr
Здравствуйте, изучаю WinAVR после CV компилятор выдаёт ошибку
if(0==kn1)
{
printf("%3u\r",35);
while(kn1==0);
_delay_ms(50);
}
на строках с if и while. Может надо файл библиотечный. Подскажите.
|
|
|
|
13.11.2010, 21:41
|
|
Прописка
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
Re: Помощь в WinAvr
На операторе while(kn1==0); зациклитесь. Вообще, он бесполезен здесь, уберите.
Что такое kn1?
|
|
|
|
13.11.2010, 21:59
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: Помощь в WinAvr
Сообщение от AGAT0365
|
компилятор выдаёт ошибку
|
А привести текст ошибки? Так только телепат поможет.
Вероятнее всего не определена kn1, но могут быть и другие варианты.
|
|
|
|
14.11.2010, 17:29
|
|
Прописка
Регистрация: 17.02.2009
Сообщений: 154
Сказал спасибо: 14
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Re: Помощь в WinAvr
Вот привожу весь ,типо проект.
#include ‹avr/interrupt.h› // прерывание
#include ‹avr/io.h› // библиотека I/O
#include ‹util/delay.h› // библиотеки пауз
#include ‹avr/pgmspace.h›
#include ‹avr/boot.h›
// Standard Input/Output functions
#include ‹stdio.h›
#define kn1 PINC.0
#define kn2 PINC.1
#define kn3 PINC.2
#define zel PORTD.6
#define kpa PORTB.0
#define cve PORTD.7
void proba (void)
{
if(kn1==0)
{
printf("%3u\r",35);
while(kn1==0);
_delay_ms(50);
}
if (kn2==0)
{printf("%3u\r",80);
while (kn2==0);
_delay_ms(50);
}
if (kn3==0)
{printf("%3x\r",20);
while (kn3==0);
_delay_ms(50);
}
}
void uart (void)
{
while (!(UCSRA & 1‹‹RXC));
kpa=0;
proba();
}
int main(void)
{
/
PORTB=0x01;
DDRB=0x01;
PORTC=0x07;
DDRC=0x00;
PORTD=0xC0;
DDRD=0xC0;
TCCR0=0x00;
TCNT0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
TIMSK=0x00;
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x19;
ACSR=0x80;
SFIOR=0x00;
while (1)
{
uart();
}
}
Авот что выдаёт компилятор:
UARTproba.c:--:error:expected ')' before numeric constant
и так везде где есть операторы if,while
|
|
|
|
14.11.2010, 18:43
|
|
Вид на жительство
Регистрация: 21.08.2007
Сообщений: 318
Сказал спасибо: 12
Сказали Спасибо 67 раз(а) в 61 сообщении(ях)
|
Re: Помощь в WinAvr
Замените дефайны на:
#define kn1 (PINC && (1‹‹0))
#define kn2 (PINC && (1‹‹1))
#define kn3 (PINC && (1‹‹2))
#define zel (PORTD && (1‹‹6))
#define kpa (PORTB && (1‹‹0))
#define cve (PORTD && (1‹‹7))
|
|
|
|
14.11.2010, 20:28
|
|
Прописка
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
|
Re: Помощь в WinAvr
Сообщение от Cybermaker
|
Замените дефайны на:
#define kn1 (PINC && (1‹‹0))
#define kn2 (PINC && (1‹‹1))
#define kn3 (PINC && (1‹‹2))
#define zel (PORTD && (1‹‹6))
#define kpa (PORTB && (1‹‹0))
#define cve (PORTD && (1‹‹7))
|
А разве не на
#define kn1 (PINC & (1‹‹0))
#define kn2 (PINC & (1‹‹1))
#define kn3 (PINC & (1‹‹2))
#define zel (PORTD & (1‹‹6))
#define kpa (PORTB & (1‹‹0))
#define cve (PORTD & (1‹‹7))
|
|
|
|
14.11.2010, 21:28
|
|
Вид на жительство
Регистрация: 21.08.2007
Сообщений: 318
Сказал спасибо: 12
Сказали Спасибо 67 раз(а) в 61 сообщении(ях)
|
Re: Помощь в WinAvr
Сообщение от harchenko_pavel
|
А разве не на
#define kn1 (PINC & (1‹‹0))
#define kn2 (PINC & (1‹‹1))
#define kn3 (PINC & (1‹‹2))
#define zel (PORTD & (1‹‹6))
#define kpa (PORTB & (1‹‹0))
#define cve (PORTD & (1‹‹7))
|
Сорри - именно так. Си не родной мне язык
|
|
|
|
15.11.2010, 09:36
|
|
Прописка
Регистрация: 17.02.2009
Сообщений: 154
Сказал спасибо: 14
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Re: Помощь в WinAvr
Спасибо. А вот такое "kpa=0" тоже не поддерживает,видимо как то через побитовые операции?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:38.
|
|