PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Lỗi lập trình ngôn ngữ cấp cao (http://www.picvietnam.com/forum/forumdisplay.php?f=65)
-   -   Khó hiểu thật!!! Các bác giúp em với (http://www.picvietnam.com/forum/showthread.php?t=4674)

Em_ku 30-07-2009 06:20 PM

Khó hiểu thật!!! Các bác giúp em với
 
Em viết đoạn code như sau. Theo em nghĩ và cách viết thì chân RA4 phải được xuất ra 5V, chân RẠ cũng xuất ra 5V. Nhưng trong chương trình proteus thì nó xuất RA4=0V còn RA5=5V. Sao lạ vậy?? Hay có lỗi gì khi dịch sang file hex
code:
Code:

#include <16f877a.h>
#use delay(clock=4000000)
#byte portb=0x06
#byte trisb=0x86
#byte porta=0x05
//#use fast_IO(a)
#bit RA4=porta.4
#bit RA5=porta.5

main ()
{
set_tris_a(0b11001111);
while (1)
{
RA4=1;
RA5=1;
portb=0xF9;
delay_ms(10);
}
}


bien_van_khat 30-07-2009 08:54 PM

Đã trả lời ở đây. Diễn đàn đã hoạt động khá lâu, do đó hầu hết các vấn đề thường gặp đều đã được hỏi, các bạn nên tận dụng công cụ search.

http://www.picvietnam.com/forum/show...drain#post3971

hoc_picpicpic 30-07-2009 11:18 PM

chân RA4 là cực máng hở , nên muốn có 5V thì phải mắc thêm điện trở (4.7K)kéo lên
+5V

Em_ku 02-08-2009 03:16 AM

Muốn có 5V thì phải mắc thêm điện trở 4k7 kéo lên là sao ạ?? vì trong mạch dùng chương trình mô phỏng proteus của em đã có điện trở 4k7 rồi ạ mà nó vẫn kô lên đc 5V.
Bác giải thích rõ hơn giúp em vơi. Em cũng đọc mấy cái link bác trên đưa nhưng cũng kô hiểu thế nào là cực máng hở cũng như cái chân RA4.
Bên cạnh đây bác xem giúp em cái đoạn chương trình này với. Đề là xuất ra 4leg 7 đoạn với các số từ 1 đến 9999.
Theo em nghĩ là đúng rồi mà sao vẫn kô ra được như ý
code:
Code:

#include <C:\Program Files\PICC\Devices\16f877a.h>
#fuses HS,NOWDT
#use delay(clock=4000000)
#byte trisb=0x86 
#byte portb=0x06
#byte trisd=0x88 
#byte portd=0x08
#use fast_IO(b)
#use fast_IO(d)
#bit RD0=portd.0
#bit RD1=portd.1
#bit RD2=portd.2
#bit RD3=portd.3
int A[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void display (int so)
{
int i,hngan,htram,hchuc,hdonvi,du1,du2;
hngan=so/1000;
du1=so%1000;
htram=du1/100;
du2=du1%100;
hchuc=du2/10;
hdonvi=du2%10;
for (i=0;i<25;i++)
 {
 RD0=0; RD1=1; RD2=1; RD3=1;
 portb=A[hngan]; delay_ms(10);
RD0=1; RD1=0; RD2=1; RD3=1;
 portb=A[hchuc]; delay_ms(10);
 RD0=1; RD1=1; RD2=0; RD3=1;
 portb=A[hchuc]; delay_ms(10);
 RD0=1; RD1=1; RD2=1; RD3=0;
 portb=A[hdonvi]; delay_ms(10);
 }
}
void main ()
{
int i;
set_tris_d(0x00);
set_tris_b(0x00);
while (1)
{
for (i=0;i<=9999;i++)
 {
 display (i);
 }
}
}


namqn 02-08-2009 10:22 AM

Trích:

Nguyên văn bởi Em_ku (Post 28282)
Muốn có 5V thì phải mắc thêm điện trở 4k7 kéo lên là sao ạ?? vì trong mạch dùng chương trình mô phỏng proteus của em đã có điện trở 4k7 rồi ạ mà nó vẫn kô lên đc 5V.
Bác giải thích rõ hơn giúp em vơi. Em cũng đọc mấy cái link bác trên đưa nhưng cũng kô hiểu thế nào là cực máng hở cũng như cái chân RA4.
Bên cạnh đây bác xem giúp em cái đoạn chương trình này với. Đề là xuất ra 4leg 7 đoạn với các số từ 1 đến 9999.
Theo em nghĩ là đúng rồi mà sao vẫn kô ra được như ý
code:
...

Bạn hãy đọc tài liệu hướng dẫn của CCS C, mục "Basic and Special Types" (trang 37, dùng con số phía dưới trang). Mục đó có nêu rõ kiểu int của C chuẩn sẽ được CCS C hiểu là int8, tức là một kiểu có kích thước 8-bit, chỉ biểu diễn được các giá trị từ 0 đến 255. Do đó, code của bạn sẽ có nhiều chỗ chạy không như ý muốn.

Link để tải tài liệu hướng dẫn dưới đây, trong trường hợp bạn chưa biết:
http://www.ccsinfo.com/downloads/ccs_c_manual.pdf

Thân,


Múi giờ GMT. Hiện tại là 12:46 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam