PDA

View Full Version : I2C, SPI, UART của PIC 16F877 dùng thế nào trên CCSC??


zero_cd
10-07-2006, 10:56 PM
Em đang làm thử một số giao tiếp sử dụng I2C và SPI tích hợp trên PIC6F877A, nhưng không hiểu sao dùng các hàm hỗ trợ của CCSC lại không được, đem ra PIC Simulator để mô phỏng thì thấy không được, rồi cả UART nữa. Có bác nào đã từng làm thành công thì chỉ bảo cho em với được không? Em chưa biết là phải giải quyết thế nào!!!!

sphinx
11-07-2006, 02:53 PM
Em có thể gửi code cho anh coi giùm cho. Nó có một số lỗi nhỏ khiến trình dich nó ko nhận được.

Ai viết thế nhỉ? Sao lại dùng nick của mình???

zero_cd
12-07-2006, 09:58 AM
Em chỉ thử test mấy cái hàm trong đó thôi, khi em đưa sang PIC Simulator để mô phỏng thì không thấy có tín hiệu gì ở Port C cả. Rất mong bác giúp đỡ, em cảm ơn bác nhiều. Đây là phần code của em cho phần I2C:
'**********************************************'
#include <16F877A.h>
#device adc=8
#use delay(clock=10000000)
#fuses NOWDT,RC, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=9)
#use i2c(Master,Fast,sda=PIN_C4,scl=PIN_C3)
#use fast_io(c)

void main()
{

setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_counters(RTCC_INTERNAL,RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
// set_tris_c(0x00);
while (1)
{
i2c_start();

i2c_write(0xa0); // Device address

i2c_write(0xf1); // subaddress

i2c_start(); // Restart

i2c_write(0xa1); // to change data direction

i2c_read(); // Now read from slave

i2c_stop();
}


}

txt
01-08-2006, 05:39 PM
Đừng hy vọng nhiều vào trình mô phỏng này , nó thiếu vài module nên hay trở chứng lắm . VD như không có module CCPPWM nên mô phỏng không được ( không có tín hiệu )

linhnc308
01-08-2006, 07:09 PM
Với phần mềm mô phỏng này, để test đc thì bạn nên bỏ các hàm Delay trong chương trình đi thì chạy mới ổn, bởi cái này hàm delay nó chạy không chuẩn đâu. Tốt nhất lắp cái mạch test bé mà thử.

Encoder
27-09-2006, 10:01 AM
Các bác cho hỏi chương trình của tôi có chỗ nào sai mà khi mô phỏng trên protues thì port b các chân chỉ thấy ở mức 1, chẳng đúng gì cả.

//==============================================
#include <16F84A.h>
#device adc=8

#use delay(clock=10000000)

#use I2C(master, sda=PIN_A0, scl=PIN_A1, fast) // use the fast i2c specification

void main() {
byte data;

i2c_start();
i2c_write(0xa0); // device address // write mode
i2c_write(0x00); // data to device
i2c_write(0x05); // write 5 to 24c04
i2c_stop();

delay_ms(10);

i2c_start();
i2c_write(0xa0);
i2c_write(0x00); // data to device
i2c_start();
i2c_write(0xa1); // read mode
data = i2c_read(); // read a byte from 24c04
i2c_stop();

output_b(data); // display on port b
while(1){}
}

hoanf
27-09-2006, 11:24 AM
Chào bạn!!
Bạn có thể vào link này để tham khảo về I2C.
http://www.picvietnam.com/forum//showthread.php?t=611
Chúc bạn thành công
hoanf

W.Rooney
11-07-2008, 12:16 PM
Các bác cho hỏi chương trình của tôi có chỗ nào sai mà khi mô phỏng trên protues thì port b các chân chỉ thấy ở mức 1, chẳng đúng gì cả.

//==============================================
#include <16F84A.h>
#device adc=8

#use delay(clock=10000000)

#use I2C(master, sda=PIN_A0, scl=PIN_A1, fast) // use the fast i2c specification

void main() {
byte data;

i2c_start();
i2c_write(0xa0); // device address // write mode
i2c_write(0x00); // data to device
i2c_write(0x05); // write 5 to 24c04
i2c_stop();

delay_ms(10);

i2c_start();
i2c_write(0xa0);
i2c_write(0x00); // data to device
i2c_start();
i2c_write(0xa1); // read mode
data = i2c_read(); // read a byte from 24c04
i2c_stop();

output_b(data); // display on port b
while(1){}
}

Chào bạn! Bạn thử xem lại con 16F84 có hỗ trợ phần cứng về I2C không?

maivannam1989
28-03-2012, 02:51 PM
chào các bác.em đang nghiên cứu về pic16f877a.em chưa rõ về cách lập trình UART cho pic,để giao tiếp với máy tính qua cổng COM.
bác nào có code ví dụ hay biết xin chỉ giáo,em cảm ơn các bác nhiều ah.