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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 11-01-2011, 08:47 PM   #1
robotpic
Đệ tử 4 túi
 
Tham gia ngày: Jun 2010
Bài gửi: 79
:
chuong trinh minh sao khong chay dung y cua minh

Code:
#include <18f4331.h>
#include <def_4331.h>

#FUSES HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT,NOPUT,NOCPD,NODEBUG,NOFCMEN,NOCPB,STVREN,NOPWMPIN,HPOL_LOW
//#FUSES MCLR,NOIESO,NOWRTC,NOWRTB,NOWRTD,NOEBTR,NOWRT,NOEBTRB,T1STANDARD,NOWINEN
//#fuses EXCLKc3
#use delay(clock=20000000)

#use fast_io(b)
#use fast_io(c)
#use fast_io(a)
#use fast_io(d)
#use fast_io(e)

   
INT16 XUNG,XUNG1,XUNG2;

 
 
 #INT_EXT //RC3
 
 

   VOID DEM_NGAT()
      {   
           //disable_interrupts(int_ext);
               XUNG++;
           //if ((XUNG >= en_t)&&(flag_ngat == 0))
          // {
          //  ngat = 1;
          //  flag_ngat = 1;
          //  XUNG = 0;
         //  }
         //  enable_interrupts(int_ext) ;
      
      }
   
   #INT_EXT1 //RC4
   VOID DEM_NGAT_1()
      {
      
      XUNG1++;
    //  INT1IF=0;
      
      }
  
   #INT_EXT2 //RC5
   
   VOID DEM_NGAT_2()
      {
      XUNG2++;
     // INT2IF=1;
     
      }
   
  
   
   void main()
   { 
    /////////////////////////////
    trisa0=0;
    trisa5=0;
    trisb0=0;
    
    ra0=ra5=rb0=1;
    
    ////////////////////////////
    
    trisc4=1;
    trisc3=1;
    trisc5=1;

    xung=xung1=xung2=0;
    
   enable_interrupts(INT_EXT); 
   enable_interrupts(INT_EXT1); 
   enable_interrupts(INT_EXT2);
   
   ext_int_edge(0, L_TO_H );
   ext_int_edge(1, L_TO_H );
   ext_int_edge(2, L_TO_H );
   rc3=rc4=rc5=1;
   enable_interrupts(GLOBAL);  
   
  
    
           
           while(true)
                {  
                        
                                 
                            if(xung1==10)
                             {
                             ra0=0;
                             
                             }
                       else if(xung1==15)
                             {
                              ra0=1;
                              ra5=0;
                             }
                       else if (xung1==24)
                            {
                             ra0=ra5=1;
                             rb1=0;
                            }
                     
                }
                
    }

thay đổi nội dung bởi: phamminhtuan, 12-01-2011 lúc 01:42 PM. Lý do: Lần sau nhớ thêm code vào thẻ [code] ... [/code] nhé, và nhớ dùng tiếng việt có dấu
robotpic vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-01-2011, 01:41 PM   #2
phamminhtuan
Super Moderator
 
phamminhtuan's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 150
:
Thế ý của bạn là gì
phamminhtuan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-01-2011, 07:00 PM   #3
caovanhuong
Đệ tử 2 túi
 
caovanhuong's Avatar
 
Tham gia ngày: Jul 2009
Bài gửi: 40
:
Trích:
Nguyên văn bởi robotpic View Post
Code:
#include <18f4331.h>
#include <def_4331.h>

#FUSES HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT,NOPUT,NOCPD,NODEBUG,NOFCMEN,NOCPB,STVREN,NOPWMPIN,HPOL_LOW
//#FUSES MCLR,NOIESO,NOWRTC,NOWRTB,NOWRTD,NOEBTR,NOWRT,NOEBTRB,T1STANDARD,NOWINEN
//#fuses EXCLKc3
#use delay(clock=20000000)

#use fast_io(b)
#use fast_io(c)
#use fast_io(a)
#use fast_io(d)
#use fast_io(e)

   
INT16 XUNG,XUNG1,XUNG2;

 
 
 #INT_EXT //RC3
 
 

   VOID DEM_NGAT()
      {   
           //disable_interrupts(int_ext);
               XUNG++;
           //if ((XUNG >= en_t)&&(flag_ngat == 0))
          // {
          //  ngat = 1;
          //  flag_ngat = 1;
          //  XUNG = 0;
         //  }
         //  enable_interrupts(int_ext) ;
      
      }
   
   #INT_EXT1 //RC4
   VOID DEM_NGAT_1()
      {
      
      XUNG1++;
    //  INT1IF=0;
      
      }
  
   #INT_EXT2 //RC5
   
   VOID DEM_NGAT_2()
      {
      XUNG2++;
     // INT2IF=1;
     
      }
   
  
   
   void main()
   { 
    /////////////////////////////
    trisa0=0;
    trisa5=0;
    trisb0=0;
    
    ra0=ra5=rb0=1;
    
    ////////////////////////////
    
    trisc4=1;
    trisc3=1;
    trisc5=1;

    xung=xung1=xung2=0;
    
   enable_interrupts(INT_EXT); 
   enable_interrupts(INT_EXT1); 
   enable_interrupts(INT_EXT2);
   
   ext_int_edge(0, L_TO_H );
   ext_int_edge(1, L_TO_H );
   ext_int_edge(2, L_TO_H );
   rc3=rc4=rc5=1;
   enable_interrupts(GLOBAL);  
   
  
    
           
           while(true)
                {  
                        
                                 
                            if(xung1==10)
                             {
                             ra0=0;
                             
                             }
                       else if(xung1==15)
                             {
                              ra0=1;
                              ra5=0;
                             }
                       else if (xung1==24)
                            {
                             ra0=ra5=1;
                             rb1=0;
                            }
                     
                }
                
    }
