PDA

View Full Version : NHẬN SỬA CHỮA - Học Pic16f877A???


tranbahung80
17-07-2011, 03:47 PM
Đã lâu không tham gia diễn đàn
Không biết bây giờ boot bài hưỡng dẫn có OK không.
Các bạn đã biết cài trình duyệt PIC? Mplap, HTpic..
Nếu nhiều người không biết mình sẽ poot
Bài số 1:

+ Chú ý viết ở đây ko có dấu.
+ Các ví dụ sau đay chỉ là mẫu cho ban học hỏi, vì nó đúng theo sơ đồ mạch tôi cung cấp. Còn các bạn có thể làm mạch đơn giản để học khi không điều kiện làm mạch đầy đủ…
+ Điều quan trong là bạn cần phải lắm chắc cơ bản để làm được ví dụ độc lập.

1) BAI 0-CAU TRUC CHUNG
#include<pic.h>
__CONFIG(HS&PWRTEN&BOREN&LVPDIS&WDTEN);
//======= CAC DINH NGHI VA HAM ===============
void init(void); //su bat dau
//===========HAM NGAT===========
void interrupt MyInt(void) //chuong trinh ngat
{
if(TMR0IF)
{
//SU LY CONG VIEC CAN LAM
TMR0IF = 0;
}
if(TMR2IF)
{
//SU LY CONG VIEC CAN LAM
TMR2IF = 0;
}
//CAC NGAT NAO CAN VIET THI VIET RA.
}
//==========CHUONG TRINH CHINH=========
void main()
{
init();
while(1)
{
//SU LY CONG VIEC TRONG MAIN CANG CANG CANG TOT
CLRWDT();
}
CLRWDT();
}
//=====CAC DINH NGHI CAC HAM DUOC SU DUNG=========
//======KHOI TAO CAC CONG VA CAC HAM==============
void init (void)
{
TRISB = 0b11111111; //cong IN,dinh nghia cong ra hay vao
TRISD = 0b00000000; //cong OUT
PORTD = 0b11111111;
//cong ra tat ca la 1 là muc 5V; con =0 la muc 0V; ru lieu ra hay vao
//KHOI TAO CAC THANG GHI LIEN QUAN
//Quy uoc viet bit la TRISX=0bx7x6x5x4x3x2x1x0;
}
/* thoi gian thuc hien mot lenh la,
TAN SO THACH ANH =FOSC, VI NO QUA BO CHIA 4--> TAN SO CON LAI=FOSC/4
CHU KY LENH CUA PIC = 4/FOSC=Tpic
(HOAC THOI GIAN THUC HIEN MOT LENH = (TAN SO THACH ANH / 4) BOI CON 16F877A) */
//==========THE END=====================

tranbahung80
17-07-2011, 03:48 PM
BÀI SỐ 2

2) BAI1-cổng- nháy led
//VAO RA CONG VA NHAY LED CONG D BANG TRE THOI GIAN
#include<pic.h>
__CONFIG(HS & PWRTEN & BOREN & LVPDIS);
//---------Cac dinh nghia va Ngat----------
void init(void);
void delay(void);
//---------Chuong trinh chinh------------------
void main()
{
CLRWDT();
init();
while(1)
{
PORTD = 0b11111111;
delay();
PORTD = 0b00000000;//0x00;
delay();
}
CLRWDT();
}
//------DINH NGHIA CONG VAF CAC NGAT-------------------
void init(void)
{
TRISD = 0b00000000; //=1 laf IN, =0 la OUT
PORTD = 0b00000000;
TRISB = 0b11111111;
TRISC = 0b11111111;
TRISA = 0b11111111; //CONG ALAGOC
TRISE = 0b00000111; // SO
ADCON1 = 0b00000010; // ANi là c?ng s?
}
//---------LAM TRE THOI GIAN------------
void delay (void)
{
unsigned int i;
for(i=0;i<65535;i++)
{
NOP(); // khoang 30 lenh,
CLRWDT();
}
}
//=========THE END=========

3) Bai 2-Nhay led-TMTO
#include<pic.h>
__CONFIG(UNPROTECT & WDTEN & HS & PWRTEN & BOREN & LVPDIS & DUNPROT & DEBUGDIS);
//========Cac dinh nghia dung moi loi=========
void init(void); // su bat dau
bit bNewTMR0; // bit la dieu kien tat mo .....
//===========HAM NGAT================
#define T0 100
unsigned int uiClk0; //la ki tu dem den bao nhieu thi chan
void interrupt MyInt(void)
{
//--------ngat TMRO--------------------
if(TMR0IF)
{
TMR0 = 256-T0;
//Thoi gian co mot ngat= (0.2µs)*(128)*((256-TMR0)=T0) (µs)=2560 µs =2.56ms
if((uiClk0++)==390) //tao thoi gian tre TMR0=1s
{
uiClk0 = 0;
bNewTMR0 = 1; //dieu kien bat tat?,
}
TMR0IF = 0; //xao co ngat,
}
}
//==========Chuong trinh chinh'=================
void main() //chuong trinh trinh
{
init(); //bat dau chuong trinh
while(1)
{
if(bNewTMR0 == 1) //khi =1 thi dung thuc hien
{
RD0 = !(RD0); //dung dao
RD2 = !(RD2); //de dao thi viet tung bit
RD4 = !(RD4);
RD6 = !(RD6);
bNewTMR0 = 0; //soa = 0
}
NOP();
CLRWDT();
}
CLRWDT();
}
//==========THE END MAIN====================
void init(void)
{
//---------Dinh nghi cac cong------------------
TRISD = 0b00000000; //cong X la ra
PORTD = 0b11111111; //CONG RA MUC 0 HAY 1
//----------Khoi tao TMRO--------------
OPTION = 0b00000110; //bA bit cuoi ty le chia 128
TMR0IE = 1; //cho phep ngat TMRO
//-----------Co ngat toan cuc--------------
//PEIE = 1; //cho phép các ng?t ngoài làm vi?c
GIE = 1; //choi phep ngat toan cuc
}
//====THE END==================

