Thông báo

Collapse
No announcement yet.

cần giúp đỡ về câu lệnh CCS

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

  • cần giúp đỡ về câu lệnh CCS

    mình có code như hình, mình thắc mắc là sao lại có cảnh báo câu lệnh lỗi. bạn nào biết lỗi ở chỗ nào không?? chỉ dumg mình với
    câu lệnh này mà lỗi thì chướng trình chắc chắn không chạy
    Click image for larger version

Name:	giup do.jpg
Views:	1
Size:	123.1 KB
ID:	1420443

  • #2
    vì coll # 0, đó không phải lỗi

    Comment


    • #3
      Nguyên văn bởi lyxa_bk Xem bài viết
      mình có code như hình, mình thắc mắc là sao lại có cảnh báo câu lệnh lỗi. bạn nào biết lỗi ở chỗ nào không?? chỉ dumg mình với
      câu lệnh này mà lỗi thì chướng trình chắc chắn không chạy
      [ATTACH]82420[/ATTACH]
      Cảnh báo : Điều kiện luôn sai.
      Warning : Condition always FALSE.

      Cảnh báo xảy ra khi có cấu trúc rẽ nhánh if, while mà điều kiện của nó luôn sai. Khi đó đoạn lệnh này sẽ không bao giờ được thực thi.

      Comment


      • #4
        bài toán của mình giờ đơn giản thế này!! mong mọi người giúp cho.
        porB 3pin đầu dc treo qua điện trở 10K nối với VCC + và nối với 3 hàng, 3pin tiếp theo nối với 3 cột của bàn phím 3X3
        mình muốn code sao cho khi nhấn 1 nút bất kỳ thì một trong 3 pin đầu về 0V, hiển thị lên LED.

        #include <main.h>
        #define row1 pin_b0
        #define row2 pin_b1
        #define row3 pin_b2
        #define col1 pin_b3
        #define col2 pin_b4
        #define col3 pin_b5
        const char m[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0};
        int nghin, tram, chuc, donvi;
        int16 d;
        void hienthiso(int c)
        ............
        void main()
        {
        set_tris_b(0x07);// row1=row2=row3=1; col1=col2=col3=0
        int a;
        while(true)
        {
        if((pin_b0==0)|(pin_b1==0)|(pin_b2==0))a=30;
        else a=10;
        hienthiso(a);
        delay_ms(1000);
        }
        }

        chả hiểu mình code kiểu gì mà nó chỉ hiện a=10 mặc dù đã nhấn nút bàn phim, đo điện áp thì đúng khi có nhấn nút thì 1 trong các pin(0=>>2) băng 0V.
        vậy tại sao?? nó phải hiển thị 30 khi nhấn 1 nút chứ??

        Comment


        • #5
          Nguyên văn bởi lyxa_bk Xem bài viết
          bài toán của mình giờ đơn giản thế này!! mong mọi người giúp cho.
          porB 3pin đầu dc treo qua điện trở 10K nối với VCC + và nối với 3 hàng, 3pin tiếp theo nối với 3 cột của bàn phím 3X3
          mình muốn code sao cho khi nhấn 1 nút bất kỳ thì một trong 3 pin đầu về 0V, hiển thị lên LED.

          #include <main.h>
          #define row1 pin_b0
          #define row2 pin_b1
          #define row3 pin_b2
          #define col1 pin_b3
          #define col2 pin_b4
          #define col3 pin_b5
          const char m[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0};
          int nghin, tram, chuc, donvi;
          int16 d;
          void hienthiso(int c)
          ............
          void main()
          {
          set_tris_b(0x07);// row1=row2=row3=1; col1=col2=col3=0
          int a;
          while(true)
          {
          if((pin_b0==0)|(pin_b1==0)|(pin_b2==0))a=30;
          else a=10;
          hienthiso(a);
          delay_ms(1000);
          }
          }

          chả hiểu mình code kiểu gì mà nó chỉ hiện a=10 mặc dù đã nhấn nút bàn phim, đo điện áp thì đúng khi có nhấn nút thì 1 trong các pin(0=>>2) băng 0V.
          vậy tại sao?? nó phải hiển thị 30 khi nhấn 1 nút chứ??
          Bạn nên phân biệt dấu "|" là để OR bit. Còn "||" là OR điều kiện.

          Comment


          • #6
            cái này mình thử rồi nhưng cũng không phải
            ai giúp được không??

            Comment


            • #7
              đây là sơ đồ mạch. đớn giản thế àm chả hiểu sao không được??
              Click image for larger version

