Thông báo

Collapse
No announcement yet.

trợ giúp PIC12F629

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • trợ giúp PIC12F629

    em có viết 1 đoạn chương trình làm cho pic12f629 chỉ nhấp nháy 1 con led
    code Hi-Tech C như sau
    Code:
    #include <htc.h>
    //======================================================
    __CONFIG(FOSC_INTRCCLK&WDTE_OFF&PWRTE_ON&MCLRE_OFF&BOREN_OFF&CP_OFF&CPD_OFF);
    //======================================================
    #ifndef _XTAL_FREQ
    	#define _XTAL_FREQ 4000000
    #endif
    void main() {
    	//dau tien config cho chanlam cong ra sau do cho led blink
    	CMCON|=0b111;
    	//tat bo so sanh
    	//=================
    	TRISIO2=0;
    	while(1) {
    		GPIO2=1;
    		__delay_ms(200);
    		GPIO2=0;
    		__delay_ms(200);
    	}
    }
    mạch em mắc như sau
    mô phỏng thì chạy, nhưng nạp vào pic thật thì im re, em nạp bằng BURN E báo thành công, verify thành công luôn (em nghĩ nạp không có vấn đề gì)
    mong mọi người góp ý xem code trên có lỗi ở chỗ nào không ạ
    Click image for larger version

Name:	untitled.JPG
Views:	1
Size:	54.1 KB
ID:	1413626

  • #2
    Bạn thiết lập thanh ghi ANSEL (4 bít cuối), để có thể sử dụng cổng là digital hoặc analog. Mặc định nếu không thiết lập là cổng Analog

    Comment


    • #3
      [QUOTE=kidteam;566417]em có viết 1 đoạn chương trình làm cho pic12f629 chỉ nhấp nháy 1 con led
      code Hi-Tech C như sau
      Code:
      #include <htc.h>
      //======================================================
      __CONFIG(FOSC_INTRCCLK&WDTE_OFF&PWRTE_ON&MCLRE_OFF&BOREN_OFF&CP_OFF&CPD_OFF);
      //======================================================
      #ifndef _XTAL_FREQ
          #define _XTAL_FREQ 4000000
      #endif
      void main() {
          //dau tien config cho chanlam cong ra sau do cho led blink
          CMCON|=0b111;
          //tat bo so sanh
          //=================
          TRISIO2=0;
          while(1) {
              GPIO2=1;
              __delay_ms(200);
              GPIO2=0;
              __delay_ms(200);
          }
      }
      mạch em mắc như sau
      mô phỏng thì chạy, nhưng nạp vào pic thật thì im re, em nạp bằng BURN E báo thành công, verify thành công luôn (em nghĩ nạp không có vấn đề gì)
      mong mọi người góp ý xem code trên có lỗi ở chỗ nào không ạ
      email:
      chỉ được liên lạc từ 19h00 - 21h30



      Comment


      • #4
        em không hiểu bị lỗi gì nữa
        có bác bao delay 200ms là quá thấp nhưng em thấy đây không phải là lý do

        Comment


        • #5
          Bạn config thanh ghi ANSEL chưa?

          Comment


          • #6
            Nguyên văn bởi postmanbk Xem bài viết
            Bạn config thanh ghi ANSEL chưa?
            vấn đề này mình hiểu mà
            mình có làm với PIC16F887 rồi
            còn pic12f629 không có thanh ghi đó
            chỉ có pic12f675 trong cùng file datasheet với 12f629 mới có thôi

            Comment


            • #7
              Uh đúng rồi, sorry bạn. Vậy bạn thử thế này xem:

              void main() {
              //dau tien config cho chanlam cong ra sau do cho led blink
              CMCON|=0b111;
              //tat bo so sanh
              //=================
              TRISIO2=0;
              __delay_ms(10);
              while(1) {
              GPIO2=1;
              __delay_ms(200);
              GPIO2=0;
              __delay_ms(200);
              }
              }

              Mình thêm vào delay_ms(10) sau khi config cổng IO, vì mình cũng từng bị lỗi IO không chạy với PIC16F877A. Thêm delay thì mới chạy được

              Comment


              • #8
                mình nghĩ rằng đấy không phải lý do
                để tối mình test lại
                cám ơn bạn nhé

                Comment


                • #9
                  MCLRE_OFF thay bằng MCLRE_ON.

                  Comment


                  • #10
                    Nhiều người đã vào nhưng đều chỉ đoán triệu chứng rồi đưa cách chữa. Bqv sốt ruột cắm thử cái mạch trên breadboard, chép nguyên chương trình của bạn kidteam vào, biên dịch, nạp và ... nó chạy đúng : đèn LED nhấp nháy. Chương trình "chuẩn không cần chỉnh" một chữ nào.

                    PIC12F629 và Pickit2 đều là hàng chính hãng, mua từ Techpal từ rất lâu. Delay 80 ms mắt người vẫn phân biệt được, 200 ms thì thừa sức.

                    Bạn kidteam nên kiểm tra lại mạch, linh kiện, bộ nạp.

                    Click image for larger version

Name:	P24-07-12_19-47.jpg
Views:	1
Size:	86.9 KB
ID:	1364315
                    Phần mềm tự do hoặc không dùng máy tính nữa !.

                    Comment


                    • #11
                      vâng
                      em đã tìm ra nguyên nhân
                      con pic tèo
                      em cắm con khác (vừa nhận được chiều nay)
                      chạy phà phà luôn
                      cảm ơn tất cả mọi người

                      Comment


                      • #12
                        mình cũng bị trường hợp là viết code cho con này mô phỏng thì chạy mà khi nạp bằng pickit2 thì nó báo là lỗi osscal và không nạp được nữa. mà code của em cũng đơn giản lắm. em đã thử 3 con rồi. kết quả như nhau.
                        #include <12F629.h>

                        #FUSES NOWDT //No Watch Dog Timer
                        #FUSES INTRC //Internal RC Osc
                        #FUSES NOCPD //No EE protection
                        #FUSES NOPROTECT //Code not protected from reading
                        #FUSES NOMCLR //Master Clear pin used for I/O
                        #FUSES NOPUT //No Power Up Timer
                        #FUSES NOBROWNOUT //No brownout reset
                        #FUSES BANDGAP_HIGH
                        #use delay(clock=4000000)
                        int1 t;

                        void main()
                        {

                        //setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
                        setup_timer_1(T1_DISABLED);
                        setup_comparator(NC_NC);
                        setup_vref(FALSE);
                        // TODO: USER CODE!!
                        while(true)
                        {
                        delay_ms(5000);
                        t=input(Pin_a3);
                        if(t==0)
                        {
                        output_high(Pin_a2);
                        }
                        if(t==1)
                        {
                        output_low(Pin_a2);
                        }
                        while(true);
                        }
                        }

                        Comment

                        Về tác giả

                        Collapse

                        kidteam Tìm hiểu thêm về kidteam

                        Bài viết mới nhất

                        Collapse

                        Đang tải...
                        X