hoathanlq
01-11-2010, 04:37 PM
Có pro nào xem hộ mình với....Mình dùng 2 PIC :
16F887 làm master...
16F690 làm slave...
kết nối phần cứng ok...Thế mà mãi không chạy.....
Mục đích chương trình là: Master đo ADC rồi truyền qua SPI, Slave nhận giá trị ADC bên Master rồi hiển thì qua cổng Com mt.....
Code bên 16F887:
#include "D:\PIC\c_pic\test1\SPI truyen.h"
#include <float.h>
#include <stdio.h>
#use rs232(baud=19200,parity=n,xmit=pin_a7,rcv=pin_a1)
//#use spi(DI=PIN_B1, DO=PIN_B0, CLK=PIN_B2, ENABLE=PIN_B4, BITS=8)
#use spi(force_HW)
int8 x,z,n;
float y;
void ADC(void)
{
//x++;
//delay_ms(z);
x=read_adc();
output_d(read_adc());
if (input(pin_a2)==0)
{
z=0;
delay_ms(2000);
y=read_adc()*4.97/255;
printf("Gia tri ADC: %f (v) \r\n ",y);
}
else z=500;
}
void main()
{
setup_adc_ports(sAN0|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_2);
setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_64);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
setup_oscillator(OSC_8MHZ);
set_tris_d(0);
set_tris_a(7);
set_tris_c(16);
set_adc_channel(0);
// TODO: USER CODE!!
while (1)
{
ADC();
spi_write(x);
}
}
Code cho Slave 16F690:
#include "D:\PIC\c_pic\test1\SPI nhan.h"
#use rs232(baud=19200,parity=n,xmit=pin_c4,rcv=pin_b7)
int8 x;
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_2);
setup_spi(SPI_SLAVE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
enable_interrupts(INT_TBE);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
setup_oscillator(OSC_8MHZ);
set_tris_c(0);
// TODO: USER CODE!!
//lai:
do
{
//while(spi_data_is_in()==true)
//{
if (spi_data_is_in())
{
x=spi_read();
printf ( "Gia tri SPI nhan duoc la: %u \r\n",x);
delay_ms(2000);
}
}
while(1);
//}
//else goto lai;
}
Các thứ khác đã ngon...chỉ có SPI không chạy??????????? Có pro nào xem hộ mình thiết lập mode SPI đúng chưa???? Sai chỗ nào không???????
16F887 làm master...
16F690 làm slave...
kết nối phần cứng ok...Thế mà mãi không chạy.....
Mục đích chương trình là: Master đo ADC rồi truyền qua SPI, Slave nhận giá trị ADC bên Master rồi hiển thì qua cổng Com mt.....
Code bên 16F887:
#include "D:\PIC\c_pic\test1\SPI truyen.h"
#include <float.h>
#include <stdio.h>
#use rs232(baud=19200,parity=n,xmit=pin_a7,rcv=pin_a1)
//#use spi(DI=PIN_B1, DO=PIN_B0, CLK=PIN_B2, ENABLE=PIN_B4, BITS=8)
#use spi(force_HW)
int8 x,z,n;
float y;
void ADC(void)
{
//x++;
//delay_ms(z);
x=read_adc();
output_d(read_adc());
if (input(pin_a2)==0)
{
z=0;
delay_ms(2000);
y=read_adc()*4.97/255;
printf("Gia tri ADC: %f (v) \r\n ",y);
}
else z=500;
}
void main()
{
setup_adc_ports(sAN0|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_2);
setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_64);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
setup_oscillator(OSC_8MHZ);
set_tris_d(0);
set_tris_a(7);
set_tris_c(16);
set_adc_channel(0);
// TODO: USER CODE!!
while (1)
{
ADC();
spi_write(x);
}
}
Code cho Slave 16F690:
#include "D:\PIC\c_pic\test1\SPI nhan.h"
#use rs232(baud=19200,parity=n,xmit=pin_c4,rcv=pin_b7)
int8 x;
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_2);
setup_spi(SPI_SLAVE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
enable_interrupts(INT_TBE);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
setup_oscillator(OSC_8MHZ);
set_tris_c(0);
// TODO: USER CODE!!
//lai:
do
{
//while(spi_data_is_in()==true)
//{
if (spi_data_is_in())
{
x=spi_read();
printf ( "Gia tri SPI nhan duoc la: %u \r\n",x);
delay_ms(2000);
}
}
while(1);
//}
//else goto lai;
}
Các thứ khác đã ngon...chỉ có SPI không chạy??????????? Có pro nào xem hộ mình thiết lập mode SPI đúng chưa???? Sai chỗ nào không???????