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

📄 vidu6-1.c

📁 code c&#7911 a dsp 30f4012 vi&#7871 t cho giao ti&#7871 p LCD
💻 C
字号:
/*******************************************************************************
;	Vidu6-1.c la chuong trinh viet bang C30 de chay tren mot dsPIC			   *
;	Chuong trinh thuc hien viec sau: Xuat du lieu ra MCP41010 de tao ra song   *
;	tan so 50 Hz tai ngo ra cua MCP41010.									   *
;*******************************************************************************

;	Tac gia				: Nguyen Quang Nam									   *

;	Don vi				: PIC Viet Nam										   *

;	Ten tap tin			: Vidu6-1.c											   *

;	Ngay				: 16/03/2007										   *

;	Phien ban			: 0.01												   *

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

;	Cong cu duoc dung:	MPLAB 7.60											   *
;						C30 3.01 SE											   *
;						ASM30 3.00											   *
;						LNK30 3.00											   *
------------------------------------------------------------------------------*/
#include	<p30fxxxx.h>

	_FOSC(CSW_FSCM_OFF & FRC_PLL4);
	_FWDT(WDT_OFF);
	_FBORPOR(PBOR_OFF & MCLR_EN);
	_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 _ISR_PSV __attribute__((interrupt, auto_psv))
#define CS	LATDbits.LATD0

//Cac prototype cho cac chuong trinh con
void Init_PORTS(void);
void Init_TMR1(void);
void Init_SPI(void);

//Bang tao ham sin, 0-90 do
const unsigned char	__attribute__ ((space(psv), address (0x0400)))
SinTable[91]={0,2,4,7,9,11,13,15,18,20,22,24,26,29,31,33,35,37,39,
	41,43,46,48,50,52,54,56,58,60,62,64,65,67,69,71,73,75,76,78,80,82,83,85,87,
	88,90,91,93,94,96,97,99,100,101,103,104,105,107,108,109,110,111,112,113,114,
	115,116,117,118,119,119,120,121,121,122,123,123,124,124,125,125,125,126,126,
	126,127,127,127,127,127,127};

//Cac bien toan cuc
volatile unsigned int time_out;
unsigned int idx, tmp;
unsigned char value; 

//------------------------------------------------------------------------------
//Chuong trinh chinh
int main(void) {
	Init_PORTS();		//Khoi tao cac chan I/O
	Init_SPI();			//Khoi tao module SPI, che do master
	Init_TMR1();		//Khoi tao Timer 1, timer van chua chay
	_PSV=1;
	PSVPAG = __builtin_psvpage(SinTable);
	T1CONbits.TON = 1;	//Bat Timer 1
	idx = 0;
	CS = 1;
	IFS0bits.SPI1IF = 0;
	while (1) {
		if (time_out == 0xFFFF) {
			time_out = 0;

			//Su dung tinh doi xung tam cua dang song sin de tinh ra gia tri
			//tuc thoi tai 1 goc nao do, dua vao bang du lieu cho 1/4 chu ky
			if (idx < 90) value = SinTable[idx] + 128;
			else if (idx < 180)	value = SinTable[(180 - idx)] + 128;
			else if (idx < 270)	value = 128 - SinTable[(idx - 180)];
			else value = 128 - SinTable[(360 - idx)];
			idx++;
			if (idx >= 360) idx = 0;

			CS = 0;
			tmp = SPI1BUF;		//Doc du lieu rac de xoa co SPIRBF

			//Ghi gia tri moi vao MCP41010, yeu cau cap nhat POT0
			SPI1BUF = (0x11 << 8) + value;
			while (TMR1 < 180) ;	//Cho 1 khoang thoi gian de dsPIC
									//gui het 16 bit du lieu
			CS = 1;
		}
	}
}

//Chuong trinh con khoi tao cac PORT
//------------------------------------------------------------------------------
void Init_PORTS(void) {
	TRISD = 0;
	TRISE = 0;
	TRISF = 0x0004;
}

//Chuong trinh con khoi tao Timer 1, tran 360*50 lan moi giay
//------------------------------------------------------------------------------
void Init_TMR1(void) {
	TMR1 = 0;			//Xoa so dem trong TMR1
//	PR1 = 4443;			//Timer 1 tran moi 1/1800 giay (555 us)
	PR1 = 443;			//Timer 1 tran moi 1/18000 giay (55.5 us)
//	PR1 = 221;			//Timer 1 tran moi 1/36000 giay (27.75 us)
	_T1IF = 0;			//Xoa co ngat cua Timer 1
	T1CON = 0x0000;		//Dung Fcy lam clock, prescale = 1:1, tat Timer 1
	_T1IE = 1;			//Cho phep ngat Timer 1
}

//Chuong trinh con khoi tao module SPI, che do master
//------------------------------------------------------------------------------
void Init_SPI(void) {
//	SPI1CON = 0x072D;	//PPRE*SPRE = 1:80, 100 kHz SPI clock, SMP = 1
	SPI1CON = 0x073A;	//PPRE*SPRE = 1:8, 1 MHz SPI clock, SMP = 1, Master
//	SPI1CON = 0x053A;	//PPRE*SPRE = 1:8, 1 MHz SPI clock, SMP = 0, Master
//	SPI1CON = 0x0532;	//PPRE*SPRE = 1:16, 0.5 MHz clock, SMP = 0, Master
//	SPI1CON = 0x453A;	//PPRE*SPRE = 1:8, 1 MHz clock, SMP = 0, Master, Framed
	SPI1STATbits.SPIROV = 0;
	SPI1STATbits.SPIEN = 1;
}

//Chuong trinh xu ly ngat Timer 1
//------------------------------------------------------------------------------
void _ISR_PSV _T1Interrupt(void) {
	_T1IF = 0;			//Xoa co ngat
	time_out = 0xFFFF;
}

⌨️ 快捷键说明

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