PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 07-04-2007, 04:32 PM   #31
tranvanthuong
Đệ 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.
tranvanthuong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-04-2007, 01:41 AM   #32
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
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
Và sau đây là thực thi của các hàm này:

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);
   	};
}
Còn việc dùng nó quá đơn giản, ví dụ với Ds1307 thì đầu tiên bạn phải:

- 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.
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-04-2007, 09:39 AM   #33
tranvanthuong
Đệ 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.
tranvanthuong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-07-2007, 04:50 PM   #34
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
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.
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-11-2007, 12:04 AM   #35
toanck86
Đệ 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
toanck86 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-01-2008, 10:30 AM   #36
quangdk
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
quangdk vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-04-2008, 10:22 PM   #37
minhham
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.
minhham vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-11-2009, 01:41 PM   #38
tran_binh
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
tran_binh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-12-2009, 12:45 AM   #39
Locangel
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
Locangel vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-12-2009, 07:39 AM   #40
nhulinh
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
nhulinh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-01-2010, 10:57 AM   #41
ALU
Nhập môn đệ tử
 
Tham gia ngày: Jan 2010
Bài gửi: 6
:
Trích:
Nguyên văn bởi ngohaibac View Post
Lỗi này là do khi em cài MPLAB không đủ đó, nó thiếu MPASM toolsuiteASM30 (asm cho PIC30F) nên nó không khởi động dc. Có lẽ là do em cài kiểu gì đó nên k cài cái MPASM toolsuite là complier ASM.

Em cài lại chú ý chọn Custom Option khi nó cho lựa chọn khi cài nhé, rùi chọn hết mà cài cho chắc chắn. Cái này giống cài nhiều phần mềm mà em.

Chúc em thành công.
Theo tôi đây là lỗi khá nhiều người gặp nhưng vẫn chưa có một trả lời nào xác đáng! Ngay cả trên forum của microchip cũng chưa trả lời rõ ràng.

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ý
ALU vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-03-2010, 09:28 AM   #42
congtam1189
Nhập môn đệ tử
 
Tham gia ngày: Mar 2010
Bài gửi: 2
:
sao khobg cho dơn de
congtam1189 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-03-2010, 09:34 AM   #43
congtam1189
Nhập môn đệ tử
 
Tham gia ngày: Mar 2010
Bài gửi: 2
:
sao ko cho dơn ve
congtam1189 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-03-2010, 12:31 PM   #44
dienbk36
Nhập môn đệ tử
 
Tham gia ngày: Jan 2010
Bài gửi: 6
:
Cám ơn anh Bắc!
dienbk36 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-05-2010, 08:01 PM   #45
eros_89_a
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!
eros_89_a vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến

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


Múi giờ GMT. Hiện tại là 08:54 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam