![]() |
|
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 |
|
|
#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. |
|
|
|
|
|
#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 |
|
|
|
|
|
#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. |
|||
|
|
|
|
|
#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?
|
|
|
|
|
|
#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 |
|
|
|
|
|
|
#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ộ" |
|
|
|
|
|
|
#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
|
|
|
|
|
|
#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 |