|
Tài trợ cho PIC Vietnam |
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 |
|
Ðiều Chỉnh | Xếp Bài |
03-09-2008, 10:44 PM | #16 |
Đệ tử 4 túi
Tham gia ngày: Dec 2006
Bài gửi: 79
: |
Em đang thử với portA, em dùng 1 đoạn code sau để kiểu tra xem chân RA0 đã thành 1 chân I/O chưa.
Code:
#include <16F877a.h> #include <def_877a.h> #fuses NOWDT,PUT,XT,NOPROTECT, NOLVP #use delay(clock=4000000) #use fast_io(a) main() { ADCON1 = 0x06; TRISA = 0x00; While(1); { output_a(1); delay_ms(1000); output_a(0); } } Các bác xem giúp em với! thay đổi nội dung bởi: tmtm, 04-09-2008 lúc 08:19 AM. |
03-09-2008, 11:06 PM | #17 |
Trưởng lão PIC bang
|
Sau output_a(0) bạn cần delay một khoảng thời gian thì mới thấy nó bị tắt (thêm vào delay_ms(1000) chẳng hạ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 |
04-09-2008, 01:56 AM | #18 | |||
Đệ tử 3 túi
Tham gia ngày: Jul 2008
Bài gửi: 58
: |
uh! thì tôi cũng dùng CCS C mà!
Trích:
đơn giản thế này nhe! Code:
void send(unsigned char data) { portb0=0;//nối portb0 với chân clock và cho reset về mức 0 portb1=0x01&data;//chân portb1 nối vào một chân data. vậy giá trị đầu ra là một bit //đầu tiên ở mức cao hay thấp tùy vào biến data portb0=1;//kích chân clock lên mức cao delay_us(10); portb0=0;//nối portb0 với chân clock và cho reset về mức 0 portb1=0x02&data;//chân portb1 nối vào một chân data. vậy giá trị đầu ra là một bit //thứ hai ở mức cao hay thấp tùy vào biến data portb0=1;//kích chân clock lên mức cao //.......... cứ tiếp tục cho đến đầu ra số 7 (QH) } void main() { //rồi vào chương trình chính thì bạn chỉ viêc gọi thủ tục ra với mong muốn đầu ra //nào được set lên cao đầu ra nào ở mức thấp. //giả sử mình muốn đầu ra QA và QB là cao còn lại là thấp thì gọi ra send(0x03); //như vậy là QA và QB mức cao. //tương tụ với các đầu ra khác. } Trích:
#byte porte =0x09 #byte trise=0x89; khi vào chương trình chính thì bạn chỉ cần khai báo porte là cổng I/O trise=0x00;//cổng ra chúc bạn thành công. code của bạn được sửa và tôi thêm doạn porte vào cho bạn như sau: Trích:
"tháng ngày dong duổi cuộc đời nhớ người cố hữu hẹn ngày tái ngộ" thay đổi nội dung bởi: 0509592, 04-09-2008 lúc 01:52 PM. |
|||
04-09-2008, 08:17 AM | #19 |
Đệ tử 4 túi
Tham gia ngày: Dec 2006
Bài gửi: 79
: |
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?
|
04-09-2008, 10:24 AM | #20 | |
Đệ tử 4 túi
Tham gia ngày: Aug 2008
Bài gửi: 89
: |
Trích:
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(); }
__________________
Quang báo RG/RGB 6/8/12/16 bits màu Phone No: 0905.034.086 Email: lmquyen@gmail.com |
|
04-09-2008, 01:50 PM | #21 | |
Đệ tử 3 túi
Tham gia ngày: Jul 2008
Bài gửi: 58
: |
Trích:
đây là lệnh gọi chương trình con void send(unsigned char data) đã viết ở trên bạn nhìn vào hàm send ở trên thì thấy nếu gọi send(0x03); thì data =0x03 // portb0=0;//nối portb0 với chân clock và cho reset về mức 0 portb1=0x01&data;//chân portb1 nối vào một chân data. vậy giá trị đầu ra là một bit //đầu tiên ở mức cao hay thấp tùy vào biến data portb0=1;//kích chân clock lên mức cao portb0=0;//nối portb0 với chân clock và cho reset về mức 0 portb1=0x02&data;//chân portb1 nối vào một chân data. vậy giá trị đầu ra là một bit //đầu tiên ở mức cao hay thấp tùy vào biến data portb0=1;//kích chân clock lên mức cao // thì ở đây sẽ có hai giá trị được tính đó là portb1=0x01&0x03; ta được 0x01; QA mức cao. và portb1=0x02&0x03; ta được 0x02//QB=1; mức cao. tương tự nếu bạn làm cho các đầu ra QAN ; QGN khác! còn khi bạn sử dụng 2 chân data của một IC và dùng hai IC thì cũng làm tương tự. nếu bạn nối vào 2 chân RB2 & RB3 thì đầu ra là kết quả của phép and giữa RB2 và RB3, bạn cũng làm tương tự như trên . chúc bạn thàng công. ------------**^^o0o^^**------------- "tháng ngày dong duổi cuộc đời nhớ người cố hữu hẹn ngày tái ngộ" |
|
27-09-2008, 11:09 AM | #22 |
Đệ tử 1 túi
Tham gia ngày: Sep 2008
Bài gửi: 15
: |
em cũng muốn tìm hiểu thêm xem thế nào các anh cứ chỉ giáo đi rồi em học hỏi
|
27-09-2008, 11:15 AM | #23 |
Đệ tử 1 túi
Tham gia ngày: Sep 2008
Bài gửi: 15
: |
thử xem nào
|
|
|
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 |