cho mình hỏi đoạn code viết bằng ccs chút

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • phonghp91
    Thành viên chính thức
    • Aug 2012
    • 92

    #1

    cho mình hỏi đoạn code viết bằng ccs chút

    vừa tạm biệt asm chuyển sang ccs gặp chút rặc dối . viết cho con 16f877a dịch 8 led nối vào portb tắt theo thứ tự từ trên xuống dưới không biết viết code thế này đúng không mà nó chạy không đúng . các b chỉ giúp nhé . thankss


    #include "C:\Documents and Settings\haphong computer\Desktop\css\k2.h"
    #use delay(clock=20000000)
    int8 a[8]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};

    void main()
    {

    setup_adc_ports(NO_ANALOGS);
    setup_adc(ADC_CLOCK_DIV_2);
    setup_psp(PSP_DISABLED);
    setup_spi(SPI_SS_DISABLED);
    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
    setup_timer_1(T1_DISABLED);
    setup_timer_2(T2_DISABLED,0,1);
    setup_comparator(NC_NC_NC_NC);
    setup_vref(FALSE);
    set_tris_b(0);
    while(1)
    {
    int8 i;
    for(i=a[1];i<=a[8];i=i+1);
    {
    output_b(i);
    delay_ms(100);
    }
    }
    }
    Ph.vmr
  • nhanh0112
    Thành viên tích cực
    • May 2006
    • 201

    #2
    Ý bạn chạy đúng là thế nào? 1 led dịch từ cao xuống thấp à?

    Comment

    • antoberica
      Thành viên chính thức
      • Nov 2011
      • 64

      #3
      theo mình thì nên khai báo một mảng a[] gồm các bit tắt dần theo yeo cầu, rồi cho output ra portB!
      ví dụ LED bạn là anode chung lên +5V thì nêu ngõ ra là mức 0 thì LED sáng như vậy:
      unsigned int8 a[] = { 0xFF, 0x7F, 0x3F, ...};
      rồi cho output ra PORTB là xong!

      Comment

      • phonghp91
        Thành viên chính thức
        • Aug 2012
        • 92

        #4
        nghĩa là mình nối led vao portb theo thứ tự từ trên xuống đó . led mình nối chung anode . chưa hiểu únigned int8 a[] ={....} chạy khác gì so với int8 a[]=..... của mình .
        mà mình thây lạ là cũng nối led như trên nhưng mình đổi đoạn code trong hàm main thành như sau nhưng nó vẫn chạy không đúng :
        set_tris_b(0);
        while(1)
        {
        output_b(0x01);
        delay_ms(100);
        output_b(0x02);
        delay_ms(100);
        output_b(0x03);
        delay_ms(100);
        output_b(0x04);
        delay_ms(100);
        output_b(0x06);
        delay_ms(100);
        output_b(0x07);
        delay_ms(100);
        output_b(0x08);
        delay_ms(100);
        }

        mà cho mình hỏi luôn vde này nữa . sao nó cứ báo lỗi ở chỗ device 16f877a*=16 adc8 mà theo mình thì cú pháp đã đúng .
        #include "C:\Documents and Settings\haphong computer\Desktop\css\adc.h"
        #fuses HS,NOWDT,NOPROTECT,NOLVP
        #device 16F877A*=16 ADC=8
        #use delay(clock=10000000)
        Int8 adc;

        void main()
        {

        setup_adc_ports(NO_ANALOGS);
        setup_adc(ADC_CLOCK_DIV_2);
        setup_psp(PSP_DISABLED);
        setup_spi(SPI_SS_DISABLED);
        setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
        setup_timer_1(T1_DISABLED);
        setup_timer_2(T2_DISABLED,0,1);
        setup_comparator(NC_NC_NC_NC);
        setup_vref(FALSE);

        // TODO: USER CODE!!

        setup_adc(adc_clock_internal);
        setup_adc_ports(AN0);
        set_adc_channel(0);
        delay_ms(10);
        while(true)
        {
        adc=read_adc();
        output_B(adc);
        }
        }


        thankss các b
        Ph.vmr

        Comment

        • antoberica
          Thành viên chính thức
          • Nov 2011
          • 64

          #5
          kết quả khi chạy thử thì LED sáng như thế nào vậy?

          Comment

          • phonghp91
            Thành viên chính thức
            • Aug 2012
            • 92

            #6
            hình như là 4 led dưới cung sang 4 led trên nhâp nháy không theo quy luật nào cả . vì mình làm thử tối qua không đc nên hum nay đi hỏi . hj . mong các b chỉ giúp
            Ph.vmr

            Comment

            • phonghp91
              Thành viên chính thức
              • Aug 2012
              • 92

              #7
              không b nào giúp m vs sao
              Ph.vmr

              Comment

              • nhanh0112
                Thành viên tích cực
                • May 2006
                • 201

                #8
                1. Theo như bạn mô tả sơ đồ thì bạn mắc chung anot, điều ngày có nghĩa là khi mỗi pin đc set lên 1 thì đồng nghĩa với việc led đó tắt (đảo giá trị, nhận giá trị 0 thì led sáng, giá trị 1 led tắt).
                2. Giá trị của bạn đưa ra port tăng dần theo tuần tự hexa (ko phải dịch bit), điều này có nghĩa là led của bạn sẽ sang lần lượt theo các giá trị khi ta convert từ hexa sang binary (0b0000.0001,0b0000.0010,0b0000.0011...)
                3. Từ điều 1 và 2 trên ta sẽ thu đc kết quả như bạn nói: 4 led (thuộc 4 bit cao luôn luôn sang vì gia trị 4 bit này luôn là 0), 4 bit sau sang theo quy luật thứ tự của hệ nhị phân (bỉnary), có điều sẽ bị đảo lại (đèn tắt tương ứng với bit 1)
                Các khắc phục (để phục vụ việc sang đuổi) bạn có thể làm thử như sau:
                Code:
                char i;
                i=1;
                while(TRUE)
                	{
                	output_b(i);
                	delay_ms(100);
                	i<<=1;
                	if(i==0){i=1;}
                	}
                Chúc bắt đầu tốt đẹp

                Comment

                • duong_act
                  Thành viên tích cực
                  • Nov 2008
                  • 4903

                  #9
                  Dịch led thế này này :

                  Code:
                  int temp;
                  void main()
                  {
                       output_b(0x00);
                       set_tris_b(0x00);
                       while(true)
                       {
                       temp = input_b();
                       if(temp=0xFF)
                       {
                             temp=0x00;
                       }
                       shift_left(temp,1);
                       output_b(temp);
                       delay_ms(500);
                       }
                  }

                  Comment

                  • phonghp91
                    Thành viên chính thức
                    • Aug 2012
                    • 92

                    #10
                    thanks các b . vậy con cái #device 16f877a*=16 adc8 thi sao . sao mình dịch nó cứ báo lỗi . đã tham khảo nhiều bài viết nhưng vẫn chưa sửa được . mong các b giúp .
                    Ph.vmr

                    Comment

                    • nhanh0112
                      Thành viên tích cực
                      • May 2006
                      • 201

                      #11
                      chỉ cần thế này là đủ
                      Code:
                      #device adc=8   => 8bit
                      #device adc=10 => 10bit

                      Comment

                      • vothienso01
                        Banned
                        • Aug 2010
                        • 36

                        #12
                        #device *=16, adc = 8

                        Comment

                        Về tác giả

                        Collapse

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

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

                        Collapse

                        Đang tải...