Ðề tài: Mach den trang tri
View Single Post
Old 04-09-2008, 01:56 AM   #18
0509592
Đệ 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:
nguyên văn bởi: tmtm
ví dụ, ta muốn tất cả các đầu ra ở mức cao thì ta phải gửi tới A2 dữ liệu là 0x07 phải ko ah? Vấn đề là chỉ nối 1 chân vi điều khiển tới A2 thì bạn sẽ làm thế nào để gửi 0x07 tới được? Bạn có thể giúp mình chỗ này được chứ?
bạn muốn làm được điều này thì bạn phải viết một thủ tục gửi từng bit dữ liệu cho ic ghi dị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.
}
như vậy bạn có thể điều khiển đầu ra của thanh ghi dịch theo ý muốn.

Trích:
nguyên văn bởi: tmtm
Vấn đề là khai báo như thế nào? Ở trên thì bác Nam đã chỉ ra cách làm, mình hay dùng CCSC, mình cũng chưa kịp thử. Bạn làm như thế nào với vấn đề này bằng CCSC?
thì bạn định nghĩa porte như sau:
#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:
#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;
trise=0x00;
While(1);
{
output_a(1);
delay_ms(1000);
output_a(0);
delay_ms(1000);
output_port_e(0x07);//cả porte cùng sáng
delay_ms(1000);
output_port_e(0x00);//cả porte cùng tắt
delay_ms(1000);//nếu bạn muốn dùng từng bit một thì định nghĩa như bạn đã làm
//cho porta.

}
}
-------------**^^o0o^^**-------------
"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.
0509592 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn