
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.30] |
![]() |
|
Страницы: (18) « Первая ... 10 11 [12] 13 14 ... 17 18 все ( Перейти к последнему сообщению ) |
Сообщ.
#166
,
|
|
|
Цитата trainer @ 12.03.04, 17:26 На какой скорости хочешь общаться с ПК? А с какой лучше? |
Сообщ.
#167
,
|
|
|
Цитата Это зависит от задачи. С одной стороны, чем выше скорость - тем быстрее обмен. С другой стороны, чем выше скорость, тем больше ресурсов отъедает эмуляция последовательного порта. Обычно выбирают от 300 до 9600 бит/сек. Можно просто прикинуть необходимую скорость исходя из пропускной способности, времени реакции и реализуемого протокола. bizar, 12.03.04, 20:28 А с какой лучше? |
Сообщ.
#168
,
|
|
|
/*Вод что у меня преблезительно получилось*/
![]() ![]() #include <io16f84.h> /* подпрограмма временной задержки */ void tick(void) { unsigned int p; for ( p = 0xffff; p!=0; p--); for ( p = 0xffff; p!=0; p--); for ( p = 0xffff; p!=0; p--); for ( p = 0xffff; p!=0; p--); } void TransmitBitDelay(void) { for (int i= число1; i!=0; i--) for (int j= число2; j!=0; j--); } void TransmitByte(char Symbol) { PORTA &= 0xfe; //передаем стартовый бит count = 8;// счетчик передаваемых бит данных do { TransmitBitDelay(); // задержка перед передачей следующего бита PORTA ^= (~Symbol) & 1; // выдаем очередной бит в COM Symbol >>= 1; //следующий бит count--; } while (count >0); TransmitBitDelay(); // задержка перед передачей следующего бита PORTA |= 1; //передаем стоповый бит } main () { TRISB = 4|8; /* RB2 - RB3 настраиваем на вход */ PORTB = 0xfc; /* RB0 - RB1 настраиваем на вывод*/ while(1) { do { tick(); /* НЕБОЛЬШОЙ ПРОМЕЖУТОК ВРЕМЕНИ, "не будем опрашивать кнопки слишком часто" */ Keys = (~PORTB) & (4|8); /* состояние кнопок на RB2-RB3. Ждёт нажатия */ } Keys >>= 1; while(PORTB & Bit(0)); /* если установлен бит 0, значит нажата кнопка на RB2 */ while(1) { void TransmitByte(34) /* посылаем 34 */ } while(PORTB & Bit(1)); /* если установлен бит 1, значит нажата кнопка на RB3 */ while(1) { void TransmitByte(35) /* посылаем 35 */ } } } |
Сообщ.
#169
,
|
|
|
Цитата Лучше бы наверное так:bizar, 14.03.04, 11:19 do { TransmitBitDelay(); // задержка перед передачей следующего бита PORTA ^= (~Symbol) & 1; // выдаем очередной бит в COM Symbol >>= 1; //следующий бит count--; } while (count >0); ![]() ![]() do { TransmitBitDelay(); // задержка перед передачей следующего бита PORTA = (PORTA&0xfe)|(Symbol&1); // выдаем очередной бит в COM Symbol >>= 1; //следующий бит count--; } while (count >0); В main напортачил: Цитата Здесь цикл явно лишний: while(1) - это бесконечный циклbizar, 14.03.04, 11:19 while(1) { void TransmitByte(34) /* посылаем 34 */ } Цитата Здесь то же самое.bizar, 14.03.04, 11:19 while(1) { void TransmitByte(35) /* посылаем 35 */ } Ну и еще там несколько ошибок и лишних действий. ![]() Я не знаю, что ты задумал, но main можно написать так: ![]() ![]() main () { TRISB = 4|8; /* RB2 - RB3 настраиваем на вход */ PORTB = 0xfc; /* RB0 - RB1 настраиваем на вывод*/ while(1) { do { tick(); /* НЕБОЛЬШОЙ ПРОМЕЖУТОК ВРЕМЕНИ, "не будем опрашивать кнопки слишком часто" */ Keys = (~PORTB) & (4|8); /* состояние кнопок на RB2-RB3. Ждёт нажатия */ } while( Keys == 0 ); if(Keys & Bit(2)) /* если установлен бит 0, значит нажата кнопка на RB2 */ TransmitByte(34); /* посылаем 34 */ if(Keys & Bit(3)) /* если установлен бит 1, значит нажата кнопка на RB3 */ TransmitByte(35); /* посылаем 35 */ } } |
Сообщ.
#170
,
|
|
|
Цитата
![]() ![]() Я не знаю, что ты задумал, Создаём две кнопки при нажатии которых pic будет посылать код соответствующей кнопки. Теперь по поводу числа potor чёт я несовсем понял????? ![]() ![]() #include <io16f84.h> /* подпрограмма временной задержки */ void tick(void) { unsigned int p; for ( p = 0xffff; p!=0; p--); for ( p = 0xffff; p!=0; p--); for ( p = 0xffff; p!=0; p--); for ( p = 0xffff; p!=0; p--); } void TransmitBitDelay(void) { for (int i= число1; i!=0; i--) for (int j= число2; j!=0; j--); } void TransmitByte(char Symbol) { PORTA &= 0xfe; //передаем стартовый бит count = 8;// счетчик передаваемых бит данных do { TransmitBitDelay(); // задержка перед передачей следующего бита PORTA ^= (~Symbol) & 1; // выдаем очередной бит в COM Symbol >>= 1; //следующий бит count--; } while (count >0); TransmitBitDelay(); // задержка перед передачей следующего бита PORTA |= 1; //передаем стоповый бит } main () { TRISB = 4|8; /* RB2 - RB3 настраиваем на вход */ PORTB = 0xfc; /* RB0 - RB1 настраиваем на вывод*/ while(1) { do { tick(); /* НЕБОЛЬШОЙ ПРОМЕЖУТОК ВРЕМЕНИ, "не будем опрашивать кнопки слишком часто" */ Keys = (~PORTB) & (4|8); /* состояние кнопок на RB2-RB3. Ждёт нажатия */ } while( Keys == 0 ); if(Keys & Bit(2)) /* если установлен бит 0, значит нажата кнопка на RB2 */ TransmitByte(34); /* посылаем 34 */ if(Keys & Bit(3)) /* если установлен бит 1, значит нажата кнопка на RB3 */ TransmitByte(35); /* посылаем 35 */ } } |
Сообщ.
#171
,
|
|
|
PORTA забыл проинициализировать
|
Сообщ.
#172
,
|
|
|
![]() ![]() PORTA &= 0xfe; //передаем стартовый бит Народ а помоему это PORTB ?????? potor, дык про числа обьестни по понятней.. |
Сообщ.
#173
,
|
|
|
Цитата Народ а помоему это PORTB ?????? не понял????? Цитата дык про числа обьестни по понятней.. откомпили, зайди в отладчик и выложи сюда ассемблерный код ф-и TransmitBitDelay |
Сообщ.
#174
,
|
|
|
ессно перед тем как компилить подставь вместо чисел например 10
|
Сообщ.
#175
,
|
|
|
![]() ![]() #include<io16f84.h> void TransmitBitDelay(void) { int i,j; for (i=10; i!=0; i--) for (j=10; j!=0; j--); } Выдаёт ошибку ![]() ![]() Rebuilding target Debug... Untitled4.c Linking... Error[e46]: Undefined external "main" referred in __MAIN_CALL__ ( C:\PROGRAM FILES\IAR SYSTEMS\EW23\PICmicro\LIB\cl16f84.r39 ) Total number of errors: 1 Total number of warnings: 0 Что делать??? |
Сообщ.
#176
,
|
|
|
скомпили весь проект, так оно у тебя компилится не будет:), укажи компилятору чтобы он создал файл .lst с ассемблерным кодом, и выложи его здесь? либо зайди в дебаггер, укажи чтобы он показал тебе ВЕСЬ ассемблерный код, он показывает так :
строка С асм асм асм асм строка С ... найди код ф-и TransmitBitDelay и выложи его сюда Добавлено в : т.е. понял меня? линкер тебе говорит, что обьявлена функция main, но нигде не описана, эта ф-я должна присутствовать обязательно, т к это точка входа в программу |
Сообщ.
#177
,
|
|
|
Цитата В проекте нет файла, содержащего функцию main. bizar, 25.03.04, 13:19 Выдаёт ошибку |
Сообщ.
#178
,
|
|
|
![]() ![]() #include <io16f84.h> /* подпрограмма временной задержки */ void tick(void) { unsigned int p; for ( p = 0xffff; p!=0; p--); for ( p = 0xffff; p!=0; p--); for ( p = 0xffff; p!=0; p--); for ( p = 0xffff; p!=0; p--); } void TransmitBitDelay(void) { for (int i= 10; i!=0; i--) for (int j= 10; j!=0; j--); } void TransmitByte(char Symbol) { PORTA &= 0xfe; //передаем стартовый бит count = 8;// счетчик передаваемых бит данных do { TransmitBitDelay(); // задержка перед передачей следующего бита PORTA ^= (~Symbol) & 1; // выдаем очередной бит в COM Symbol >>= 1; //следующий бит count--; } while (count >0); TransmitBitDelay(); // задержка перед передачей следующего бита PORTA |= 1; //передаем стоповый бит } main () { TRISB = 4|8; /* RB2 - RB3 настраиваем на вход */ PORTB = 0xfc; /* RB0 - RB1 настраиваем на вывод*/ while(1) { do { tick(); /* НЕБОЛЬШОЙ ПРОМЕЖУТОК ВРЕМЕНИ, "не будем опрашивать кнопки слишком часто" */ Keys = (~PORTB) & (4|8); /* состояние кнопок на RB2-RB3. Ждёт нажатия */ } Keys >>= 1; while(PORTB & Bit(0)); /* если установлен бит 0, значит нажата кнопка на RB2 */ while(1) { void TransmitByte(34) /* посылаем 34 */ } while(PORTB & Bit(1)); /* если установлен бит 1, значит нажата кнопка на RB3 */ while(1) { void TransmitByte(35) /* посылаем 35 */ } } } Выдаёт ошибку [/CODE]Rebuilding target Debug... Untitled1.c Fatal Error[Cp001]: Copy protection check, Your time limited license is out of date - You must register NOW to get the permanent key in order to continue using this product! Total number of errors: 1 Total number of warnings: 0[CODE] |
Сообщ.
#179
,
|
|
|
ты крякнул IAR? он говорит, что у тебя лицензия закончилась
|
Сообщ.
#180
,
|
|
|
Увсё сделал
Ошибки ![]() ![]() count = 8;// счетчик передаваемых бит данных и ![]() ![]() Keys = (~PORTB) & (4|8); /* состояние кнопок на RB2-RB3. Ждёт нажатия */ } Keys >>= 1; while(PORTB & Bit(0)); /* если установлен бит 0, значит нажата кнопка на RB2 */ while(1) { void TransmitByte(34) /* посылаем 34 */ } while(PORTB & Bit(1)); /* если установлен бит 1, значит нажата кнопка на RB3 */ while(1) { void TransmitByte(35) /* посылаем 35 */ } } } Добавлено в : ![]() ![]() count = 8;// счетчик передаваемых бит данных Надо сделать int правельно я думаю??? |