PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > PIC - Thiết kế và Ứng dụng

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

PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 04-09-2008, 10:24 AM   #1
cskiller
Đệ tử 4 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 89
:
Trích:
Nguyên văn bởi tmtm View Post
Bạn có thể giải thích rõ hơn về dòng lệnh này dược ko? Nếu ta sử dụng 2 chân RB2 & RB3 để điều khiển 1 IC74HC164 thứ 2 ... RB4 & RB5 điều khiển IC74HC164 thứ 3... thì ta phải xử lý như thế nào?
Khi bạn thiết kế với nhiều Port bạn có thể gom chúng lại để việc điều khiển và quản lý code dễ dàng hơn.
Nếu ngoài output bạn muốn sử dụng nhiều nhiều hiệu ứng hơn thì đồng thời với xuất ra led bạn nên dùng 1 buffer đi kèm theo để lưu lại.
Code:
//////////////////////////////////Data - CLK, Data - CLK, ... 
#define PORT_NUMBER     4
const unsigned long PORT_TABLE[PORT_NUMBER*2]={PIN_B0,PIN_B1,PIN_B2,PIN_B3,PIN_B4,PIN_B5,PIN_B6,PIN_B7};
unsigned char PortData[PORT_NUMBER];

//prototype
void Write2Led();
void WritePort2Led(int port_num,unsigned char data);
void WriteByte(int port_num,unsigned char data);
void WriteBit(int bit_num,unsigned short data);
void WriteInt32(int32 data);
void WriteArray(unsigned char data[PORT_NUMBER]);

//Update all data to leds
void Write2Led()
{
   int i,j;
   for(i=0;i<PORT_NUMBER;i++){
      WritePort2Led(i,PortData[i]);
   }
}

//Update data port to leds
void WritePort2Led(int port_num,unsigned char data)
{
   int i;
   for(i=0;i<8;i++){
      output_bit(PORT_TABLE[port_num],data&0x01);
      output_high(PORT_TABLE[port_num+1]);
      delay_us(1);
      data>>=1;
      output_low(PORT_TABLE[port_num+1]);
   }
}

//Write 1 byte data to buffer and update to leds
void WriteByte(int byte_num,unsigned char data)
{
   PortData[byte_num]=data;
   WritePort2Led(byte_num,data);
}

//Write 1 bit data to buffer and update to leds
void WriteBit(int bit_num,unsigned short data)
{
   PortData[bit_num/8]=(data == 0x01)?(PortData[bit_num/8]|(data&0x01)<<(bit_num%8)):(PortData[bit_num/8]&(~(data&0x01)<<(bit_num%8)));
   WritePort2Led(bit_num/8,PortData[bit_num/8]);
}

//Write 1 integer 32 bits data to buffer and update to leds
void WriteInt32(int32 data)
{
   int i;
   for(i=0;i<PORT_NUMBER;i++){
      PortData[i]=data&0xFF;
      data>>=8;
   }
   Write2Led();
}

//Write 1 array data to buffer and update to leds
void WriteArray(unsigned char data[PORT_NUMBER])
{
   int i;
   for(i=0;i<PORT_NUMBER;i++){
      PortData[i]=data[PortData];
   }
   Write2Led();
}
Good luck!
__________________
Quang báo RG/RGB 6/8/12/16 bits màu
Phone No: 0905.034.086
Email: lmquyen@gmail.com
cskiller 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

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
ban mach GPTUSB mach robot cac loai......... vinhcuu Quảng cáo và bán sản phẩm 2 30-01-2007 01:43 PM
cho em hoi ve mach nap Pic 1 stevent Cơ bản về vi điều khiển và PIC 3 29-01-2007 02:59 PM
mach nap PIC 1 cdtnhat Bootloaders - Programmers - Debuggers - Emulators 7 10-12-2006 06:12 PM
Mach nap minhtienbk Bootloaders - Programmers - Debuggers - Emulators 0 13-01-2006 06:13 PM
answer.com mot trang wed hay ve cac dinh nghia mafd_47a Trao đổi ngoài luồng 0 23-11-2005 11:30 PM


Múi giờ GMT. Hiện tại là 08:30 AM.


Đượ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