Nguyên văn bởi  vakk
					 
				 
				#include <pic16f886.h> 
#include <htc.h> 
__CONFIG(FOSC_HS&WDTE_OFF&PWRTE_ON&MCLRE_ON&CP_OFF  &CPD_OFF&BOREN_OFF&IESO_OFF&FCMEN_OFF&LVP_OFF&DEBU  G_OFF); 
__CONFIG(BOR4V_BOR21V&WRT_OFF); 
int i=0; 
 
const unsigned int sine[500]={400,405,409,414,418,423,427,432,436,441,445,450,  454,459,463,467,472,476,481,485,489,494,498,503, 
507,511,515,520,524,528,532,537,541,545,549,553,55  7,561,565,569,573,577,581,585,589,593,597,600,604, 
608,612,615,619,622,626,629,633,636,640,643,646,65  0,653,656,659,662,665,668,671,674,677,680,683,686, 
688,691,694,696,699,701,704,706,709,711,713,715,71  8,720,722,724,726,728,729,731,733,735,736,738,739, 
741,742,744,745,746,747,749,750,751,752,753,754,75  4,755,756,757,757,758,758,759,759,759,760,760,760, 
760,760,760,760,760,760,759,759,759,758,758,757,75  7,756,755,754,754,753,752,751,750,749,748,746,745, 
744,742,741,740,738,736,735,733,731,730,728,726,72  4,722,720,718,716,713,711,709,707,704,702,699,697, 
694,691,689,686,683,681,678,675,672,669,666,663,66  0,656,653,650,647,643,640,637,633,630,626,623,619, 
616,612,608,605,601,597,593,589,586,582,578,574,57  0,566,562,558,554,550,546,541,537,533,529,525,520, 
516,512,507,503,499,494,490,486,481,477,472,468,46  4,459,455,450,446,441,437,432,428,423,419,414,410, 
405,401,396,392,387,382,378,373,369,364,360,355,35  1,347,342,338,333,329,324,320,315,311,307,302,298, 
294,289,285,281,277,272,268,264,260,256,251,247,24  3,239,235,231,227,223,219,215,212,208,204,200,196, 
193,189,185,182,178,175,171,168,164,161,157,154,15  1,148,144,141,138,135,132,129,126,123,120,117,115, 
112,109,107,104,101,99,96,94,92,89,87,85,83,81,79,  77,75,73,71,69,67,66,64,62,61, 
59,58,56,55,54,53,52,50,49,48,47,47,46,45,44,44,43  ,42,42,41,41,41,40,40,40, 
40,40,40,40,40,40,41,41,41,42,42,43,43,44,45,45,46  ,47,48,49,50,51,52,53,55, 
56,57,59,60,62,63,65,67,68,70,72,74,76,78,80,82,84  ,86,89,91,93,96,98,100,103, 
106,108,111,114,116,119,122,125,128,131,134,137,14  0,143,146,150,153,156,159,163,166,170,173,177,180, 
184,188,191,195,199,202,206,210,214,218,222,226,23  0,234,238,242,246,250,254,258,262,266,271,275,279, 
283,288,292,296,301,305,309,314,318,323,327,331,33  6,340,345,349,354,358,363,367,372,376,381,385,390, 
394 
}; 
void PORT(void) 
{ 
	TRISA=0x00; 
	TRISB=0x00; 
	TRISC=0x00; 
	PORTA=0x00; 
	PORTB=0x00; 
	PORTC=0x00; 
}  
 
void setduty(int duty) 
{ 
	int temp; 
	temp=duty&0x003; 
	CCP1CON=(CCP1CON&0x8C)|(temp<<4); 
	CCPR1L=duty>>2; 
	 
}	 
 
	 
void PWM(void) 
{ 
	T2CON=0x00;//pre=1,post=1 
	TMR2IE=0; 
	TMR2IF=0; 
	TMR2=0; 
	PR2=199; 
	CCP1CON=0x8C; 
	 
	PWM1CON=0x04; 
	 
}  
void main(void) 
{ 
	PORT(); 
	 
	PWM(); 
	TMR2ON=1; 
	while(1) 
	{ 
		RC0^=1; 
		 
		setduty(sine[i]); 
		while(!TMR2IF){} 
		i++; 
		if(i>=500) i=0; 
		 
		TMR2IF=0; 
	} 
} 
			
		 |