Dành cho người mới tìm hiểu 8051
Collapse
X
-
em mới bập bẹ học lập trình viết ra cái này cho con robot mini ở trên nhưng báo lỗi :
//chuong trinh di thang theo vach
#include <REGX51.H>
#include<intrins.h>
#define EN12 P1^0;
#define EN34 P1^1;
#define IN1 P1^2;
#define IN2 P1^3;
#define IN3 P1^4;
#define IN4 P1^5;
#define S_phai P3^3;
#define S_trai P3^0;
#define S_truoc P3^2;
#define S_sau P3^1;
#define nen 0;
#define vach 1;
void kiem_tra_vach(void)
{
if ((S_phai&S_trai=nen)&(S_truoc&S_sau=vach)) {di_thang();} // báo lỗi ở dòng này
else if ((S_phai=vach)&(S_trai=nen)) {re_phai();}
else if ((S_phai=nen)&(S_trai=vach)) {re_trai();}
else if ((S_phai=S_trai=S_truoc=S_sau=nen)) {stop();};
}
void di_thang(void)
{EN12=1;EN34=1;IN1=1;IN2=0;IN3=1;IN4=0; }
void re_phai(void)
{EN12=1;IN1=1;IN2=0;EN34=0;}
void re_trai(void)
{EN12==0;EN34==1;IN3==1;IN4==0;}
void stop(void)
{EN12=0;EN34=0;}
void main(void)
{
while (1)
{
kiem_tra_vach;
}
}
nó báo:
DIEU_KHIEN_DONG_CO_CON_MINI.C(17): error C141: syntax error near ';'
DIEU_KHIEN_DONG_CO_CON_MINI.C(17): error C141: syntax error near ';'
DIEU_KHIEN_DONG_CO_CON_MINI.C(17): error C189: '&' on bit/sfr illegal
DIEU_KHIEN_DONG_CO_CON_MINI.C(17): error C141: syntax error near '='
DIEU_KHIEN_DONG_CO_CON_MINI.C(17): error C141: syntax error near ')'
dieu_khien_dong_co_con_mini.c - 5 Error(s), 0 Warning(s).
vậy phải sửa thế nào các bác ?Cung cấp Oscilocope , Inverter , Switching , DC power supply , AC millivolt meter ....
Comment
-
lien lac voi ban qua email nao ??? cho minh nick yahoo cua cau nhe !Nguyên văn bởi quynhĐây là quyển sách khá hay về lạp trinh C cho 8051.
Tui up mãi lên đây ko được.Bạn nào cần thì liên hệ với mình nhé.Quyển này viết bằng tiếng anh, khá cơ bản.Dung lượng gần 5MB
Comment
-
các anh chị có thể giới thiệu cho em vài cuốn sách (tiếng việt càng tốt) để học lập trình vi điều khiển bằng ngôn ngữ C không?
cho em hỏi luôn: có phần mềm nào cho phép mình test chuơng trình mình viết trên 8051 không?không lẽ mỗi lần viết 1 chuơng trình lại phải nạp vào VDK để thử ạ?
cho em cảm ơn chị Quỳnh (vì không biết tuổi nên cho phép em gọi như vậy), những bài viết của chị rất bổ ích
Comment
-
Những câu hỏi của bạn đã thảo luận nhiều trên diễn đàn rồiNguyên văn bởi haquangcác anh chị có thể giới thiệu cho em vài cuốn sách (tiếng việt càng tốt) để học lập trình vi điều khiển bằng ngôn ngữ C không?
cho em hỏi luôn: có phần mềm nào cho phép mình test chuơng trình mình viết trên 8051 không?không lẽ mỗi lần viết 1 chuơng trình lại phải nạp vào VDK để thử ạ?
cho em cảm ơn chị Quỳnh (vì không biết tuổi nên cho phép em gọi như vậy), những bài viết của chị rất bổ ích
Sách: Search với từ khóa "Sách mới TVO hay Tống Văn On"
Phần mềm: Search "Giả lập 8051"
Comment
-
Chao` moi nghuoi`!
Theo mình thì viết gì mà chả được ,viết bằng C hay hơn chứ (mình nghĩ là vậy)học hợp ngữ có vẻ phức tạp trong C có nhiều hàm hay đỡ cho mình !Nguyên văn bởi hicdtheo em thi nhung nguoi moi hoc len viet bang hop ngu thi hay hon
vi qua do minh lam luon ca phan cung cua vdkKhó nhất trên đời làm trang nam tử
Ý chí vững vàng mà tình cảm lại mênh mang
Comment
-
Học cả 2 là tốt nhất!!
Viết Asm nhiều khi còn đơn giản hơn C!
Nhưng C thi` bát buộc phải học vì còn phải dùng nhiều việc khác, ít nhất ở trường nó dạy kekeke!!In Metal ... all trust !!
THRASH TILL DIE !!!
Comment
-
vẫn báo lỗi bác ạ! hic hic
//chuong trinh di thang theo vach
#include <REGX51.H>
#include<intrins.h>
#define EN12 P1_0;
#define EN34 P1_1;
#define IN1 P1_2;
#define IN2 P1_3;
#define IN3 P1_4;
#define IN4 P1_5;
#define S_phai P3_3;
#define S_trai P3_0;
#define S_truoc P3_2;
#define S_sau P3_1;
#define nen 0;
#define vach 1;
void kiem_tra_vach(void)
{
if ((S_phai==S_trai==nen)) {dithang();} // vẫn cái dòng quái quỷ này!
else if (S_phai==vach&&S_trai==nen) {re_phai();}
else if (S_phai==nen&&S_trai==vach) {re_trai();}
else if (S_truoc==S_sau==nen) {stop();};
}
void dithang(void)
{EN12=1;EN34=1;IN1=1;IN2=0;IN3=1;IN4=0; }
void re_phai(void)
{EN12=1;IN1=1;IN2=0;EN34=0;}
void re_trai(void)
{EN12=0;EN34=1;IN3=1;IN4=0;}
void stop(void)
{EN12=0;EN34=0;}
void main(void)
{
while (1)
{
kiem_tra_vach;
}
}
báo lỗi :
DIEU_KHIEN_DONG_CO_CON_MINI.C(21): error C141: syntax error near ';'
DIEU_KHIEN_DONG_CO_CON_MINI.C(21): error C141: syntax error near ')'
dieu_khien_dong_co_con_mini.c - 2 Error(s), 0 Warning(s).Cung cấp Oscilocope , Inverter , Switching , DC power supply , AC millivolt meter ....
Comment
-
Bỏ dấu ; ở dòng quỷ đó đi xem thử!Nguyên văn bởi hiodongvẫn báo lỗi bác ạ! hic hic
//chuong trinh di thang theo vach
#include <REGX51.H>
#include<intrins.h>
#define EN12 P1_0;
#define EN34 P1_1;
#define IN1 P1_2;
#define IN2 P1_3;
#define IN3 P1_4;
#define IN4 P1_5;
#define S_phai P3_3;
#define S_trai P3_0;
#define S_truoc P3_2;
#define S_sau P3_1;
#define nen 0;
#define vach 1;
void kiem_tra_vach(void)
{
if ((S_phai==S_trai==nen)) {dithang();} // vẫn cái dòng quái quỷ này!
else if (S_phai==vach&&S_trai==nen) {re_phai();}
else if (S_phai==nen&&S_trai==vach) {re_trai();}
else if (S_truoc==S_sau==nen) {stop();};
}
void dithang(void)
{EN12=1;EN34=1;IN1=1;IN2=0;IN3=1;IN4=0; }
void re_phai(void)
{EN12=1;IN1=1;IN2=0;EN34=0;}
void re_trai(void)
{EN12=0;EN34=1;IN3=1;IN4=0;}
void stop(void)
{EN12=0;EN34=0;}
void main(void)
{
while (1)
{
kiem_tra_vach;
}
}
báo lỗi :
DIEU_KHIEN_DONG_CO_CON_MINI.C(21): error C141: syntax error near ';'
DIEU_KHIEN_DONG_CO_CON_MINI.C(21): error C141: syntax error near ')'
dieu_khien_dong_co_con_mini.c - 2 Error(s), 0 Warning(s).
Comment
-
Hi hiodong,
Tôi nghĩ bạn chịu khó tí là chương trình chạy ngon lành thôi.
Một số góp ý cho bạn thế này:
1.Một hàm, cho dễ coi, bạn nên viết theo block rõ ràng:
[ret type] func_name(param1,...)
{
//content here
}
thay vì
[ret type] func_name(param1,...)
{...}
hoặc
[ret type] func_name(param1,...){...}
2.Các phép gán và so sánh nên cách ra một space, theo từng ngoặc() rõ ràng:
a = 5;
tốt hơn là:
a=5;
hoặc :
if((a == 5) && (b == 7))
tốt hơn so với
if(a == 5&&b==7)
3.Hàm gọi thường nằm phía dưới hàm được gọi, hoặc phải khai báo prototype cho hàm được gọi trước.
Như vậy bạn hãy sửa lại chương trình:
1.Đặt các hàm dithang()... lên trên hay khai báo prototype
2.Sửa lại
if((S_phai == S_trai) && (S_trai == nen))
{
dithang(); // chẳng có gì quái quỷ cả!
}
else
{
if(...)
{
}
else
{
}
}
3.
while (1)
{
kiem_tra_vach();
}
thay vì (gọi hàm mà không có() ):
while (1)
{
kiem_tra_vach;
}
Thân !
Comment
Bài viết mới nhất
Collapse
-
-
-
bởi bqvietĐám UPS cửa cuốn đời cổ vẫn chạy 1 biến áp sắt từ vừa để hạ áp điện lưới nạp bình điện, vừa để kích áp bình điện thành sóng vuông đầu ra đấy thôi. Kiểu tiết kiệm này đã có từ mấy chục năm nay. Sơ đồ đại loại như link
https://www.homemade-circuits.com/si...rchargerchang/...-
Channel: Nguồn!
06-09-2026, 16:49 -
-
bởi dinhthuong92Không biết nó thiết kế kiểu gì mà dùng chung được cuộn cảm L cho cả mạch Buck hạ áp để sạc pin và Boost nâng áp cho Led. Muốn vẽ mạch để xem mà nhiều linh kiện quá, e không kham nổi!
Bác nào có sơ đồ xin up lên cho mọi người tham khảo nhé!...-
Channel: Nguồn!
04-09-2026, 11:09 -

Comment