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ộ"