View Single Post
Old 22-06-2011, 04:45 PM   #1
TANDEM
Đệ tử 2 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 40
:
Cấu hình dao động cho Pic18F4550

Chào các bác! Nhờ các bác xem giúp em chương trình sau. Khi em sử dụng delay_ms() và ngắt timer3 thì thời gian hoạt động là không chính xác: delay_ms(1000) mà phải tới gần 1 phút sau thì mới có hiệu lực, cả ngắt timer3 cũng vậy. Nhưng nếu em thay #use delay(clock=1000000) thì lệnh delay_ms(1000) hoạt động chính xác còn ngắt timer3 vẫn không chính xác. Rất mong các bác giúp đỡ!
Code:
#include <18F4550.H>
#include <DEF_18F4550.H>

#FUSES NOWDT                 			//No Watch Dog Timer
#FUSES HSPLL, PLL5, CPUDIV1
#fuses ECPLL					//Su dung PLL va RA6 lam pin ra
#FUSES NOPROTECT             			//Code not protected from reading
#FUSES NOBROWNOUT            			//No brownout reset
#FUSES NOPUT                 			//No power Up Timer
#FUSES NODEBUG               			//No Debug mode for ICD
#FUSES NOLVP                 			//No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT                 			//Program memory not write protected
#FUSES MCLR					//Master clear reset
#FUSES CCP2C1  					//Su dung rc1 lam cong OUT PWM
#use delay(clock=48000000)			//Thach anh gan tren board la 20MHz

#define dctrai		rc6			
#define dcphai		rc7			

//Ham ngat TIMER3(dung cho xu ly Encoder)***********************************************
#int_TIMER3
void  TIMER3_ProcesEncoder(void) 
{
	set_timer3(50536);
	n++;
	if(n==100)				//100*0.01(s)=1(s). Sau 1(s) thi tien hanh lay mau 1 lan
	{					
		porta=0b00000000;
		n=0;											
	
	}	
	clear_interrupt(int_TIMER3);
}	

void main(void)
{
	
	
	setup_adc_ports(NO_ANALOGS);		//tat ca porta la digital                        
	set_tris_c(0b00110001);
	set_tris_a(0b00010000);			
	enable_interrupts(int_TIMER3);
	enable_interrupts(Global);	
	setup_timer_3(T3_INTERNAL|T3_DIV_BY_8);	//thiet lap timer3 o che do xung noi va sau 8 lan tran thi duoc MCU coi la 1 su kien -> xay ra ngat timer3 	
   	set_timer3(50536);			//100(Hz) = 48.000.000/[4*(65536-n)*8]
   						//n = 65536-[480.000/(4*8)] = 50536
   						//T = 1/f = 1/100 = 0.01(s) -> Sau 0.01(s) thì xay ra ngat timer3	
	portc=0b00000000;
	porta=0b00001111;
	while(true)
	{
		dcphai=1;
		dctrai=0;
	   	delay_ms(1000);			
	   	dctrai=1;
	   	dcphai=0;
	   	delay_ms(1000);
	}
}
và đây là sơ đồ mạch.
Hình Kèm Theo
File Type: bmp Untitled.bmp (995.9 KB, 15 lần tải)

thay đổi nội dung bởi: TANDEM, 22-06-2011 lúc 10:15 PM.
TANDEM vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn