I2C, SPI, UART của PIC 16F877 dùng thế nào trên CCSC??
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!!!!
|
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??? |
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(); } } |
Đừ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 )
|
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ử.
|
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 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 |
Trích:
|
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. |
Múi giờ GMT. Hiện tại là 01:05 AM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam