PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   cứu tôi với (http://www.picvietnam.com/forum/showthread.php?t=3395)

dientudong 03-01-2009 11:54 AM

à mình hiểu rồi,phải đặt lệnh goto label trong một hàm i f

dientudong 03-01-2009 12:44 PM

Các bạn à , mình muốn dùng 1 nút nhấn , nhấn lần 1 thì thực hiện cộng việc 1,nhấn lần 2 thì thực hiện công việc 2, nhấn lần 3 thì thực hiện công việc 3.Mình chưa biết giải thuật thế nào .Mong các bạn chỉ bảo.

hung_nguyen 03-01-2009 07:00 PM

nhưng sau khi nhất lần 3 thì chip có cần reset lại không? bạn có thể dùng hỏi vòng để kiểm tra trạng thái trên một chân nào đó được nối tới nút nhấn của bạn, khi có một thay đổi trạng thái tức là nút được nhấn thì bạn dùng một biết đếm (count chẳng hạn) tăng lên một. Sau đó dùng if kiểm tra nếu count=1 thì thực hiện công việc 1, count=2 thực hiện công việc 2...

dientudong 04-01-2009 08:15 PM

Bạn à mình thấy lệnh set_tris_b(0x00) đâu có liên quan gì tới #use fast_io(b).Mình làm nhiều ví dụ và thấy vậy.Bạn có thể cho mình thấy ví dụ nào liên quan không .

dientudong 05-01-2009 05:17 AM

1 Attachment(s)
Code:

#include "C:\Program Files\PICC\Examples\hienthiso.h"
#include "C:\Program Files\PICC\Drivers\LCD.C"
#use delay(clock=20000000)
#byte portD=0x08
#byte portB=0x06
#bit RB0=0x06.0
#use fast_io(b)
#use fast_io(d)
int8 mode,i,j;
  #INT_EXT
 
      void ext_isr()
        {
         
          mode++;
          delay_ms(1);
          if(mode==3)
              {
                mode=0;
              }
        }
    void program1();
    void program2();
void main()
{
    mode=0;
  set_tris_b(0b00000001);
  portB=0x00;
  set_tris_d(0);
  portD=0x00;
 
  enable_interrupts(int_ext);
  ext_int_edge(H_TO_L);
  enable_interrupts(GLOBAL);
 
 
  while(1)
    {
     
      switch(mode)
        {
            case 1:program1();break;
            case 2:program2();break;
        }
    }
}
      void program1()
          {
            if(mode==1)
              {
                lcd_putc('\f');
                    for(i=0;i<5;i++)
                      {
                      lcd_init();
                      lcd_gotoxy(1,1);
                      lcd_putc("NGUYEN VAN THANH");
                      delay_ms(20);
                      lcd_gotoxy(1,1);
                      lcd_putc('\f');
                      delay_ms(20);
                     
                      }
              }
          }

void program2()
          {
            if(mode==2)
              {
                lcd_putc('\f');
                  for(j=0;j<5;j++)
                    {
                      lcd_init();
                      lcd_gotoxy(1,1);
                      lcd_putc("HOANG THI HOAI MY");
                      delay_ms(20);
                      lcd_gotoxy(1,1);
                      lcd_putc('\f');
                      delay_ms(20);
                    }
                 
              }
          }

Các bạn cho mình hỏi : mình dùng 1 nút nhấn(chân RB0) ,khi nhấn lần 1 thì thực hiện chương trình 1,nhấn lần 2 thì thực hiện chương trình 2,mình dùng ngắt RB0.Mình không biết là phần khai báo ngắt có vấn đề gì không ? Mong các bạn chỉ giúp !MÌnh làm cả đêm rồi mà không chạy được.

kimhuynguyen 05-01-2009 07:48 AM

Trích:

Nguyên văn bởi dientudong (Post 21918)
Bạn à mình thấy lệnh set_tris_b(0x00) đâu có liên quan gì tới #use fast_io(b).Mình làm nhiều ví dụ và thấy vậy.Bạn có thể cho mình thấy ví dụ nào liên quan không .

Những khai báo này là dẫn hướng cho trình biên dịch. Bạn có thể sẽ không "cảm nhận" được sự khác biệt.

Tham khảo chi tiết thêm phần Help của CCS.

dientudong 05-01-2009 10:11 AM

còn vấn đề #20 ở trên của mình thì sao,các bạn chỉ giúp mình với

nguyenquoctoan 05-01-2009 10:40 AM

-set_tris_b(0x00) là lấy port b là ngõ ra, giả sử khi đọc encoder hoặc đọc adc ngõ vào kô set làm ngõ vào sao mà chạy,...(theo em là như vậy kô biết các bác như nào)
- #20 ổ chổ nào đâu kô thấy ở đâu hít

dientudong 05-01-2009 10:43 AM

file lcd.rar của mình và code ở trên đó mà

dientudong 05-01-2009 10:48 AM

ý của mình là không có lệnh #use fast_io(b) thi lenh set_tris_b(0x00) van co hieu luc

nguyenquoctoan 05-01-2009 11:13 AM

- trong filelcd.rar có hình mô phỏng ah
- #use fast_io(b) khi trong chương trình dùng các lệng như output_low(),...nó chỉ set chỉ với lệnh, nhanh hơn so với khi không dùng chỉ thị này (trích tài liệu ccs)
- trong hàm main() bạn phải dùng hàm set_tris_x() chỉ rõ chân vào ra
-- có nghĩa là sao, bạn có thể bỏ kô ảnh hưởng tới chương trình, nhưng phải có dòng lệnh set_tris_x() để chỉ rõ chân vào ra cho pic hỉu, kô có thì chương trình kô chạy

dientudong 05-01-2009 11:22 AM

bạn giúp mình xem code cho mạch trong file lcd.rar.xem có vấn đề gì không

nguyenquoctoan 05-01-2009 11:26 AM

trong file lcd.rar kô có code chỉ có hình mô phỏng bằng protues, bạn xem lại,...

dientudong 05-01-2009 11:29 AM

code mình post cùng chỗ với file lcd.rar đó mà

nguyenquoctoan 05-01-2009 11:41 AM

code của bạn chưa chạy hay sao, bạn đã nạp và mô phỏng chưa, ở đây mình kô có điều kiện để test thử trực tiếp,


Múi giờ GMT. Hiện tại là 02:54 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam