Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с SPI PIC16F877
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
pipka
Здравствуйте.

Пытаюсь связать два PIC16F877 через SPI, один в режиме Master, второй-slave.
На PORTD Master'a и Slave'a получается 00001111, хотя на Slave должно быть 11111111.

Master:

#include <pic.h>

__CONFIG(0x3FF1);

int res;
main(void)
{
TRISA=0b00000000;
TRISC=0b00010000;
TRISB=0x0;
TRISD=0x0;

PORTD=0x0;
PORTB=0x0;
PORTC=0x0;

SSPIE=0;
SSPCON=0x20;
SSPIF=0;
SSPBUF=0b11111111;

while(!SSPIF);
PORTD=SSPBUF;
}


Slave:

#include <pic.h>

__CONFIG(0x3FF1);

int res,i;


main(void)
{
TRISA=0b00000000;
TRISC=0b00001000;
TRISB=0x0;
TRISD=0x0;

PORTD=0x0;
PORTB=0x0;
PORTC=0x0;
SSPCON=0x25;
SSPIF=0;
SSPIE=1;
PEIE=1;
GIE=1;

}

interrupt IntSer(void)
{

if(SSPIF==1)
{
res=SSPBUF;
SSPBUF=0b00001111;
SSPIF=0;
}
show();
}

show()
{
PORTD=res;
for(i=0;i<=1000;i++);
}
Andrey_B
Чето как-тоочень сумбурно все.

1. В слейве не правильно настроено направление портов.
И видимо, по смыслу оно и подключено не правильно.
2. Почему res int ? Когда оно должно быть usigned char.
3. Зачем в мастере весь инит крутить в цикле ?
4. Не понятна структура прерывания слейва, зачем там
пауза, да еще и внутри прерывания ?
pipka
Цитата(Andrey_B @ Feb 6 2008, 12:36) *
Чето как-тоочень сумбурно все.

1. В слейве не правильно настроено направление портов.
И видимо, по смыслу оно и подключено не правильно.
2. Почему res int ? Когда оно должно быть usigned char.
3. Зачем в мастере весь инит крутить в цикле ?
4. Не понятна структура прерывания слейва, зачем там
пауза, да еще и внутри прерывания ?



Спасибо, разобрался.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.