Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SPI на AT89C5131, работа с больше чем одним байтом 
:(
    Опции темы
CROC
Дата 4.8.2006, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 16.10.2005
Где: Perm

Репутация: нет
Всего: нет



в том виде в каком сейчас существует мой код у меня программа не заходит в прерывание spi
Код

/*############## Настройка SPI ###########*/

P1_4 = 1;  /*LDAC*/
P1_1 = 1;  /*разрешение master*/

/*=============== 1101 1110 ===============*/
SPCON = 0x00;  /*сброс режимов spi*/

SPCON |= 0x10; /*---1 ----  ---1 ---- режим (1=мастер/0=слейв)*/  
SPCON |= 0x82; /*1--- --1-  1--1 --1- частота spi (11=128)*/
SPCON |= 0x08; /*---- 1---  1--1 1-1- полярность (1=)*/
SPCON |= 0x04; /*---- -1--  1--1 111- фронт (1=)*/
IEN1 |= 0x04; /*разрешить прерывание spi*/
SPCON |= 0x40; /*-1-- ----  11-1 111- запуск spi (1=start)*/

transmit_complited=0;
data_ex = 0x55;

LED0=0;
LED1=0;
LED2=0;
LED3=0;
i=0;

TR0=1; /*timer0 run*/

 /* основной цикл программы */
while(1) 
   {
    } /*END WHILE*/
}

interrupt void timer0_int()
{
LED0 = ~LED0;
i++;    
TF0 = 0;
 /*сброс флага прерывания*/

TH0 = 0x00;
TL0 = 0x00; 

  if (i==1) 
    {
          LED1 = ~LED1;
      i = 0;
      j++;


SPDAT = data_ex;
          while (transmit_complited==0)
          LED2 = 1;
          transmit_complited=0;

SPDAT = j;
          while (!transmit_complited);
          transmit_complited=0;
for (h=0;h<4;h++) P1_4 = 0;
                   P1_4 = 1;

     /* data_ex = ~data_ex;*/

    }
TR0=1; /*timer0 run*/
}

interrupt void spi_modf_int()
   {
     LED3 = 1;
     switch (SPSTA)
     {
       case 0x80:
         transmit_complited=1;  
       break;  
       
       case 0x10:
       break;    
       
       case 0x40:
       break;    
      }
   }


и какое прерывание использовать spi_spif_int или spi_modf_int ?? ни с тем, ни с тем не получается smile

может кините, что-то из своего?
PM MAIL ICQ   Вверх
cardinal
Дата 4.8.2006, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 8
Всего: 99



Вот одна фишка есть. Разбирайся...
Код

void SPIInit(void)
{                                           
   // spi settings

   SPCON = 0x71;
   SPDAT = 0x55;
}

void SendSPI(xdata char * data pchBuf, char chNum) _naked
{   
   chNum;
   pchBuf;                                
   _asm                         
   mov r1, _SendSPI_PARM_2              
00103$:                    
   movx a, @dptr
   mov _SPDAT, a
   inc dpl
   dec r1
   cjne r1, #0x00, 00103$
   ret
  _endasm; 
}   




--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
CROC
Дата 6.8.2006, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 16.10.2005
Где: Perm

Репутация: нет
Всего: нет



Цитата(cardinal @ 4.8.2006,  22:09)
Вот одна фишка есть. Разбирайся...

спасибо,
но все самое интересное на асемблере smile
и еще не используется прерывания связанные с spi
и еще, хоть скажите для чего (какие действия делает) эта подпрограммка была сделана, так мне в асемблере проще будет разобраться
PM MAIL ICQ   Вверх
cardinal
Дата 6.8.2006, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 8
Всего: 99



Цитата(CROC @  6.8.2006,  11:53 Найти цитируемый пост)
и еще, хоть скажите для чего (какие действия делает) эта подпрограммка была сделана

Ну так имена функций вроде все объясняют сами. Первая инициализирует SPI, вторая посылает по SPI данный из буффера, на который показывает pchBuf, которых chNum штук. Да и вообще тут просто цикл сделан, а так
Код

void SendSPI(char a)
{   
   ...
  SPDAT = a
   ...
}   

Больше я ничего особенного не делал.


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
CROC
Дата 6.8.2006, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 16.10.2005
Где: Perm

Репутация: нет
Всего: нет



я вроде разобрался с просто передачей (в цикле по таймеру), но в таком случае не все так идеально как бы мне хотелось
а вот никак не могу получить прерывание от spi по окончанию передачи байта smile по которому бы я послал следующий
PM MAIL ICQ   Вверх
cardinal
Дата 6.8.2006, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 8
Всего: 99



Этого не знаю...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
CROC
Дата 6.8.2006, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 16.10.2005
Где: Perm

Репутация: нет
Всего: нет



жаль
PM MAIL ICQ   Вверх
CROC
Дата 10.8.2006, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 16.10.2005
Где: Perm

Репутация: нет
Всего: нет



решил с перываниями не работать
на самой большой скорости возможно передавать байты с перерывам в 10 маш.команд так что я думаю найду чем занять процессор в это время smile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0608 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.