tôi cũng không hiểu là chương trình bạn chạy không đúng là không đúng kiểu gì.
làm tới PIC18 rồi mà câu lệnh lủng củng quá
thanh ghi trisa, trisb, trisc ở đâu mà lắm thế.
khai báo tới 3 ngắt mà sử dụng có một ngắt, biến xung 1 bạn chỉ sử dụng tới 24 mà bạn không giới hạn ở chương trình ngắt thì nó đếm mãi à, chương trình chạy sao mà đúng được.
__________________
Cao Văn Hưởng
SĐT: 01672754113
Email: caovanhuong@webdien.com
Nhận thiết kế mạch điện tử, PCB (Orcad)

caovanhuong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-01-2011, 11:27 AM   #4
robotpic
Đệ tử 4 túi
 
Tham gia ngày: Jun 2010
Bài gửi: 79
:
tôi viết code cho robot nhưng nó chưa chạy tôi sửa lại giá trị để mô phỏng cho dể đó chứ. còn trisa ... toi khai báo trong file def_4331.h đó.bạn cũng dùng chưa rành về ccs thì nói thế sao được.
robotpic vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-01-2011, 07:42 PM   #5
caovanhuong
Đệ tử 2 túi
 
caovanhuong's Avatar
 
Tham gia ngày: Jul 2009
Bài gửi: 40
:
Trích:
Nguyên văn bởi robotpic View Post
tôi viết code cho robot nhưng nó chưa chạy tôi sửa lại giá trị để mô phỏng cho dể đó chứ. còn trisa ... toi khai báo trong file def_4331.h đó.bạn cũng dùng chưa rành về ccs thì nói thế sao được.
tôi biết là bạn phải khai báo nó trong file def_4331.h thì chương trình mới biên dịch được. nhưng ý tôi muốn nói ở đây là khi ta viết là nên viết cho nó rành mạch dể hiêu. nhà sản xuất cho biết là chỉ có 1 thanh ghi trisa chứ làm gì mà tới trisa1, trisa2. thay vì viết trisa0, trisa5=0 thì ta viết trisa=0x00; là được rồi.
cho dù mô phỏng thì bạn cũng phải viết cho đúng. chương trình ngắt bạn viêt sai rùi thì làm sao mà nó chạy đúng ý bạn được.
__________________
Cao Văn Hưởng
SĐT: 01672754113
Email: caovanhuong@webdien.com
Nhận thiết kế mạch điện tử, PCB (Orcad)

caovanhuong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-01-2011, 02:12 PM   #6
dung h
Đệ tử 4 túi
 
Tham gia ngày: May 2009
Bài gửi: 74
:
chao cac ban !
minh da lam con 18f4431 cho robot 1 nam. con nay manh ve dk dong co lam!

minh thay truong trinh cua ban khong chay dung la do ban khai bao chua dung de su dung cac modul cua no va thuat toan chua that dung.
ccs la IDE tich hop cac ham co san. ban nen doc datasheet cua no de hieu phan cung hon.
khi su dung modeul nao do ban xem trong help xem can khai bao nhung gi.
o day de su dung interrups ngoai dau tien ban phai khai bao chan do lam dau vao
-do la cac thanh ghi TRISX neu bit tuong ung la 1 thila dau vao va 0 thi la dau ra
VD : TRISA =0X01 thi chan RA0 se la dau vao con cac chan khac la dau ra
pic18f4431 chi co cac thanh ghi TRISA, TRISB, TRISC, TRISD, TRISE
chu o co thanh ghi trisa0, trisa1... ma khi khai bao bit ban co the khai bao la TRISA.0 =1 tuong ung bit 0 cua thanh ghi TRISA
vi vay de su dung ngat INT thiban can khai bao cac chan INT tuong ung o pic lam dau vao .
-
khi su ly tin hieu ngat ban co the su dung so sanh "==" ( biet dau khi dang su ly IF thilai co ngat va no tang them 1 don vi thi cau lenh IF o dung nua vi uu tien ngat ma)nhung theo toi ban nen su dung ">" thi se luon dung nhieu hon
va khi thuc hien if xong ban nen xoa gia tri xung 1, xung 2 .. di de thuc hien dem lai . co co no se dem tiep len va khi nao tran 16 bit thi no lai dem tu gia tri 0
- 1 chuy nua la voi pic18f4431 thi khi suat gia tri ra nen suat bang thanh ghi LAT
con khi lay dau vao input thi dung thanh ghi PORT

minh ct cua ban van de o cho khai bao thanh ghi TRIS ( khai bao tris la cac dau output het malai dung INT tuc nhan input thi o chay dung dc) va cho chua xoa gia tri xung,1 xung 2 khi da xu ly xong IF thoi

ban can chu y diem nua do la file def_18f4431 phai duoc lay chinh xac. tuc la dia chi cac thanh ghi phai dung. ban nen sung ccs de tao ra no bang cach vao VIEW- > name register ( gi do o nho nua) roi chon con pic 18f4431 roi click creat file de tao ra file define cho con pic do.
ban hay sua lai ct va thu lai xem co chay dung o!
dung h vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-02-2011, 05:50 PM   #7
robotpic
Đệ tử 4 túi
 
Tham gia ngày: Jun 2010
Bài gửi: 79
:
mình đã làm đuoc vấn dề này rồi. mình đổi lệnh if(xung<100){} sang lệnh while(xung<100){}; thì ok bác nào giải thích vấn đề này không. bản chất 2 lệnh này khác nhau cái gì nhỉ?
robotpic vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


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à 06:01 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