PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và 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

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
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
 


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


Múi giờ GMT. Hiện tại là 08:57 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