⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vidu4-3.c

📁 dsp t&#7915 c&#417 b&#7843 n &#273 &#7871 n n&#226 ng cao 1
💻 C
字号:
/*******************************************************************************
;	Vidu4-3.c la chuong trinh viet bang C30 de chay tren mot dsPIC			   *
;	Chuong trinh thuc hien viec sau: Thiet lap cac tham so cho RTC DS1307 	   *
;	thong qua giao tiep I2C, su dung module I2C cua dsPIC					   *
;*******************************************************************************

;	Tac gia				: Nguyen Quang Nam									   *

;	Don vi				: PIC Viet Nam										   *

;	Ten tap tin			: Vidu4-3.c											   *

;	Ngay				: 25/08/2006										   *

;	Phien ban			: 0.01												   *

;	Nhung tap tin can thiet khac: p30F4012.gld, p30f4012.h					   *

;	Cong cu duoc dung:	MPLAB 7.31											   *
;						C30 2.02 SE											   *
;						ASM30 2.14											   *
;						LNK30 2.14											   *
------------------------------------------------------------------------------*/
#include "p30f4012.h"

	_FOSC(CSW_FSCM_OFF & FRC_PLL4);		//Clock = 32 MHz
	_FWDT(WDT_OFF);
	_FBORPOR(MCLR_EN & PBOR_OFF & PWMxL_ACT_HI & PWMxH_ACT_HI);
	_FGS(CODE_PROT_OFF);

//------------------------------------------------------------------------------
//Cac hang so cua chuong trinh (gia tri tuc thoi dung trong chuong trinh)

#define	Fcy	8000000		//Tan so thuc thi lenh
#define	baud	100000	//Toc do baud cua giao tiep I2C

//Cac prototype cho cac chuong trinh con
void Init_PORTS(void);
void Init_I2C(void);
void Send_I2C(unsigned char);
void Wait_I2C(void);
void I2C_Fail(void);

//Cac bien toan cuc
unsigned short temp;

//------------------------------------------------------------------------------
//Chuong trinh chinh
int main(void) {
	Init_PORTS();		//Khoi tao cac cong I/O
	Init_I2C();			//Khoi tao module I2C
	//Buoc 1, tao dieu kien START, cho hoat dong I2C hoan tat
	_SEN = 1;
	Wait_I2C();			//Cho hoat dong I2C hoan tat
	//Buoc 2, xuat dia chi cua RTC voi thao tac ghi, cho va kiem tra ACK
	Send_I2C(0xD0);		//Xuat dia chi cua RTC DS1307, sap ghi vao RTC
	Wait_I2C();			//Cho hoat dong I2C hoan tat
	if (_ACKSTAT)	I2C_Fail();		//Neu NACK thi dung chuong trinh
	//Buoc 3, xuat dia chi cua thanh ghi dich (target), cho va kiem tra ACK
	Send_I2C(0x00);		//Xuat dia chi cua thanh ghi can thao tac
	Wait_I2C();			//Cho hoat dong I2C hoan tat
	if (_ACKSTAT)	I2C_Fail();		//Neu NACK thi dung chuong trinh
	//Buoc 4, xuat noi dung cho cac thanh ghi dich (target), cho va kiem tra ACK
	Send_I2C(0x00);		//Xuat noi dung cua thanh ghi 0x00 (dem giay va bit CH)
	Wait_I2C();			//Cho hoat dong I2C hoan tat
	if (_ACKSTAT)	I2C_Fail();		//Neu NACK thi dung chuong trinh
	Send_I2C(0x00);		//Xuat noi dung cua thanh ghi 0x01 (dem phut)
	Wait_I2C();			//Cho hoat dong I2C hoan tat
	if (_ACKSTAT)	I2C_Fail();		//Neu NACK thi dung chuong trinh
	Send_I2C(0x67);		//Xuat noi dung cua thanh ghi 0x02 (dem gio va che do)
	Wait_I2C();			//Cho hoat dong I2C hoan tat
	if (_ACKSTAT)	I2C_Fail();		//Neu NACK thi dung chuong trinh
	Send_I2C(0x01);		//Xuat noi dung cua thanh ghi 0x03 (dem thu trong tuan)
	Wait_I2C();			//Cho hoat dong I2C hoan tat
	if (_ACKSTAT)	I2C_Fail();		//Neu NACK thi dung chuong trinh
	Send_I2C(0x25);		//Xuat noi dung cua thanh ghi 0x04 (dem ngay)
	Wait_I2C();			//Cho hoat dong I2C hoan tat
	if (_ACKSTAT)	I2C_Fail();		//Neu NACK thi dung chuong trinh
	Send_I2C(0x08);		//Xuat noi dung cua thanh ghi 0x05 (dem thang)
	Wait_I2C();			//Cho hoat dong I2C hoan tat
	if (_ACKSTAT)	I2C_Fail();		//Neu NACK thi dung chuong trinh
	Send_I2C(0x06);		//Xuat noi dung cua thanh ghi 0x06 (dem nam)
	Wait_I2C();			//Cho hoat dong I2C hoan tat
	if (_ACKSTAT)	I2C_Fail();		//Neu NACK thi dung chuong trinh
	Send_I2C(0x90);		//Xuat noi dung cua thanh ghi 0x07 (dieu khien SQW/OUT)
	Wait_I2C();			//Cho hoat dong I2C hoan tat
	if (_ACKSTAT)	I2C_Fail();		//Neu NACK thi dung chuong trinh
	//Buoc 5, tao dieu kien STOP, cho hoat dong I2C hoan tat
	_PEN = 1;	//Tao ra dieu kien STOP
	Wait_I2C();			//Cho hoat dong I2C hoan tat
	while (1) Nop();	//Vong lap chinh
}

//Chuong trinh con khoi tao cac cong I/O
void Init_PORTS(void) {
	LATE = 0xFFFF;		//Tat cac LED (anode chung) noi vao cong E
	TRISE = 0xFFFE;		//LED noi vao RE0
}

//Chuong trinh con khoi tao module I2C
void Init_I2C(void) {
	I2CCON = 0x8200;		//bit15=I2CEN, bit9=DISSLW (tat Slew Rate
							//Control cho cac toc do baud khac 400 kbps)
	I2CBRG = (((Fcy/baud) - (Fcy/1111111))-1);
}

//Chuong trinh con xuat 1 byte qua module I2C
void Send_I2C(unsigned char d) {
	I2CTRN = d;
}

//Chuong trinh con cho hoat dong Master I2C sau cung hoan tat
void Wait_I2C(void) {
	while (!_MI2CIF);
	_MI2CIF = 0;
}

//Chuong trinh con xu ly khi hoat dong I2C bi loi
void I2C_Fail(void) {
	_PEN = 1;		//Tao ra dieu kien STOP
	Wait_I2C();			//Cho hoat dong I2C hoan tat
	LATE &= 0xFFFE;		//Bat LED noi vao RE0 de bao loi
	while (1);			//Dung chuong trinh tai day
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -