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 08-04-2009, 03:06 PM   #1
hathuc
Nhập môn đệ tử
 
Tham gia ngày: Sep 2007
Bài gửi: 4
:
Câu lệnh #use fast_io(b) để dùng cho việc thực thi các lệnh vào ra trên PortB
Ví dụ như câu lệnh set_tris_b(0b11110000); muốn thực thi được thì phải khai báo như trên trước.
hathuc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-04-2009, 12:25 AM   #2
ga_dientu
Nhập môn đệ tử
 
Tham gia ngày: Dec 2008
Bài gửi: 7
:
giúp em cái này

em có đoạn code chương trình dùng ngắt ngoài trên RB0 đếm số lần cái button được nhấn xuống, hiển thị lên led 7 đoạn (common cathode).Nếu số lần nhấn vượt quá 9, chương trình sẽ quay về hiển thị lên led từ sô1 nhu sau:

Code:
#include <16F877A.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=4000000)
#use fast_io(b)
#use fast_io(d)
#byte portb=0x06
#byte portd=0x08
const unsigned char digital[]={0b00000110, 0b01011011, 0b01001111, 0b01100110,\
						0b01101101, 0b01111101, 0b00000111, 0b01111111, 0b01101111};
                  // ma hoa digital duoi dang mang
// Chuong trinh ngat
#int_ext
void ngat_RB0()
{
int i;
   if(i<9)
      {
      portd=digital[i];
      ++i;
      }
   if(i==9)
      {
      i=0;
      }
}
// Chuong trinh chinh
main()
{
set_tris_b(0b00000001);
set_tris_d(0);
enable_interrupts(global);
enable_interrupts(int_ext);
ext_int_edge(H_to_L);
portd=0b00111111;
while(true)
   {
}
cho em hoi khai báo portd=0b00111111 để làm gì ,

thay đổi nội dung bởi: namqn, 10-04-2009 lúc 12:29 AM. Lý do: định dạng code
ga_dientu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-04-2009, 12:31 AM   #3
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
em có đoạn code chương trình dùng ngắt ngoài trên RB0 đếm số lần cái button được nhấn xuống, hiển thị lên led 7 đoạn (common cathode).Nếu số lần nhấn vượt quá 9, chương trình sẽ quay về hiển thị lên led từ sô1 nhu sau:

Code:
#include <16F877A.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=4000000)
#use fast_io(b)
#use fast_io(d)
#byte portb=0x06
#byte portd=0x08
const unsigned char digital[]={0b00000110, 0b01011011, 0b01001111, 0b01100110,\
						0b01101101, 0b01111101, 0b00000111, 0b01111111, 0b01101111};
                  // ma hoa digital duoi dang mang
// Chuong trinh ngat
#int_ext
void ngat_RB0()
{
int i;
   if(i<9)
      {
      portd=digital[i];
      ++i;
      }
   if(i==9)
      {
      i=0;
      }
}
// Chuong trinh chinh
main()
{
set_tris_b(0b00000001);
set_tris_d(0);
enable_interrupts(global);
enable_interrupts(int_ext);
ext_int_edge(H_to_L);
portd=0b00111111;
while(true)
   {
}
cho em hoi khai báo portd=0b00111111 để làm gì ,
portd = 00b00111111 là một phép gán chứ không phải khai báo. Không có sơ đồ mạch thì khó mà phân tích được phép gán này dùng để làm gì trong chương trình trên.

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-04-2009, 10:19 PM   #4
ga_dientu
Nhập môn đệ tử
 
Tham gia ngày: Dec 2008
Bài gửi: 7
:
Smile

mấy bác giải thích dùm
Hình Kèm Theo
File Type: gif dem1_9dungngatngoai.gif (10.8 KB, 365 lần tả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-04-2009, 10:56 PM   #5
ga_dientu
Nhập môn đệ tử
 
Tham gia ngày: Dec 2008
Bài gửi: 7
:
hehe, em hieu vi sao roi,thank các bác nhiu
ga_dientu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-04-2009, 11:22 AM   #6
vietanh
Đệ tử 1 túi
 
Tham gia ngày: Dec 2005
Bài gửi: 20
:
minh up lại hai phiên bản cho css 74 va 84 bạn nào không tải được pm vn2005_00@yahoo.com mình send cho ok mọi người lưu y trình bẻ khóa tụi nó toan gắn mã đôc trước khi cài đặt nên tắt kết nôi với mạng ,sau khi bẻ khóa ok quét virut 1 lần ok rui mới cho kết nối nhé

http://rapidshare.com/files/12706092...WHD_v4.074.rar

http://rapidshare.com/files/222279847/CCS4.083.rar
vietanh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-04-2009, 07:00 PM   #7
tinhgiac_vp
Đệ tử 2 túi
 
Tham gia ngày: Oct 2007
Bài gửi: 42
:
các bác cho em hỏi làm cách nào để biết được chiều dài của một chuỗi số nguyên 16bit, em khai bao int16 dist[] = {675,786,789,567].nhưng hàm strlen() chỉ trả về giá trị 1, do nó làm việc với chuỗi 8 bit.Mong các bác chỉ giúp em.
tinhgiac_vp vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-04-2009, 07:18 PM   #8
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 tinhgiac_vp View Post
các bác cho em hỏi làm cách nào để biết được chiều dài của một chuỗi số nguyên 16bit, em khai bao int16 dist[] = {675,786,789,567].nhưng hàm strlen() chỉ trả về giá trị 1, do nó làm việc với chuỗi 8 bit.Mong các bác chỉ giúp em.
Hàm strlen() được dùng cho chuỗi (là kiểu tương đương với mảng char), làm sao áp dụng cho mảng int16 của bạn được.

Bạn nên cho biết mục đích cụ thể, từ đó người khác sẽ có thể góp ý cho bạn cách xây dựng kiểu dữ liệu phù hợp với mục đích cụ thể đó.

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 21-04-2009, 08:24 PM   #9
tinhgiac_vp
Đệ tử 2 túi
 
Tham gia ngày: Oct 2007
Bài gửi: 42
:
em muốn gửi 10 giá trị int16 lên PC. Muốn đưa 10 giá trị đó vào 1 chuoi đê viết chương trình cho gọn, không phải viết từng dòng để gửi lên PC mà chỉ cần dùng vòng lặp. Rõ ràng vấn đề không có gì khi em biết mảng đó có 10 giá trị, nhưng trong trường hợp chúng ta không biết mảng đó có bao nhiêu giá trị thì làm thế nào? Em cũng biết là hàm strlen() không trả về giá trị chiều dài trong trường hợp này. Không biết có cách nào xác định chiều dài mảng này không?
tinhgiac_vp vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-05-2009, 09:47 PM   #10
mocdailam
Đệ tử 1 túi
 
Tham gia ngày: Mar 2009
Bài gửi: 18
:
Send a message via ICQ to mocdailam
bac F ơi! có thời gian trả lời giúp em với
mocdailam vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-05-2009, 09:37 PM   #11
manhha2799
Đệ tử 5 túi
 
Tham gia ngày: Apr 2007
Bài gửi: 121
:
Send a message via Yahoo to manhha2799
Bạn này hỏi gì thế nhỉ? mà ko thấy câu hỏi gì hết?
__________________
Bảng ledsigns chất lượng cao...
http://www.ledviet.info - manhha2700@yahoo.com
Đt:0949299699
manhha2799 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-06-2009, 05:40 PM   #12
bravesoldier
Đệ tử 1 túi
 
Tham gia ngày: Apr 2009
Bài gửi: 18
:
Em tra datasheet của PIC16F877A để tìm hiểu module SPI và xem cả example trong CCS nữa nhưng khi thử trên bo cắm với 5 con 595 thì 40 con LED sáng loạn cả lên. Liệu em có dùng sai hay không? Bác nào dùng SPI cứng của PIC ko chỉ cho em với?
Code:
#include <16F877A.h>
#device *=16 ADC=8
#fuses NOWDT, XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=4000000)
#use fast_io(b)
#byte portb=0x6
#bit SCL = portb.0

void latch_data()
  {
    SCL=0;
    SCL=1;
  }

main()
  {
   byte i;
   set_tris_b(0);
   setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_16); // tham kha?o Help
   
   SCL=1;
   while (true)
      {
       for (i=1; i<=5; ++i) {spi_write(0xAA);}
       latch_data();
       delay_ms(1000);

       for (i=1; i<=5; ++i) {spi_write(0x55);}
       latch_data();
       delay_ms(1000);
      }
  }
Em lắp xen kẽ 20 con LED xanh với 20 con LED đỏ, viết code để cho chúng nó nhấp nháy.
Theo như datasheet thì em dùng chân RC5 của PIC16F877A để xuất data ra chân 14 của con 595 đầu tiên, chân RC3 làm chân clock (SCK), chân RB0 chọn để chốt.
Em xin cám ơn!
bravesoldier vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-07-2009, 07:05 PM   #13
tonghua19
Nhập môn đệ tử
 
Tham gia ngày: Apr 2008
Bài gửi: 3
:
Trích:
Nguyên văn bởi bravesoldier View Post
Em tra datasheet của PIC16F877A để tìm hiểu module SPI và xem cả example trong CCS nữa nhưng khi thử trên bo cắm với 5 con 595 thì 40 con LED sáng loạn cả lên. Liệu em có dùng sai hay không? Bác nào dùng SPI cứng của PIC ko chỉ cho em với?
Code:
#include <16F877A.h>
#device *=16 ADC=8
#fuses NOWDT, XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=4000000)
#use fast_io(b)
#byte portb=0x6
#bit SCL = portb.0

void latch_data()
  {
    SCL=0;
    SCL=1;
  }

main()
  {
   byte i;
   set_tris_b(0);
   setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_16); // tham kha?o Help
   
   SCL=1;
   while (true)
      {
       for (i=1; i<=5; ++i) {spi_write(0xAA);}
       latch_data();
       delay_ms(1000);

       for (i=1; i<=5; ++i) {spi_write(0x55);}
       latch_data();
       delay_ms(1000);
      }
  }
Em lắp xen kẽ 20 con LED xanh với 20 con LED đỏ, viết code để cho chúng nó nhấp nháy.
Theo như datasheet thì em dùng chân RC5 của PIC16F877A để xuất data ra chân 14 của con 595 đầu tiên, chân RC3 làm chân clock (SCK), chân RB0 chọn để chốt.
Em xin cám ơn!
Chào các bạn
các bạn cho mình hỏi là câu lệnh:
#device *=16 ADC=8
#byte portb=0x6
có nghĩa gì vậy
cho em mình hỏi thêm là làm sao mình mới có thể dùng lệnh các lệnh như trisb, portb, latb,... hay một số thanh ghi như ifs1, iec0,...
Cám ơn các bạn nhiều
tonghua19 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-06-2009, 08:49 AM   #14
picpen
Đệ tử 5 túi
 
picpen's Avatar
 
Tham gia ngày: Jun 2008
Bài gửi: 112
:
Code:
for (i=1; i<=5; ++i) {spi_write(0xAA);}
latch_data();
delay_ms(1000);
??? tôi ko hiểu ý đồ dùng cấu trúc for của bạn là như thế nào , bạn chú ý khi quản lý khối lệnh bằng {} nhé !
với SPI tôi đã làm rồi , cái giao tiếp này của pic rất rễ nhiễu và bị sai khi bạn dùng cáp để để truyền dữ liệu . Chỉ cần sai 1 bít là tất cả khối dữ liệu sau đó bị sai hết
Bạn nên chú ý với 2 dây dữ liệu và dây clock . phải đảm bảo mấy dây đó phải an toàn ko xảy ra lỗi ...... đó là do cách hoạt động của SPI ko có kiểm tra chẵn lẻ cũng ko có tín hiệu ack
chúc vui !
__________________
** xin hãy cho tôi là tượng đá
** Để muôn đời không nhớ thương ai ..!!
picpen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-06-2009, 03:35 PM   #15
bravesoldier
Đệ tử 1 túi
 
Tham gia ngày: Apr 2009
Bài gửi: 18
:
Trích:
??? tôi ko hiểu ý đồ dùng cấu trúc for của bạn là như thế nào , bạn chú ý khi quản lý khối lệnh bằng {} nhé !
với SPI tôi đã làm rồi , cái giao tiếp này của pic rất rễ nhiễu và bị sai khi bạn dùng cáp để để truyền dữ liệu . Chỉ cần sai 1 bít là tất cả khối dữ liệu sau đó bị sai hết
Bạn nên chú ý với 2 dây dữ liệu và dây clock . phải đảm bảo mấy dây đó phải an toàn ko xảy ra lỗi ...... đó là do cách hoạt động của SPI ko có kiểm tra chẵn lẻ cũng ko có tín hiệu ack
chúc vui !
Em dùng for để thực hiện 5 lần SPI_write, để out 5x8 = 40 bit ra dãy LED 40 con
0xAA = 10101010b để LED đỏ tắt, LED xanh sáng
0x55= 01010101b để LED đỏ sáng, LED xanh tắt
đúng là em cắm nhiều dây quá nên nhiễu thật
sờ vào nguồn là cụm 8LED do con 595 thứ 2 nối ra tối hẳn đi, còn các cụm khác vẫn bình thường. Thật là củ chuối!
Đêm qua em tháo hết bo rồi. Mục đích là test chức năng SPI mềm và cứng của PIC 16F877A mà bác.
Bác có gì chỉ bảo, có gì cần chú ý về phần cứng thì giúp em với.
mail của em là dotien.dzung@gmail.com
em xin cảm ơn bác.
bravesoldier 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à 10:31 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