tranbahung80
17-07-2011, 03:50 PM
BÀI 3
4) Bài 3 Nháy Led TMR1
#include<pic.h>
__CONFIG(UNPROTECT & WDTEN & HS & PWRTEN & BOREN & LVPDIS & DUNPROT & DEBUGDIS);
//=========Cac dinh nghia======================
void init(void); //su bat dau
//==========HAM NGAT==================
#define T1 10000
void interrupt MyInt(void) //chuong trinh ngat
{
static unsigned int suiClk1; //Mang tinh nguyen ,
if(TMR1IF)
{
TMR1ON = 0; //Tat ko cho TMR1 khi chua khoi tao
TMR1H = ((65535-T1)>>8); //nhap bai
TMR1L = ((65535-T1) & 0x00ff);//nhap bai thap
TMR1ON = 1;
if( suiClk1++==62) // lap 62.5 la 1s
{
suiClk1= 0;
RD0 = !(RD0);
RD2 = !(RD2); //de dao thi viet tung bit
RD4 = !(RD4);
RD6 = !(RD6);
}
TMR1IF = 0; //xoá co tràn
}
}
//==========Chuong trinh chinh'===============
void main() //chuong trinh trinh
{
init(); //bat dau chuong trinh
while(1)
{
NOP(); //ko lam gi ca
CLRWDT();
}
CLRWDT();
}
//=======E END MAIN=========
void init (void)
{
TRISB = 0b11111110;
TRISD = 0b00000000;
PORTD = 0b10101010;
//--------- khoi tao cho TMR1-------------
T1CON = 0b00111101;
//bit 7&6 =0, bit 5&4 ty le chia, bít1 là ty la chia Fosc/4 phai co;
//bit0=1 la bat,bit0=0 la tat; ty le chia 8
TMR1IE = 1; //cho phep ngat TMR1
//---------ngat toan cuc -----------
PEIE = 1; //cho phép các ngat ngoài làm viec
GIE = 1;
}
//==========THE END===============

5) Bai 4- Nhay led TMR2

#include<pic.h>
__CONFIG(UNPROTECT & WDTEN & HS & PWRTEN & BOREN & LVPDIS & DUNPROT & DEBUGDIS);
//===========Cac dinh nghia=============
void init(void); //su bat dau
//========M NGAT==============
#define T2 78
static int siClk2;
void interrupt MyInt(void) //chuong trinh ngat
{
if(TMR2IF) //ngat TMR2 chia sau dúng ,chia chuoc thì chú ý
{
TMR2 = 256 - T2;
TMR2IF = 0; //TGMNT2 = 0.2*256*78.125=4000µs=4ms
if(siClk2++==1000) //tao 1s
{
siClk2= 0;
RD0 = !(RD0); //dung dao
RD2 = !(RD2); //de dao thi viet tung bit
RD4 = !(RD4);
RD6 = !(RD6);
}
}
}
//==========Chuong trinh chinh'===========
void main() //chuong trinh trinh
{
init(); //bat dau chuong trinh
while(1)
{
NOP(); //ko lam gi ca
CLRWDT();
}
CLRWDT();
}
//=========THE END MAIN=======
void init (void)
{
TRISB = 0b11111110;
TRISD = 0b00000000;
PORTD = 0b10101010;
//--------Khoi tao cho TMR2-----------------
T2CON = 0b01000100;
//Bít7=0;Bit(6-3) là ti le chia chuoc,Bít(1-0) ti le chia sau,
//ti le chia chuac 16 chia sau là 16 tich là 256; CHÚ Ý
TMR2IE=1; //cho phép ngat
PEIE=1;
GIE=1;
}
//=========THE END===========

duongvietin
20-02-2012, 09:51 PM
cái này gọi là chỉ người ta cách ,lập trình pic co bản
mà sao a k post thêm nữa vậy.chẳng hạn như về led ma trận ấy
hjjhjj.
thú thiệt la e cũng dang cần

sieutosy
29-03-2012, 05:05 PM
a cho em hỏi chương trình viết bằng ccs thì cấu trúc lệnh có giống như vậy không ạ ?

sieutosy
29-03-2012, 05:08 PM
a post code mẫu cho e với ! thank

takado
30-03-2012, 05:15 PM
mình đang làm quen với 89 và AVR tự nhiên bây giờ bị sếp giao cho đọc và hiểu code PIC. nhìn vào mặt mũi xám ngắt lại chẳng hiểu gì. lệnh và thanh ghi của PIC khác quá. cảm ơn bạn đã post bài ví dụ để mình làm quen nhanh hơn. ai cần giúp đỡ về AVR và 8051 thì qua dientuvietnam.net mình hay viết bài ở đó lắm