Thông báo

Collapse
No announcement yet.

định nghĩa trong ccs như thế nào!

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

  • định nghĩa trong ccs như thế nào!

    chào các bạn mình gặp một vấn đề như thế này. Mình ko muốn dùng lệnh
    "output_portd(0x00)" thì mình đã dùng định nghĩa PORTD và thay bằng lệnh
    PORTD=0x00; nhưng nó ko thực hiện được. Mình dùng chương trình chớp tẳt led bình thường nhưng ko dc. bạn nao đã làm rồi chỉ cho mình với. đây là source code của mình:
    file.c
    #include "C:\Documents and Settings\trungchanh108\My Documents\chuong trinh viet cho pic\ngat timer\main.h"
    void main()
    {

    setup_adc_ports(NO_ANALOGS|VSS_VDD);
    setup_adc(ADC_OFF);
    setup_spi(SPI_SS_DISABLED);
    setup_timer_1(T1_DISABLED);
    setup_timer_2(T2_DISABLED,0,1);
    setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
    //Setup_Oscillator parameter not selected from Intr Oscillator Config tab

    // TODO: USER CODE!!
    while(true)
    {
    PORTD=0xFF;
    delay_ms(1000);
    PORTD=0x00;
    delay_ms(1000);
    }
    }
    file.h
    #include <16F887.h>
    #device adc=8
    #FUSES NOWDT, HS, PUT, MCLR, NOPROTECT, NOCPD, NOBROWNOUT, IESO, FCMEN, NOLVP, NODEBUG, NOWRT, BORV40
    #byte PORTD=0x08
    #use delay(clock=12000000)

  • #2
    Bạn có vẻ thích mua việc nhỉ?

    Chỉ cần dùng OUTPUT_D(value) là OK. Nếu chỉ để LED chớp tắt có nghĩa chỉ dùng 2 dòng.

    Còn làm theo cách của bạn, phải gõ thêm mỏi tay.

    Bạn muốn làm như vậy, thì trong hàm main() phải gõ thêm dòng SET_TRIS_D(0) để xác định port D là out.

    Muốn set được, lại phải thêm trong phần config dòng #USE FAST_IO(D).

    Đúng là thêm việc.
    Đêm nay tớ không ngủ - ngày mai tớ ngủ bù

    Comment


    • #3
      ah, ko phải là mình mua việc đâu bạn ah. Tại vì mình định dùng lệnh giông như trong Codevision đó mà: lệnh đó là như thế này:
      PORTD=~PORTD. đúng là rất đơn giản phải ko mình có thể thay thế bằng 2 dòng lệnh output_port(). Nhưng trong nhiều ứng dunhj mình lại cần cái lệnh đảo cả Byte đó bạn ah

      Comment


      • #4
        Nguyên văn bởi trch Xem bài viết
        ah, ko phải là mình mua việc đâu bạn ah. Tại vì mình định dùng lệnh giông như trong Codevision đó mà: lệnh đó là như thế này:
        PORTD=~PORTD. đúng là rất đơn giản phải ko mình có thể thay thế bằng 2 dòng lệnh output_port(). Nhưng trong nhiều ứng dunhj mình lại cần cái lệnh đảo cả Byte đó bạn ah
        BÓ CHIM!

        Tôi thề lần sau không nói chuyện trong box này nữa.
        Đêm nay tớ không ngủ - ngày mai tớ ngủ bù

        Comment


        • #5
          Nguyên văn bởi trch Xem bài viết
          chào các bạn mình gặp một vấn đề như thế này. Mình ko muốn dùng lệnh
          "output_portd(0x00)" thì mình đã dùng định nghĩa PORTD và thay bằng lệnh
          PORTD=0x00; nhưng nó ko thực hiện được. Mình dùng chương trình chớp tẳt led bình thường nhưng ko dc. bạn nao đã làm rồi chỉ cho mình với. đây là source code của mình:
          file.c

          file.h
          Trong CCS, để làm việc với đầu ra thì phải dùng lệnh Output_d(giá trị cần xuất). Đó là hàm mặc định CCS đã hỗ trợ. Nếu muốn dùng kiểu như bạn làm với AVR là PORTD = 0x00 thì bạn phải làm thêm chút việc như sau.

          Vì mặc định CCS không hỗ trợ khai báo PORTD do đó bạn cần khai báo thêm địa chỉ của PORTD. Xem trong memory map của PIC bạn dùng để biết PORTD có địa chỉ bao nhiêu sau đó dùng khai báo sau
          #byte PORTD = 0x08 (0x08 là địa chỉ của PORTD mà PIC nó quản lý và truy nhập). Khai báo này phải đặt trước khi bạn dùng, tốt nhất là ngay sau #include cái file .h

          Sau đó bạn có thể thoải mái dùng PORTD = 0x55 hay bất cứ gì
          Các PORT và thanh ghi khác cũng làm tương tự. Nếu muốn truy nhập theo từng chân thì dùng #bit

          Code:
          #bit RD7    =0x08.7
          #bit RD6    =0x08.6
          #bit RD5    =0x08.5
          #bit RD4    =0x08.4
          #bit RD3    =0x08.3
          #bit RD2    =0x08.2
          #bit RD1    =0x08.1
          #bit RD0    =0x08.0
          Gửi kèm cho bạn file .h của 877A 876a
          Attached Files
          Ethernet-RS232, PIC Webserver, RFID Reader
          CallerID, Cảnh báo BTS, ...
          0988006696
          linhnc308@gmail.com
          http://linhnc308.blogspot.com

          Comment


          • #6
            Nguyên văn bởi trch Xem bài viết
            ah, ko phải là mình mua việc đâu bạn ah. Tại vì mình định dùng lệnh giông như trong Codevision đó mà: lệnh đó là như thế này:
            PORTD=~PORTD. đúng là rất đơn giản phải ko mình có thể thay thế bằng 2 dòng lệnh output_port(). Nhưng trong nhiều ứng dunhj mình lại cần cái lệnh đảo cả Byte đó bạn ah

            Nguyên văn bởi nhathung1101 Xem bài viết
            BÓ CHIM!

            Tôi thề lần sau không nói chuyện trong box này nữa.

            Đây là đoạn đối thoại hay nhất trong tháng! Đúng là cao thủ gặp "Cao thủ"...

            Comment


            • #7
              Nguyên văn bởi trch Xem bài viết
              ah, ko phải là mình mua việc đâu bạn ah. Tại vì mình định dùng lệnh giông như trong Codevision đó mà: lệnh đó là như thế này:
              PORTD=~PORTD. đúng là rất đơn giản phải ko mình có thể thay thế bằng 2 dòng lệnh output_port(). Nhưng trong nhiều ứng dunhj mình lại cần cái lệnh đảo cả Byte đó bạn ah
              Hi,
              Cái này cũ rồi nhưng tình cờ ghé ngang nên comment chút xíu. Nếu bác dùng khai báo #byte thì bắt buộc phải set_tris cho nó, tương tự #use fast_io cũng bắt buộc phải set_tris trước khi dùng.
              Nếu muốn thực hiện PortD =~PortD thì bác có thể dùng
              value ^= 0xFF;
              output_d(value);

              Thân ái.
              Đường đến những ngày vinh quang không còn xa
              Con đường chúng ta... chúng ta đã chọn.

              Comment


              • #8
                Nguyên văn bởi trch Xem bài viết
                ah, ko phải là mình mua việc đâu bạn ah. Tại vì mình định dùng lệnh giông như trong Codevision đó mà: lệnh đó là như thế này:
                PORTD=~PORTD. đúng là rất đơn giản phải ko mình có thể thay thế bằng 2 dòng lệnh output_port(). Nhưng trong nhiều ứng dunhj mình lại cần cái lệnh đảo cả Byte đó bạn ah
                Đã test.
                Để xuất giá trị ra portD chỉ cần dòng lệnh : output_d(value);
                Đúng ra thủ tục cần cả set_tris_d(0x00) và #use fast io(D);

                Mình cũng đã thực hiện câu lệnh portD = 0x12;
                Nó vẫn thực hiện bình thường.

                Còn để đảo bit.
                Mình đã dùng
                output_d(value);
                output_d(255-value);
                Vẫn đảo bit OK.
                Hoặc
                portD = value;
                portD = 255 - portD;
                Và mình cũng test luôn câu lệnh portD =~portD; kết quả cũng OK.

                Comment


                • #9
                  Nguyên văn bởi nhathung1101 Xem bài viết
                  BÓ CHIM!

                  Tôi thề lần sau không nói chuyện trong box này nữa.
                  thật ra tôi cũng từng làm như vậy, vì nó là cách thông dụng khi hiểu và làm việc với Asembly. Không phải làm việc với phần mềm nào là chỉ sử dụng những lệnh đó. mỗi người có một cách làm việc khác nhau. Khai báo theo kiểu bạn ở trên hỏi thì quản lý hơi khó khăn khi làm việc với quá nhiều thanh ghi và bit SFR, nhưng là cách chặt chẽ nhất.
                  Bạn không nên thề, vì bạn là người có khả năng nên tôi nghĩ có câu hỏi bạn sẽ tích cực tham gia ans. Thân ái
                  Be quan. Plz contact through email:

                  Comment


                  • #10
                    Ở trên chủ thớt đã chỉ định rõ là CCS rồi mà

                    Comment

                    Về tác giả

                    Collapse

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

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

                    Collapse

                    Đang tải...
                    X