Name:	mạch.jpg
Views:	1
Size:	135.1 KB
ID:	1392347Click image for larger version

Name:	mạch.jpg
Views:	1
Size:	135.1 KB
ID:	1392347

              Comment


              • #8
                Nguyên văn bởi lyxa_bk Xem bài viết
                cái này mình thử rồi nhưng cũng không phải
                ai giúp được không??
                if(input(pin_bo)==0 || input(pin_b1)==0 || input(pin_b2)==0)
                {
                .......
                }

                Comment


                • #9
                  thank bạn rất nhiều!! được rồi
                  hóa ra phải đặt input

                  Comment


                  • #10
                    Nguyên văn bởi lyxa_bk Xem bài viết
                    const char m[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0};
                    câu này có nghĩ là gì các bác nhỉ?

                    Comment


                    • #11
                      Nguyên văn bởi my_nghe_an Xem bài viết
                      câu này có nghĩ là gì các bác nhỉ?
                      Khai báo mảng m với 10 phần tử giá trị đặt trước ( hằng số )
                      ý nghĩa :
                      m[0] = 0xC0;
                      m[1] = 0xF9;
                      .............
                      m[8] = 0x80;
                      m[9] = 0x90;
                      Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                      Comment


                      • #12
                        Nguyên văn bởi queduong Xem bài viết
                        Khai báo mảng m với 10 phần tử giá trị đặt trước ( hằng số )
                        ý nghĩa :
                        m[0] = 0xC0;
                        m[1] = 0xF9;
                        .............
                        m[8] = 0x80;
                        m[9] = 0x90;
                        cám ơn anh nhiều, em muốn hỏi thêm cái nữa là em đang muốn đọc nhiệt độ từ cảm biến DS18B20 hiện thị lên virtual terminal
                        em tìm được cái này, đây là chương trình :
                        người ta viết bằng ccs với pic 16f887a
                        #include <main.h>
                        #include "1wire/1wire.c"
                        #include "ds18b20/ds18b20.c"

                        uint16_t count_t0=0;
                        uint8_t str[20];
                        #INT_RTCC
                        void ngat_tran() // Sau 1s thi cap nhat nhiet do len PC
                        {
                        count_t0++;
                        if(count_t0==4883)
                        {
                        count_t0=0;
                        puts(str); // Truyen gai tri nhiet do do duoc len PC
                        }
                        }

                        void main()
                        {
                        float Temp;

                        DDRA=0x00;
                        DDRC=0x82;
                        DDRD=0x00;
                        DDRE=0x00;

                        enable_interrupts(INT_TIMER0); // Cho phep ngat tran TIMER0
                        enable_interrupts(GLOBAL); // Cho phep ngat toan cuc
                        setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4); // Cau hinh bo chia cho TIMER0
                        set_timer0(0x00); // Cau hinh gia tri cho thanh ghi TMR0

                        while(TRUE)
                        {
                        Temp=ds18b20_read();
                        sprintf(str,"Nhiet Do = %3.1f",Temp);
                        }
                        }

                        em có vài câu hỏi muốn hỏi, trong chương trình này: nếu không dùng timer có đọc được không? em thử rồi mà không được, nếu bỏ thì không đọc được,
                        thứ 2 là: nếu em đổi chân dữ liệu đưa từ DS18B20 vào chíp thành DDRE = 0x81 chẳng hạn
                        tức là chân nhận dữ liệu là chân RC0 thì sau khi đổi chân trong mô phỏng sao nó vẫn không đọc nhỉ? phải chăng là chỉ đọc được mỗi chân RC1 thôi ak?
                        một câu hỏi nữa là: vẫn dùng DDR(PORT) giống như avr để khai báo thay cho set_tris_port được ak các anh? với lại em thấy cái hàm *void ngat_tran* được định nghĩa ở trên sao ở trong chương trình chính không thấy gọi nhỉ?
                        vài câu hỏi thắc mắc mong nhận được câu trả lời, xin cám ơn
                        đây là link đầy đủ:
                        BÀI 5: ĐO NHIỆT ĐỘ VỚI DS18B20, GIÁ TRỊ ĐƯỢC TRUYỀN LÊN PC QUA RS232 | Diễn Đàn Vi Điều Khiển

                        Comment


                        • #13
                          Nguyên văn bởi queduong Xem bài viết
                          Khai báo mảng m với 10 phần tử giá trị đặt trước ( hằng số )
                          ý nghĩa :
                          m[0] = 0xC0;
                          m[1] = 0xF9;
                          .............
                          m[8] = 0x80;
                          m[9] = 0x90;
                          cám ơn anh nhiều, em muốn hỏi thêm cái nữa là em đang muốn đọc nhiệt độ từ cảm biến DS18B20 hiện thị lên virtual terminal
                          em tìm được cái này, đây là chương trình :
                          người ta viết bằng ccs với pic 16f887a
                          #include <main.h>
                          #include "1wire/1wire.c"
                          #include "ds18b20/ds18b20.c"

                          uint16_t count_t0=0;
                          uint8_t str[20];
                          #INT_RTCC
                          void ngat_tran() // Sau 1s thi cap nhat nhiet do len PC
                          {
                          count_t0++;
                          if(count_t0==4883)
                          {
                          count_t0=0;
                          puts(str); // Truyen gai tri nhiet do do duoc len PC
                          }
                          }

                          void main()
                          {
                          float Temp;

                          DDRA=0x00;
                          DDRC=0x82;
                          DDRD=0x00;
                          DDRE=0x00;

                          enable_interrupts(INT_TIMER0); // Cho phep ngat tran TIMER0
                          enable_interrupts(GLOBAL); // Cho phep ngat toan cuc
                          setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4); // Cau hinh bo chia cho TIMER0
                          set_timer0(0x00); // Cau hinh gia tri cho thanh ghi TMR0

                          while(TRUE)
                          {
                          Temp=ds18b20_read();
                          sprintf(str,"Nhiet Do = %3.1f",Temp);
                          }
                          }

                          em có vài câu hỏi muốn hỏi, trong chương trình này: nếu không dùng timer có đọc được không? em thử rồi mà không được, nếu bỏ thì không đọc được,
                          thứ 2 là: nếu em đổi chân dữ liệu đưa từ DS18B20 vào chíp thành DDRE = 0x81 chẳng hạn
                          tức là chân nhận dữ liệu là chân RC0 thì sau khi đổi chân trong mô phỏng sao nó vẫn không đọc nhỉ? phải chăng là chỉ đọc được mỗi chân RC1 thôi ak?
                          một câu hỏi nữa là: vẫn dùng DDR(PORT) giống như avr để khai báo thay cho set_tris_port được ak các anh? với lại em thấy cái hàm *void ngat_tran* được định nghĩa ở trên sao ở trong chương trình chính không thấy gọi nhỉ?
                          vài câu hỏi thắc mắc mong nhận được câu trả lời, xin cám ơn
                          đây là link đầy đủ:
                          BÀI 5: ĐO NHIỆT ĐỘ VỚI DS18B20, GIÁ TRỊ ĐƯỢC TRUYỀN LÊN PC QUA RS232 | Diễn Đàn Vi Điều Khiển

                          Comment


                          • #14
                            Nguyên văn bởi my_nghe_an Xem bài viết
                            cám ơn anh nhiều, em muốn hỏi thêm cái nữa là em đang muốn đọc nhiệt độ từ cảm biến DS18B20 hiện thị lên virtual terminal
                            em tìm được cái này, đây là chương trình :
                            người ta viết bằng ccs với pic 16f887a
                            #include <main.h>
                            #include "1wire/1wire.c"
                            #include "ds18b20/ds18b20.c"

                            uint16_t count_t0=0;
                            uint8_t str[20];
                            #INT_RTCC
                            void ngat_tran() // Sau 1s thi cap nhat nhiet do len PC
                            {
                            count_t0++;
                            if(count_t0==4883)
                            {
                            count_t0=0;
                            puts(str); // Truyen gai tri nhiet do do duoc len PC
                            }
                            }

                            void main()
                            {
                            float Temp;

                            DDRA=0x00;
                            DDRC=0x82;
                            DDRD=0x00;
                            DDRE=0x00;

                            enable_interrupts(INT_TIMER0); // Cho phep ngat tran TIMER0
                            enable_interrupts(GLOBAL); // Cho phep ngat toan cuc
                            setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4); // Cau hinh bo chia cho TIMER0
                            set_timer0(0x00); // Cau hinh gia tri cho thanh ghi TMR0

                            while(TRUE)
                            {
                            Temp=ds18b20_read();
                            sprintf(str,"Nhiet Do = %3.1f",Temp);
                            }
                            }

                            em có vài câu hỏi muốn hỏi, trong chương trình này: nếu không dùng timer có đọc được không? em thử rồi mà không được, nếu bỏ thì không đọc được,
                            thứ 2 là: nếu em đổi chân dữ liệu đưa từ DS18B20 vào chíp thành DDRE = 0x81 chẳng hạn
                            tức là chân nhận dữ liệu là chân RC0 thì sau khi đổi chân trong mô phỏng sao nó vẫn không đọc nhỉ? phải chăng là chỉ đọc được mỗi chân RC1 thôi ak?
                            một câu hỏi nữa là: vẫn dùng DDR(PORT) giống như avr để khai báo thay cho set_tris_port được ak các anh? với lại em thấy cái hàm *void ngat_tran* được định nghĩa ở trên sao ở trong chương trình chính không thấy gọi nhỉ?
                            vài câu hỏi thắc mắc mong nhận được câu trả lời, xin cám ơn
                            đây là link đầy đủ:
                            BÀI 5: ĐO NHIỆT ĐỘ VỚI DS18B20, GIÁ TRỊ ĐƯỢC TRUYỀN LÊN PC QUA RS232 | Diễn Đàn Vi Điều Khiển
                            DDRE ===> Là ở port E chứ có liên quan gì đến PORT C ( RC0 )

                            --- Muốn đọc vào chân RC0 ( bạn xem ở trong thư viện ( file ) ds18b20.c , 1wire.c xem trong đó nó dùng chân nào ... thì sửa trong đó )

                            Set tris hay DDR phụ thuộc vào cái trình dịch quy định ( Thông thường với PIC ... hay dùng SET tris ) ... Các câu lệnh đều có ý nghĩa như nhau ( đó là tác động để dùng 1 chân nào đó làm chân vào Hay Ra ) ... PIC thì input giá trị 1 , output giá trị 0

                            --- Không dùng ngắt thì dùng delay ... mục đích của cái ngắt timer để cập nhật 1 giây 1 lần

                            while(TRUE)
                            {
                            Temp=ds18b20_read();
                            sprintf(str,"Nhiet Do = %3.1f",Temp);
                            _delay_ms(1000); trễ 1 giây
                            puts(str); // Truyen gai tri nhiet do do duoc len PC
                            }

                            --- Bạn xóa hết chương trình trong ngắt đi ... mà xóa luôn cả cái dòng màu đỏ ( cái này để truyền dữ liệu lên ) ... khi xóa hết đi thì ... nó không truyền là phải thôi , Kêu gì nữa !

                            --- Ngắt chẳng cần gọi hàm ... Khi nào xảy ra ngắt CPU sẽ tự động lôi cái hàm đó ra . ( Ở trên là ngắt timer ... CPU cứ cấp xung , bao giờ tràn timer thì xảy ra ngắt ... Xảy ra ngắt thì tự chui vào hàm ngắt thôi .
                            Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                            Comment


                            • #15
                              cám ơn anh, em viết nhầm DDRC thành ddre
                              em mới làm quen với cái này nên gà lắm :3

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X