PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 03-12-2008, 07:54 PM   #1
lion
Đệ tử 6 túi
 
lion's Avatar
 
Tham gia ngày: May 2007
Bài gửi: 127
:
đây là 1 đoạn code viết cho 74hc595 :

Code:
//--------------------------------------------------------------
#define  DATA      RB7 
#define  CLK        RB6 
#define  STR        RB5 

void display_used_74hc595(unsigned char x)
{
   unsigned char i ;
      
   for(i=0;i<8;i++)
     {
        if( bit_test(x,0) == 1 ) 
           {
              DATA=1 ;  
           }
        else
           {
              DATA=0 ;          
           };
        CLK=0;
        CLK=1;
        
        x = x>>1 ;     
     };
}
//--------------------------------------------------
void main(void)
{
  

   TRISA=0xff;
   TRISB=0x00;
   TRISC=0xff; 
   TRISD=0xff;
   
    while(true)
       {
            
                            
              
              display_used_74hc595( 1 ) ;
              
              STR=1;
              STR=0;
          
        };
}

thay đổi nội dung bởi: namqn, 04-12-2008 lúc 02:08 AM.
lion vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-01-2009, 09:45 PM   #2
tallht
Đệ tử 5 túi
 
tallht's Avatar
 
Tham gia ngày: Mar 2008
Nơi Cư Ngụ: Bình Thạnh, TPHCM
Bài gửi: 98
:
hii cho thử nghiệm là sao vậy pác?
__________________
-------------------------------------------------------------------
Cung cấp bo mạch thực hành Arduino và các mạch sáng tạo.
Mời tham quan: https://www.facebook.com/eshop1109

Cung cấp dịch vụ order hàng từ Aliexpress
Liên hệ: https://www.facebook.com/Mua-h%E1%BB...5265931515571/
tallht vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-01-2009, 07:32 AM   #3
kimhuynguyen
Đệ tử 3 túi
 
Tham gia ngày: Nov 2007
Nơi Cư Ngụ: Vietnam
Bài gửi: 48
:
Trích:
Nguyên văn bởi tallht View Post
hii cho thử nghiệm là sao vậy pác?
Gọi là thử nghiệm vì là sử dụng c***k. Có thể phát sinh lỗi không mong muốn trong quá trình sử dụng. Nếu sử dụng bản này và phát sinh lỗi, có thể chia sẻ với mọi người.
__________________
More friends more foods
kimhuynguyen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-01-2009, 12:52 AM   #4
vdtk3
Đệ tử 2 túi
 
Tham gia ngày: Jun 2007
Bài gửi: 30
:
Các bác cho em hỏi tại sao em lập trình với 16f887 trên CCS 4.068 thì khi cho nhấp nháy portb.3 và portb.2 cùng lúc nhưng chỉ có portb.3 là nhấp nháy còn portb.2 thì không ??
Thanks !!
vdtk3 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-01-2009, 01:21 AM   #5
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi vdtk3 View Post
Các bác cho em hỏi tại sao em lập trình với 16f887 trên CCS 4.068 thì khi cho nhấp nháy portb.3 và portb.2 cùng lúc nhưng chỉ có portb.3 là nhấp nháy còn portb.2 thì không ??
Thanks !!
Bạn thử nghiệm trên mạch thực hay mô phỏng? Code của bạn ra sao?

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-01-2009, 03:30 PM   #6
vdtk3
Đệ tử 2 túi
 
Tham gia ngày: Jun 2007
Bài gửi: 30
:
em đã thử cả trên proteus và trên mạch thật. Đây là code của em :
Code:
#include <16F887.h>
#include <DEF_887.h>
#device *=16adc=10
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use DELAY(clock=20000000)

#include <lcd.c>

void init_main(void)
   {
      //khoi tao ADC
      setup_adc(adc_clock_internal);
      setup_adc_ports(all_analog);
      
      //khoi tao pwm
      setup_timer_2(T2_DIV_BY_1,250, 1);
      setup_ccp1(ccp_pwm);
      setup_ccp2(ccp_pwm);
      //khoi tao I/O
      TRISB2 = 0;
      TRISB3 = 0;
      trisb0 = 1;
      trisd = 0x00;
      trisc = 0x00;
      
      portb = 0xff ;
   }
void main (void)
   {
      init_main();
   while (1)
      {
         rb2 = 1;
         rb3= 1;
         delay_ms(1000);
         rb2= 0 ;
         rb3 = 0;
         delay_ms(1000);
      }
   }
Thanks!!!

thay đổi nội dung bởi: namqn, 10-01-2009 lúc 06:00 PM.
vdtk3 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-01-2009, 06:07 PM   #7
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Bạn sửa lại code trong vòng while (1) của bạn thành như sau xem:
Code:
   while (1)
      {
         PORTB = PORTB | 0x0C;	//Bat cac bit RB2 va RB3
         delay_ms(1000);
         PORTB = PORTB & 0xF3;	//Tat cac bit RB2 va RB3
         delay_ms(1000);
      }
