Điều khiển 16 led sáng đuổi Từ trái sang phải Pic 16f877a

Thiết kế hệ thống Điều khiển 16 led  đơn sáng đuổi Từ trái sang phải , thời gian thay đổi trạng thái là 1s 
sử dụng Pic 16f877A
 sử dụng timer để tạo thời giản delay 
http://huavkhoa.blogspot.com/2014/10/ieu-khien-16-led-sang-uoi-tu-trai-sang.html



sử dụng pic 16f877a
 trình biên dịch MPlab hitech c 
code chương trình :

//#include <pic.h>
#include <htc.h>
#include <math.h>

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

__CONFIG(HS & WDTDIS & PWRTEN & UNPROTECT & BORDIS & LVPDIS);
#define _XTAL_FREQ 4000000

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

unsigned char count = 0; // Khai bao va dat gia tri ban dau cho bien dem.
unsigned char demc = 0; // Khai bao va dat gia tri ban dau cho bien dem.
const unsigned char A[] = {1,2,4,8,16,32,64,128,0x00};

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void init_PORTD(void)
{
PORTD = 0X00; // Khoi tao Port D.
TRISD = 0X00; // PORTD la ngo ra.
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void init_PORTC(void)
{
PORTC = 0X00; // Khoi tao Port C.
TRISC = 0X00; // PORTC la ngo ra.
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// ***************************************************
// Ten CTC: interrupt Timer1_ISR. CTC nay la ISR tai vecto ngat (0x04).
// Thong so dau vao:
// Thong so dau ra:
// Cong dung:     Xu ly cho ngat.
// ***************************************************
void interrupt Timer1_ISR(void)
{
//          R/W-0   R/W-0    R-0     R-0    R/W-0   R/W-0   R/W-0   R/W-0
// PIR1 = | PSPIF |  ADIF |  RCIF |  TXIF | SSPIF | CCP1IF| TMR2IF| TMR1IF|
TMR1IF = 0; // Xoa co ngat Timer1 (TMR1IF = 0).
// Nap cho Timer1 gia tri ma no se tran sau 50,000 chu ky lenh.

TMR1H = 0X3C; // TMR1H:TMR1L = -50,000 = 3C:B0 HEX.
TMR1L = 0XB0;
if(count<=7)
PORTC = A[count];
if(count==8)
PORTC = 0X00;
if((count<=16)&&(count>7))
PORTD = A[count-8];
count++;
if(count == 17)
count=0;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// ***************************************************
// Ten CTC: init_Timer1.
// Thong so dau vao:
// Thong so dau ra:
// Cong dung:     Khoi tao Timer1.
// *************************************************** 
void init_Timer1(void)
{
//            U-0     U-0    R/W-0   R/W-0   R/W-0   R/W-0   R/W-0   R/W-0
// T1CON = |Not_use|Not_use|T1CKPS1|T1CKPS0|T1OSCEN| T1SYNC| TMR1CS| TMR1ON|
TMR1ON = 0; // Khong cho Timer1 hoat dong.
 
TMR1H = 0X00; // Xoa gia tri cua Timer1.
TMR1L = 0X00;
 
// Chon nguon xung (clock source), gia tri pre-scaler,
// nap gia tri 0x3CB0 (-50,000) vao Timer1.
TMR1H = 0X3C; // Khoi tao TMR1L va TMR1H.
TMR1L = 0XB0;

//            U-0     U-0    R/W-0   R/W-0   R/W-0   R/W-0   R/W-0   R/W-0
// T1CON = |Not_use|Not_use|T1CKPS1|T1CKPS0|T1OSCEN| T1SYNC| TMR1CS| TMR1ON|
T1CKPS0 = 1; // Cau hinh prescaler la 1:2.
T1CKPS1 = 0;
TMR1CS = 0; // Thiet lap nguon xung (clock source) la Fosc/4.
}
// ***************************************************
// Ten CTC: init_interrupts.
// Thong so dau vao:
// Thong so dau ra:
// Cong dung:     Thiet lap cac ngat cho Timer1.
// ***************************************************   
void init_interrupts(void) // HAM KHOI TAO NGAT TIMER1(HAY CON GOI LA NGAT NGOAI VI)


{
TMR1IE = 1; // Cho phep ngat Timer1 (TMR1IE = 1).
TMR1IF = 0;   // Xoa co ngat Tmier1 (TMR1IF = 0).
PEIE = 1; // Cho phep ngat ngoai vi(PEIE = 1).
GIE = 1; // Cho phep ngat toan cuc (GIE = 1).
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void main (void)
{
init_PORTC(); // Khoi tao Port C.
init_PORTD(); // Khoi tao Port D.

init_Timer1(); // Khoi tao Timer1.
init_interrupts(); // Thiet lap cac ngat Timer1.

//            U-0     U-0    R/W-0   R/W-0   R/W-0   R/W-0   R/W-0   R/W-0
// T1CON = |Not_use|Not_use|T1CKPS1|T1CKPS0|T1OSCEN| T1SYNC| TMR1CS| TMR1ON|
TMR1ON = 1; // Cho Timer1 hoat dong.
while(1); // Vong lap cho ngat.
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Popular posts from this blog

Download mikroC PRO for PIC - Version 6.6.3 FULL

Stt Tháng tư Chào tháng Tư nhé!