PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT 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

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 02-05-2006, 01:47 AM   #10
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
Điều chế PWM và đếm xung hiển thị 4Led

Đây là chương trình điều chế xung PWM trên chân RC2/CCP1 và đếm xung từ chân RC1/T1OSI/CCP2 hiển thị lên 4led7 thanh. Mình dùng Encoder 100 lỗ mượn của bạn .
Code:
#include<pic.h>
__CONFIG(HS & PWRTEN & BOREN & LVPDIS & WDTDIS );

const unsigned char Font[]={ 0b00000011, 0b10011111, 0b00100101, 0b00001101, 0b10011001,\
							0b01001001, 0b01000001, 0b00011111, 0b00000001, 0b00001001};


// Chuyen doi
void Convert(unsigned char *a,unsigned char index, unsigned int number){
	unsigned char i;
	for(i=0;i< index; i++){
		*(a+i)  = number%10;
		number = number/10;
	};	
 }

//=====  Ham khoi tao
void interrupt MyInt(void){
	static volatile unsigned int counter1, counter2, counter3;//, counterTimer1;
	unsigned int temp;					
	// counter1 dem so lan Timer0 tran
	// counter2  dem so lan ca  4 led7 thanh  duoc quet
	static volatile unsigned int number;
	static volatile unsigned char a[4]={0,0,0,0};
	static volatile unsigned char j,k;  // bien dem kiem tra xem led nao duoc quet
		if(T0IF & T0IE){	
			TMR0 = 6;
			T0IF = 0 ;// xoa co ngat
			++counter1;
			if( counter1 == 5){
				counter1 = 0;
				PORTD = 0xFF;
				PORTA  = 0xFF - (1<<(5- j)) ;
				PORTD	= Font[a[j]];
				if( j==2) RD0= 0;
				if(++j==4)	j=0;
			};
			if(++counter2 == 200){
				number  = (TMR1H << 8) | TMR1L;
				// gia tri toc do trong 1s = number * 1000/(100 * counter2 )		(vong/s)
				number = number * 5 ;	 //= number *0.0 5 vong/s  => * 5vong/s de hien thi len 4led
				TMR1ON = 0 ; // ngung Timer1
				TMR1H = TMR1L = 0;
				TMR1ON = 1 ;  // bat lai Timer1
				 if(number>9999) number= 0;
				counter2 = 0;
				Convert(a, 4, number);
			};
			if(++counter3 == 1000){
				k  = 70;
				counter3 = 0;
				temp = 4* (PR2 + 1) * k/100;
				CCPR1L = temp>>2;
				CCP1Y  = temp - ((temp>>1)<<1);//temp%2;
				CCP1X = (temp>>1)%2;
				//k += 10; 					// tang 10%
				//if( k > 100) k=0;
			};	
		};
}

//------------------------------------init
void init(void){

//===== init for PWM
	// PWM Period = [ PR2 +1 ] x 4 x Tosc x   (TMR2 Prescaler Value)
	PR2 = 82;						// Tan so = 15 KHz, TMR2 Prescaler Value = 4
	// PWM Duty Cycle = [ CCPR1L : CCP1CON<5:4>) x Tosc x  (TMR2  Prescaler Value)
	// =>   CCPR1L : CCP1CON<5:4> = k% x (TMR2 + 1 ) x 4;
	CCPR1L = 0;
	TRISC2 = 0;						// RC2 la output
	RC2  = 1;
	T2CON = 0b00000101;			// Timer2 on, TMR2 Prescaler Value = 4
	CCP1CON = 0b00001100;		// CCP1 hoat dong trong che do PWM

//=================   init for PORTs
	OPTION =  0b00000000;
	ADCON1 = 0b00000111;
	TRISA	= 0b00000000;
	TRISD	= 0b00000000;
	PORTD = Font[0];

//================  Khoi tao cho Timer0
	GIE		= 1;
	T0IE = 1;
	TMR0 = 6;
	
// ========= Khoi tao cho dem Timer1
	TMR1CS   = 1;						// Timer1 hoat dong o che do Counter Mode
	T1SYNC  = 1;						// TMR1 hoat dong o che do dem khong dong bo
	T1OSCEN = 1;						// Dem xung tu chan RC1/T1OSI/CCP2
	T1CKPS1 = T1CKPS0 = 0;			// Chon Prescaler = 1:1
	TMR1H = TMR1L = 0;
	TMR1IE = 0 ;						// Khong dung ngat Timer1
	TMR1ON = 1;						// Bat Timer1
}

//------------------------------------MAIN
void main(){
	init();
	while(1);
}
// == Kết thúc
Chúc các bạn thành công.
ngohaibac 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

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
Cách giao tiếp DS1877 và PIC6F877A nbqvdp Cơ bản về vi điều khiển và PIC 7 05-08-2010 06:46 PM
Hỏi về chương trình HTPIC của ngohaibac riquelme Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) 26 20-01-2007 09:42 PM
Giúp đỡ về HTPIC riquelme Cơ bản về vi điều khiển và PIC 0 11-01-2007 11:56 PM
Giao tiếp Pic6f877A qua cổng máy in???? spirit Cơ bản về vi điều khiển và PIC 8 11-09-2006 01:04 PM


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