07-04-2007, 04:32 PM | #31 |
Đệ tử 2 túi
Tham gia ngày: Mar 2007
Bài gửi: 45
: |
em cai custom roi nhung cung ko duoc anh a!
ko hiểu nỗi hôm trước em cài và dùng được nhưng từ khi gở ra cài lại thì ko thảnh công không biết tại sao nữa @ngohaibac: Lần sau em viết bài thì phải viết dài, hỏi thì hỏi vào một bài là được. Em vào luồng về MPASM để thảo luận và xem các anh chị đã làm nhé. http://www.picvietnam.com/forum//forumdisplay.php?f=34 Chúc em thành công. thay đổi nội dung bởi: ngohaibac, 08-04-2007 lúc 10:02 AM. |
09-04-2007, 01:41 AM | #32 |
Đệ tử 9 túi
|
Thư viện I2C Master.
Tiếp theo là về module I2C, một chuẩn giao tiếp quan trọng khi giao tiếp với ngoại vi như EEPROM, RTS(DS1307),...
Do đó, mình xin cung cấp cho các bạn các hàm và thực thi của các hàm này trên HTPIC. Mình có tham khảo cả ở bọn htsoft nhưng nó viết sai một số hàm không chạy được, mình đã viết lại toàn bộ. Đầu tiên là hàm I2C.h: Code:
//I2C.h //Declare some functions void I2C_Init(void); // khởi tạo I2C ở chế độ Master, Baud = 100 Khz void I2C_waitForIdle(void); // Chờ khi nào đường bus ở chế độ Idle (rảnh rỗi) void I2C_Start(void); // Khởi động I2C - Master chiếm đường bus void I2C_repStart(void); // Chế độ Restart void I2C_stop(void); // Stop I2C - Master nhường đường bus cho thiết bị khác unsigned char I2C_write( unsigned char I2CWriteData ); // ghi một byte lên đường SDA unsigned char I2C_read( unsigned char ack ); // Đọc một byte với mã ACK (ACK = 0 nếu ack = 1, và ACK = 1 nếu ack = 0) -> dùng xác nhận từ master đối với slave. void I2C_NACK(void); // tạo bít Not Ack Code:
// I2C.c # include "pic.h" # include "I2C.h" //====================================================================================================== void I2C_Init(void){ /* // Configure for Master Mode SSPM3 = 1; SSPM2 = 0; SSPM1 = 0; SSPM0 = 0; ss // I2C Master Mode, clock = Fosc/(4*(SSPADD + 1)); WCOL = 0; //No conllision SSPEN = 1; // Enables the serial port and */ SSPCON = 0b00101000; // set IIC port to Master mode with BRG SSPSTAT = 0b00000000; // Standard speed mode - 100Hz SSPCON2 = 0; //TRIS_SCL = 0; //TRIS_SDA = 0; // configure SDA and SCL as Output SSPADD = 9; // BAUD = 100KHz SSPIF = 0; // clear SSPIF interrupt flag BCLIF = 0; // clear bus collision flag STAT_CKE = 0; // use I2C levels worked also with '0' STAT_SMP = 1; // disable slew rate control worked also with '0' } //============================================================================= void I2C_waitForIdle(void) { while (( SSPCON2 & 0x1F ) | STAT_RW) ; //CLRWDT(); // wait for idle and not writing } //============================================================================= void I2C_Start(void){ //SSPIF = 0; SEN = 1; //while(!SSPIF); while(SEN); } //============================================================================== void I2C_repStart(void) { I2C_waitForIdle(); RSEN = 1; } //============================================================================= void I2C_stop(void) { I2C_waitForIdle(); PEN = 1; } //============================================================================== unsigned char I2C_write( unsigned char I2CWriteData ){ I2C_waitForIdle(); SSPBUF = I2CWriteData; I2C_waitForIdle(); return (!ACKSTAT); // function returns '1' if transmission is acknowledged // 1: Success // 0: Fail to send } //============================================================================ unsigned char I2C_read( unsigned char ack ){ unsigned char I2C_ReadData; I2C_waitForIdle(); RCEN = 1; I2C_waitForIdle(); I2C_ReadData = SSPBUF; I2C_waitForIdle(); if ( ack ) ACKDT=0; else ACKDT = 1; ACKEN = 1; // send acknowledge sequence I2C_waitForIdle(); return( I2C_ReadData ); } /******************************************************************************************/ void I2C_NACK(void) { I2C_waitForIdle(); if (ACKSTAT){ PEN=1; //Stop I2C_waitForIdle(); //Wait until action is finished while(PEN); }; } - Khởi tạo I2C bằng I2C_Start(); - Start bằng I2C_Start(); - Chọn slave giao tiếp bằng cách ghi địa chỉ và bit RW tương ứng với chế độ đọc hay ghi. - Ghi dữ liệu lựa chọn byte nào cần ghi hay cần đọc trong bảng RAM của DS1307. - Ghi dữ liệu hay là đọc dữ liệu. Chú ý: khi ghi xong, muốn đọc thì phải làm lại tức là phải restart nhé. Chúc các bạn thành công. |
09-04-2007, 09:39 AM | #33 |
Đệ tử 2 túi
Tham gia ngày: Mar 2007
Bài gửi: 45
: |
cám ơn anh ngohaibac để em cài cái máy tính của em rồi em làm lại những gì anh hướng dẫn thữ xem sao! em sẽ không bao giờ bỏ cuộc cả hôm nay em sẽ cài máy lại rồi cài MPLAP rồi cài HT-pic và CCS C luôn
@nohb: những cái này em có thể chát Yahoo với anh. Anh đề nghị không spam bài ở đây. Để cài HTPIC, CCS em xem hướng dẫn là cài được. Em xem xong anh sẽ del bài này đó. thay đổi nội dung bởi: ngohaibac, 09-04-2007 lúc 11:49 AM. |
27-07-2007, 04:50 PM | #34 |
Đệ tử 9 túi
|
Chào các bạn.
Mình thấy các thư viện của mình vẫn chưa tối ưu. Thư viện sẽ phải có thêm các lựa chọn là các constant để thiết lập cho các hàm Init. Các trình dịch tự sinh mã đều có các yếu tố này nhưng mà thấy C18, C30 có cách đặt tên các lựa chọn này khá hay. Nên bạn nào có thời gian thì nên viết lại và thêm các constant này vào thì chương trình sẽ có tính sử dụng lại cao. Mình có thời gian sẽ viết lại thêm. Chúc các bạn thành công. |
28-11-2007, 12:04 AM | #35 |
Đệ tử 1 túi
Tham gia ngày: Apr 2007
Bài gửi: 20
: |
các bác cho em hỏi HTPIC với HTPIC 18 có khác nhau không vậy
|
24-01-2008, 10:30 AM | #36 |
Nhập môn đệ tử
Tham gia ngày: Nov 2007
Bài gửi: 6
: |
Em cam on Bac nhieu lam.Bac that rong luong.thanh vien moi
|
28-04-2008, 10:22 PM | #37 |
Nhập môn đệ tử
Tham gia ngày: Jan 2008
Bài gửi: 1
: |
HT-PIC cho động cơ bước
chào các bác, em đang làm bài tập điều khiển động cơ bước loại 4 pha,2cuộn dây, 1 nguồn 5V chung cho 2 cuộn dây. Góc bước 7.5 độ. Làm và mô phỏng trên mạch thật mà mãi ko được. phát nản cả người. với đoạn code dưới thì động cơ quay bốn bước thì dừng, ko quay nữa, bấm nút thì động cơ lại quay tiếp.
Hình trên proteous mang tính chất minh họa, vì ko mô phỏng trên proteous thuật toán là cứ sau mỗi lần cấp xung tới các cuộn dây của động cơ thì lại check nút bấm và cấp xung tiếp theo đúng chiều để động cơ quay cho phù hợp với yêu cầu nút bấm. nếu bác nào có code về bài tập này thì up lên cho anh em xem với! code: // DIEU KHIEN DONG CO BUOC: loai 4 pha, goc buoc 7.5do, dien ap 5V // Nut bam RB0 : Quay trai; nut RB1 : dung; RB2 : Quay phai // yeu cau: dong co dang quay trai neu bam nut quay phai (mot lan, ko can bam nhieu lan) thi doi chieu va quay phai. // dong co dang quay phai neu bam nut quay trai (mot lan) thi doi chieu va quay trai // dong co dang quay bam nut dung thi dung lai, nhung PORTD van duoc xuat ra 1 gia tri bang gia tri cuoi cung ngay truoc khi dung #include<pic.h> __CONFIG(HS & PWRTEN & BOREN & LVPDIS & WDTDIS); // ============= KHAI BAO CAC CHUONG TRINH CON =========== // ============= CHU Y: phai xap xep theo dung thu tu chuong trinh con o duoi. Mot loi ngo ngan HAHAHA ========= char phimbam(void); void DL(unsigned int i); // ============= CHUONG TRINH CHINH =========== void main () { // ============= KHOI TAO ============ static char a; // bien a dieu khien trang thai hoat dong cua cua dong co OPTION = 0b00000000; // dung prescaler cho timer0 voi ti le 1:2 Va dung tro keo len PORTB TRISB = 0b00000111; // chan RB0, RB1, RB2 la input TRISD = 0b00000000; // PORTD la cong ra PORTD = 0b01010000; // PORTD gia su dang o vi tri dau ung voi gia tri 0b01010000, cac vi tri vai tro nhu nhau. while (1) { a = phimbam(); if (PORTD == 0b01010000) { switch(a) { case 1 : { DL (5000); //trai PORTD = 0b10010000; }; break; case 2 : { DL (5000); PORTD = 0b01010000; }; break; case 3 : { DL (5000); PORTD = 0b01100000; }; //phai break; }; }; if (PORTD == 0b10010000) { switch(a) { case 1 : { DL (5000); //trai PORTD = 0b10100000; }; break; case 2 : { DL (5000); PORTD = 0b10010000; }; break; case 3 : { DL (5000); PORTD = 0b01010000; }; //phai break; }; }; if (PORTD == 0b10100000) { switch(a) { case 1 : { DL (5000); //trai PORTD = 0b01100000; }; break; case 2 : { DL (5000); PORTD = 0b10100000; }; break; case 3 : { DL (5000); PORTD = 0b10010000; }; //phai break; }; }; if (PORTD == 0b01100000) { switch(a) { case 1 : { DL (5000); //trai PORTD = 0b01010000; }; break; case 2 : { DL (5000); PORTD = 0b01100000; }; break; case 3 : { DL (5000); PORTD = 0b10100000; }; //phai break; }; }; } } // =========== CAC CHUONG TRINH CON ============ //============================================== // chuong trinh "phimbam" phai lam sao de an 1 lan la duoc? chu ko can an nhieu lan hoac la phai giu nut an 1 luc ??????? static char phimbam(void) { if ((RB0==0)&&(RB1==1)&&(RB2==1)) return (1); // dong co quay trai if ((RB1==0)&&(RB0==1)&&(RB2==1)) return (2); // dong co dung if ((RB2==0)&&(RB1==1)&&(RB0==1)) return (3); // dong co quay phai } //================ HAM DELAY DUNG TIMER0 ============= void DL(unsigned int i) { while (i--) { TMR0 = 6; T0IF = 0; while (!T0IF); }; } -> động cơ quay bốn bước dừng chắc do biến ''a'' ko giữ được giá trị ở vòng while tiếp theo. |
28-11-2009, 01:41 PM | #38 |
Nhập môn đệ tử
Tham gia ngày: Oct 2009
Bài gửi: 4
: |
hiên nay minh đang làm đồ án đồng hồ số hiện thị trên led 7 đoạn (dùng led đơn kết nối như led 7 đoạn). với kích thước 43*130 cm. nhưng phần cứng thì minh đã làm nhưng chưa chạy được vì port quét led chưa hoạt động còn port quét dữ liệu data thì hoạt động. mong các anh em tư vấn giùm minh. minh sử dụng ic 89c51 lập trình và chương trình đã thành công nhưng phần cứng thì chưa {minh xuất dữ liệu ra mưc 0} http://www.megaupload.com/?d=KH8OLX77
nho tu van goi qua mail: tranthanhbinh8888@gmail.com |
15-12-2009, 12:45 AM | #39 |
Nhập môn đệ tử
Tham gia ngày: Jun 2009
Bài gửi: 1
: |
Bac ơi cho mình hỏi bạn viết bằng chuong trình biên dịch nào thế CCS-C hay là HTPICC
|
15-12-2009, 07:39 AM | #40 |
Nhập môn đệ tử
Tham gia ngày: Jun 2006
Bài gửi: 10
: |
Anh Bắc ơi, có bài nghiên cứu nào của anh về điều khiển LED ma trận post cho mọi người tham khảo với...
Thanks |
27-01-2010, 10:57 AM | #41 | |
Nhập môn đệ tử
Tham gia ngày: Jan 2010
Bài gửi: 6
: |
Trích:
Tôi cũng gặp tình cảnh tương tự! Win của tôi là XP SP2 có bản quyền, phần mềm chống virus cũng là BKAV bản quyền. Cài xong thì không thể khởi động nên không thể chỉ đường dẫn nhúng các trình biên dịch vào mplab IDE như hỉ dẫn trên microchip được. Ai thực sự đã giải quyết triệt để lỗi trên thì chỉ dẫn cho anh em! ------------------------------- Tôi đã xử lý được theo cách sau: http://www.picvietnam.com/forum/showthread.php?t=5804 thay đổi nội dung bởi: ALU, 27-01-2010 lúc 04:11 PM. Lý do: đã xử lý |
|
18-03-2010, 09:28 AM | #42 |
Nhập môn đệ tử
Tham gia ngày: Mar 2010
Bài gửi: 2
: |
sao khobg cho dơn de
|
18-03-2010, 09:34 AM | #43 |
Nhập môn đệ tử
Tham gia ngày: Mar 2010
Bài gửi: 2
: |
sao ko cho dơn ve
|
27-03-2010, 12:31 PM | #44 |
Nhập môn đệ tử
Tham gia ngày: Jan 2010
Bài gửi: 6
: |
Cám ơn anh Bắc!
|
28-05-2010, 08:01 PM | #45 |
Nhập môn đệ tử
Tham gia ngày: May 2010
Bài gửi: 4
: |
anh Bắc cho em hỏi tí ở chỗ bài nháy led dùng pp delay .theo em thấy mỗi vòng lặp while (time--) chi co 250us phải kô anh ?anh giải thik dùm em với.em mới học pic .cám ơn anh!
|
|
|
Similar Threads | ||||
Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
Cách giao tiếp DS1877 và PIC6F877A | nbqvdp | Cơ bản về vi điều khiển và PIC | 7 | 05-08-2010 06:46 PM |
Hỏi về chương trình HTPIC của ngohaibac | riquelme | Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) | 26 | 20-01-2007 09:42 PM |
Giúp đỡ về HTPIC | riquelme | Cơ bản về vi điều khiển và PIC | 0 | 11-01-2007 11:56 PM |
Giao tiếp Pic6f877A qua cổng máy in???? | spirit | Cơ bản về vi điều khiển và PIC | 8 | 11-09-2006 01:04 PM |