CCS C for PIC16F877A

Collapse
This topic is closed.
X
This is a sticky topic.
X
X
 
  • Giờ
  • Show
Clear All
new posts
  • cooloo
    Nhập môn đệ tử
    • Oct 2007
    • 2

    #331
    Nguyên văn bởi nhh View Post
    Chương trình này làm nhấp nháy con led ở chân RB0 1s sáng, 1s tắt.
    Code:
    #include<16F877A.h>
    #fuses NOWDT,PUT,HS,NOPROTECT
    #use delay(clock=10000000)
    main()
    {
    while(true)
    	{
    	output_high(PIN_B0);
    	delay_ms(1000);
    	output_low(PIN_B0);
    	delay_ms(1000);
    	}
    }
    Trên đây:
    Code:
    #include<16F877A.h>
    Khai báo con PIC bạn sử dụng, file này chương trình viết sẵn nhằm khai báo các bit, thanh ghi quan trọng trong con pic này.Các bạn có thể vào thư mục cài đặt C:\Program Files\PICC\Devices\16F877A.h để xem nó khai báo được những gì trong đó!
    Code:
    #fuses NOWDT,PUT,HS,NOPROTECT
    Thiết lập các config
    Code:
    #use delay(clock=10000000)
    Khai báo tần số dao động cấp cho PIC
    Code:
    output_high(PIN_B0)
    Xuất ra chân RB0 mức logic 1 (tức 5V), do khi thực hiện hàm này đã bao hàm luôn việc tác động lên thanh ghi TRISB (dùng chọn chân I/O) do vậy ta không cần viết lệnh chọn chân I/O nữa.
    Code:
    output_low(PIN_B0)
    Ngược lại
    Code:
    delay_ms(1000)
    Tạo trễ khoảng thời gian theo mili giây là 1000 (tức 1s)
    Chú ý hàm này chỉ có tác dụng khi có khai báo tần số dao động cấp cho PIC

    Và bây giờ thử làm cho tất cả 8 led nối với portB chớp tắt 1s xem nào!Phải chăng ta sẽ làm như sau (Viết trong vòng lặp while):
    Code:
    {
    output_high(PIN_B0);
    output_high(PIN_B1);
    output_high(PIN_B2);
    output_high(PIN_B3);
    output_high(PIN_B4);
    output_high(PIN_B5);
    output_high(PIN_B6);
    output_high(PIN_B7);
    delay_ms(1000);
    output_low(PIN_B0);
    output_low(PIN_B1);
    output_low(PIN_B2);
    output_low(PIN_B3);
    output_low(PIN_B4);
    output_low(PIN_B5);
    output_low(PIN_B6);
    output_low(PIN_B7);
    delay_ms(1000);
    }
    Viết như thế này thì quá dài và thiếu chính xác nữa, có cách nào khác hay hơn không ? Sao ta không xuất đẩy hẳn portB lên mức cao,tạo trễ 1s rồi ép cho nó xuống mức thấp,tạo trễ 1s cùng một lúc nhỉ !
    Bài tiếp theo sẽ đưa ra câu trả lời....
    Bạn ơi , khi mình compile cái code như trên thì nó báo lỗi warning về thiếu "void" . Mình bỏ thêm : void main(void) vào thì nó mới chạy .
    Những function : delay() , rs232(), i2c thì tìm ở đâu vậy ???
    Last edited by cooloo; 12-10-2007, 03:54 AM. Lý do: thêm vào

    Comment

    • thanco112
      Đệ tử 1 túi
      • Sep 2007
      • 12

      #332
      Hỏi về PWM

      Oe oe, các bác lừa em nhá. Các bác bảo là tập trung mổ xẻ phần PWM làm em đọc mãi hết hai mấy trang mà thấy có mỗi 2 bài liên quan. Bác nào biết về phần này thì chỉ bảo em với ạ.

      Em đang có một con step motor 4 dây (đỏ, xám- đen, vàng). Em đang tìm cách điều khiển nó (chạy, dừng, đảo chiều) nhưng mà chưa biết làm thế nào cả. Các bác cho em hỏi:

      1. Em dùng 16f877 điều khiển nó có được không?
      2. Cần phải có những kiến thức gì để điều khiển nó?

      Bác nào có tài liệu về phần này bằng tiếng Việt thì share cho em với ạ.

      Em cám ơn các bác ạ!!!!

      Comment

      • nhh
        Đệ tử 9 túi
        • Feb 2006
        • 174

        #333
        Tất nhiên dùng 16F877 được, phí phạm nữa là đằng khác.

        Tài liệu tiếng Việt về stepper motor, bạn vào phần điều khiển motor trong diễn đàn này tìm.

        Stepper motor của bạn nếu công suất bé có thể dùng ULN lái.
        Tham khảo điều khiển stepper motor ở đây:http://www.interq.or.jp/japan/se-inoue/e_step.htm
        Ngày mai bắt đầu từ ngày hôm nay

        Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
        http://www.picvietnam.com/forum//showthread.php?t=1263

        Comment

        • Nguoidumuc204
          Nhập môn đệ tử
          • Oct 2007
          • 6

          #334
          output_high(pin_xx);
          output_low (pin_xx);

          Hai câu lệnh trên chỉ làm cho chân ra xx là cao hay thấp, ứng với mức logic 1 hoặc 0.trong bài trên ta muốn cho sáng tất một port thì chỉ càn câu lệnh :
          Code:
          void main (void )
          {
             set_tris_b(0);      // cả port B là port ra
             set_tris_c(0);     // cả port C là port ra
             port_b(0x00);    // khởi tạo giá trị đầu port B là 0 ( Tất cả led đều tắt )
             port_c(0x00);   // khởi tạo giá trị đầu port B là 0 ( Tất cả led đều tắt )
             delay_ms(100);
             while(1)
            {
                  port_b(0xff);   
                  delay_ms(1000);
                  port_c(0xff); 
                  delay_ms(1000);
             }  
          }
          Last edited by namqn; 12-10-2007, 04:57 PM. Lý do: Bài lại sai lỗi chính tả !!

          Comment

          • vandungevn
            Đệ tử 5 túi
            • Oct 2006
            • 116

            #335
            Những function : delay() , rs232(), i2c thì tìm ở đâu vậy ???

            bạn xem rõ hơn trong phần help của nó nhé, hoặc tạo new project = PIC Wizard xem trong đó có nói về Những function : delay() , rs232(), i2c ......!
            Hãy chung sức vì nền Điện Tử Viêt Nam...! Sản Phẩm thương hiệu Việt "Made in Viet Nam"
            Nguyen Van Dung - Nguyễn Văn Dũng. Mobile : (+84) 97 329 1368
            Nick name : VanDungEvn ( Yahoo + Skype )
            Tư vấn & thiết kế điện tử + Làm mạch in + Hoàn thiện sản phẩm điện tử. Mạch nạp 89-PIC-AVR.
            Email: vandungevn@gmail.com Website: www.dientuphuongdung.com
            Xóm Mới - Nguyên Xá - Minh Khai - Từ Liêm - Hà Nôi - Viet Nam.

            Comment

            • manhckgtcck45
              Nhập môn đệ tử
              • Jul 2007
              • 5

              #336
              Các anh ơi giúp e với. Các anh có thể chỉ cho em cách sử dụng ngắt ngoài để đếm thời gian của sự thay đổi tín hiệu vào port B không?

              Comment

              • thongtr
                Đệ tử 2 túi
                • Jul 2007
                • 27

                #337
                cá pac ơi giúp em!! em bi lỗi gì vậy!
                Attached Files
                thongtr0601@yahoo.com!!
                Giúp nhau cùng tiến bộ.....

                Comment

                • nhh
                  Đệ tử 9 túi
                  • Feb 2006
                  • 174

                  #338
                  Nguyên văn bởi thongtr View Post
                  cá pac ơi giúp em!! em bi lỗi gì vậy!
                  Bạn không nhận thấy chương trình đòi dấu "}" à?
                  Ngày mai bắt đầu từ ngày hôm nay

                  Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
                  http://www.picvietnam.com/forum//showthread.php?t=1263

                  Comment

                  • thongtr
                    Đệ tử 2 túi
                    • Jul 2007
                    • 27

                    #339
                    mình cũng a thêm đấu } vào rồi nhưng cũng ko có tác dụng!! với lại mình đưa chuột tới đấu } cuối cùng đó thì nó hiện ra màu xanh và nhìn lên trên thì thấy màu xanh đó ứng với đấu { dưới hàm void main(void) !!!
                    mình cũng ko biết bị chuyện nữa!!
                    Attached Files
                    thongtr0601@yahoo.com!!
                    Giúp nhau cùng tiến bộ.....

                    Comment

                    • thongtr
                      Đệ tử 2 túi
                      • Jul 2007
                      • 27

                      #340
                      Nguyên văn bởi thongtr View Post
                      Em vừa mới viết xong ct hiển thị LCD 4 bit! có hiệu ứng chữ chạy rất hay!! em post lên cho các pác tham khảo nhé! và góp ý cho em nhé!

                      #include <16F877A.h>
                      #include <DEFS_16F877A.h>
                      #fuses XT,NOWDT,NOPROTECT,NOLVP
                      #use delay(clock=20000000)
                      #define use_portb_lcd TRUE
                      #include <lcd.c>
                      const unsigned char line1[]={'H','E','L','L','O',' ','P','I','C','V','N','!','#'};
                      const unsigned char line2[]={'Y','H',':','T','H','O','N','G','T','R','0','6', '0','1','@',\
                      'Y','A','H','O','O','.','C','O','M','#'};

                      void main(void)
                      { while(true)
                      {
                      int I=0,y=0,k=0,z=0;
                      delay_ms(100); // tao tre 100ms cho LCD khoi dong
                      lcd_init();
                      lcd_gotoxy(1,1);
                      while (line1[y]!='#')
                      {
                      lcd_putc(line1[y]);
                      delay_ms(200);
                      y++;
                      }
                      lcd_gotoxy(1,2);
                      while (i<16)
                      {
                      lcd_putc(line2[I]);
                      i++;
                      delay_ms(200);
                      }
                      i=2;

                      while (line2[z]!='#')
                      {
                      lcd_init();
                      lcd_gotoxy(1,1);
                      y=0;
                      while (line1[y]!='#')
                      {
                      lcd_putc(line1[y]);
                      y++; }

                      lcd_gotoxy(1,2);
                      k=i+16;
                      for(z=i;z<k;z++)
                      {lcd_putc(line2[z]);}
                      delay_ms(400);
                      i++;
                      }
                      }
                      }
                      Chương trình này minh mô phỏng chạy rồi nhung sao khi cho chạy thực tế khì ko dc!!
                      Mình đã mắc mạch theo sơ đồ này!! (chỉ có thay thạch anh 20M thôi!)
                      Attached Files
                      thongtr0601@yahoo.com!!
                      Giúp nhau cùng tiến bộ.....

                      Comment

                      • nhh
                        Đệ tử 9 túi
                        • Feb 2006
                        • 174

                        #341
                        Nguyên văn bởi thongtr View Post
                        mình cũng a thêm đấu } vào rồi nhưng cũng ko có tác dụng!! với lại mình đưa chuột tới đấu } cuối cùng đó thì nó hiện ra màu xanh và nhìn lên trên thì thấy màu xanh đó ứng với đấu { dưới hàm void main(void) !!!
                        mình cũng ko biết bị chuyện nữa!!
                        - Bạn thiếu dấu ngoặc kép của line1[].

                        - Chưa include file lcd.c

                        - Chú ý phép gán = và phép so sánh bằng ==

                        Việc chạy mô phỏng đúng ko hẳn thực tế sẽ đúng nhưng chạy mô phỏng sai thì chạy trên mạch thật sai là cái chắc.
                        Attached Files
                        Last edited by nhh; 13-10-2007, 04:34 PM.
                        Ngày mai bắt đầu từ ngày hôm nay

                        Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
                        http://www.picvietnam.com/forum//showthread.php?t=1263

                        Comment

                        • ghosttn
                          Nhập môn đệ tử
                          • Oct 2007
                          • 9

                          #342
                          Xin loi vi chen ngang các anh

                          Em muon' cho 595 ra 8 bit 1 luc nhung lam mai khong duoc. Em sai ởi chỗ nào
                          do mới học em chỉ có thể nghĩ đơực như vậy thôi. các anh tối ưu code+ mạch hộ em với.
                          ====================================

                          #include <16f877a.h>
                          #use delay(clock=4M)
                          int8 i;
                          void input_byte(){
                          for(i=0;i<=7;i++){
                          output_bit(pin_B0,0); //1.tao xung cho pin_sck
                          output_bit(pin_B1,i%=2);//2.dich du lieu vao luc pin_sck o trang thai suon
                          output_bit(pin_B0,1); //3.ket thuc xung tai pin_sck
                          }
                          }
                          void output_byte(){
                          output_bit(pin_B2,0); //1.tao xung clock cho pin_rck
                          delay_ms(100); //2.dung lai de xem
                          output_bit(pin_B2,1); //3.ket thuc xung tai pin_rck
                          }

                          void main(){
                          set_tris_b(0);
                          output_bit(pin_B4,0);//khoi dong 595 pin_/OE

                          while(1){
                          output_bit(pin_B3,1);//cho phep ghi du lieu pin_MR =1
                          input_byte();
                          output_byte();
                          output_bit(pin_B3,0);//all pin out 595= level low
                          }//end while
                          }// end main
                          ==========================
                          Attached Files
                          Last edited by ghosttn; 13-10-2007, 04:46 PM. Lý do: sai

                          Comment

                          • thanco112
                            Đệ tử 1 túi
                            • Sep 2007
                            • 12

                            #343
                            hỏi về ngắt

                            Các bác cho em hỏi về các loại ngắt của con 16f877 này với ạ. Tên của nó này, chế độ hoạt động của nó như thế nào (khi nào thì ngắt ấy ạ). Em gà, mới nghiên cứu pic, các bác giúp cho!

                            GLOBAL
                            INT_RTCC
                            INT_RB
                            INT_EXT
                            INT_AD
                            INT_TBE
                            INT_RDA
                            INT_TIMER1
                            INT_TIMER2
                            INT_CCP1
                            INT_CCP2
                            INT_SSP
                            INT_PSP
                            INT_BUSCOL
                            INT_EEPROM
                            INT_TIMER0

                            Thanks các bác nhiều

                            Comment

                            • vandungevn
                              Đệ tử 5 túi
                              • Oct 2006
                              • 116

                              #344
                              Hiển thị dùng 595 trên CCS

                              Dưới đây là một chương trình đưa một byte bằng 74hc595 dùng trên CCS

                              Code:
                              void display(unsigned char dataout)
                              {
                              	unsigned char temp;
                              	//dataout = 0xa4;
                              	output_low(pin_c0); 
                              for(i=0;i<8;i++)
                              {       
                              	temp = dataout;
                              	temp = temp&0x80;
                              	if(temp==0x80)
                              	{
                              	output_high(pin_c1);    // Data
                              	}
                              	else
                              	{
                              	output_low(pin_c1);  	// Data
                              	}
                              	output_high(pin_c0); 	// Clock
                              	dataout *=2;  
                              	output_low(pin_c0);	// Clock
                              }
                              output_high(pin_c2);		// Latch
                              output_low(pin_c2);		// Latch
                              }
                              chúc bạn thành công.!
                              Last edited by namqn; 14-01-2008, 09:32 PM.
                              Hãy chung sức vì nền Điện Tử Viêt Nam...! Sản Phẩm thương hiệu Việt "Made in Viet Nam"
                              Nguyen Van Dung - Nguyễn Văn Dũng. Mobile : (+84) 97 329 1368
                              Nick name : VanDungEvn ( Yahoo + Skype )
                              Tư vấn & thiết kế điện tử + Làm mạch in + Hoàn thiện sản phẩm điện tử. Mạch nạp 89-PIC-AVR.
                              Email: vandungevn@gmail.com Website: www.dientuphuongdung.com
                              Xóm Mới - Nguyên Xá - Minh Khai - Từ Liêm - Hà Nôi - Viet Nam.

                              Comment

                              • Yeu PIC
                                Nhập môn đệ tử
                                • Oct 2007
                                • 1

                                #345
                                trong ct mình dùng hai file của bộ compiler: lcd.c và ds1307.c
                                khi biên dịch thành file .hex thì bị những lỗi về delay như thế này:
                                Nguyên nhân do đau vậy!
                                Attached Files

                                Comment

                                Working...