Bạn đọc thêm về hoạt động read-modify-write đã được nói đến nhiều lần trên diễn đàn, chẳng hạn ở đây:
http://www.picvietnam.com/forum/showthread.php?p=4613

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-01-2009, 08:06 PM   #8
vdtk3
Đệ tử 2 túi
 
Tham gia ngày: Jun 2007
Bài gửi: 30
:
Cảm ơn bác Namqn nhiều em thử được rồi ! Mấy hôm trước em cũng viết vậy nhưng vẫn chạy bình thường, cứ tưởng là máy bị Virut cơ chứ .
vdtk3 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-01-2009, 08:52 PM   #9
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi vdtk3 View Post
Cảm ơn bác Namqn nhiều em thử được rồi ! Mấy hôm trước em cũng viết vậy nhưng vẫn chạy bình thường, cứ tưởng là máy bị Virut cơ chứ .
Với tốc độ xung clock tương đối thấp, bạn có thể gặp may rằng các hiện tượng liên quan đến hoạt động read-modify-write chưa đủ mạnh để làm cho PIC của bạn chạy không đúng ý đồ.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-01-2009, 04:40 AM   #10
ga_dientu
Nhập môn đệ tử
 
Tham gia ngày: Dec 2008
Bài gửi: 7
:
Code:
#include <16F877A.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=4000000)
#use fast_io(b)
#byte portb=0x06
#define led pin_B0
int16 count;
int8 a;
//Chuong trinh ngat TMR0
#int_timer0
void interrupt_timer0()
{
set_timer0(6);
++count;
if(count==2000)
   {
count=0;
a=a<<1;  // dich trai a 1bit
   }
if(a==256)
   {
a=1;
count=0;
   }
}
//Chuong trinh chinh
main()
{
set_tris_b(0);
enable_interrupts(global);
enable_interrupts(int_timer0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
set_timer0(6);
count=0;
a=1;
while(true)
   {
portb=a;
   }
}
Đây là chương trình dùng ngắt Timer0 định thời 1s của anh NHH,mong a chị giải đáp dùng em làm sao tính được thời gian định thời trong chương trình này

thay đổi nội dung bởi: namqn, 14-01-2009 lúc 07:00 AM.
ga_dientu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-01-2009, 08:09 PM   #11
ga_dientu
Nhập môn đệ tử
 
Tham gia ngày: Dec 2008
Bài gửi: 7
:
Việc tính toán thời gian định thời của Timer em đã hiểu, chỉ còn vấn đề tại sao lại set_timer0 (6). Mong sớm nhận được câu trả lời .
ga_dientu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-01-2009, 08:53 PM   #12
manhha2799
Đệ tử 5 túi
 
Tham gia ngày: Apr 2007
Bài gửi: 121
:
Send a message via Yahoo to manhha2799
set_timer0 (6) là để cho chương trình đếm từ bắt đầu từ số 6 chứ không phải là số 0. Tức là mỗi lần tràn là 256-6=250.
__________________
Bảng ledsigns chất lượng cao...
http://www.ledviet.info - manhha2700@yahoo.com
Đt:0949299699

thay đổi nội dung bởi: manhha2799, 19-01-2009 lúc 09:28 AM.
manhha2799 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-01-2009, 09:45 PM   #13
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi manhha2799 View Post
set_timer0 (6) là để cho chương trình đếm từ bắt đầu từ số 6 chứ không phải là số 0. Tức là mỗi lần tràn là 256-6=200.
256 - 6 = 250!

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-02-2009, 10:33 PM   #14
ga_dientu
Nhập môn đệ tử
 
Tham gia ngày: Dec 2008
Bài gửi: 7
:
Một số chương trình hiến thị LCD có viết là LCD = 0xC3 // vị trí hàng 2,cột 4//,em chưa hiểu mấy cách xác định vị trí này.
ga_dientu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-02-2009, 10:57 PM   #15
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi ga_dientu View Post
Một số chương trình hiến thị LCD có viết là LCD = 0xC3 // vị trí hàng 2,cột 4//,em chưa hiểu mấy cách xác định vị trí này.
Bạn tham khảo các tutorial về các module LCD, chẳng hạn như ở đây:
http://www.winpicprog.co.uk/pic_tutorial3.htm

Để đặt con trỏ màn hình LCD ở một vị trí nào đó, bạn sẽ dùng lệnh "Set Display Address", có bit 7 mang giá trị '1' (ứng với giá trị 0x80). 7 bit thấp hơn của lệnh sẽ xác định địa chỉ cần di chuyển con trỏ đến. Thông thường, hàng 1 của LCD có địa chỉ bắt đầu là 0x00, hàng 2 của LCD có địa chỉ bắt đầu là 0x40.

Do đó, cột 4 của hàng 2 sẽ có địa chỉ là 0x43. Như vậy cần xuất lệnh 0x80 + 0x43 = 0xC3 để di chuyển đến hàng 2, cột 4.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


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


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam