Nếu đây là lần đầu tiên đến với Điện Tử Việt Nam, bạn có thể đọc phần Hỏi đáp bằng cách nhấn vào liên kết. Có thể bạn cần đăng kí trước khi có thể gửi bài . Để bắt đầu xem bài viết, chọn diễn đàn bạn muốn thăm dưới đây.
Thông báo
Collapse
No announcement yet.
HƯỚNG DẪN LẬP TRÌNH KEIL C CHO 8051-[Chỉ dành post bài hướng dẫn]
Mình mới viết đoạn code cho viêch giao tiếp máy tính để hiển thị lên led ma trận. Mình dùng Hyper Teminal để gởi dữ liệu từ PC sang led. Chương trinh của mình không báo lổi nhưng khi gởi 1 kí tự nó kô hiển thị được , nhờ các bạn xem giúp đoạn code có phải do thuật toán sai không, hay vấn đề khác .
CODE :
#include <REGX52.H> // Su dung 89c52 quet hang
#define SHIFT P2_2
#define LATCH P2_1
#define DATA P2_0
unsigned int byte_cot,che_bit,hang,chay,cot,toc_do;
unsigned char chay_gia_tri_bang,ki_tu, uart_data;
void delay(unsigned char time);
void dich_bit();
void hien_thi();
void giai_ma();
void khoi_tao();
void receive_data_pc ();
unsigned char code ma_che_bit[]=
{0xFF,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsigned char code font[]={
0xFF,0x8F,0x77,0x77,0x07,0x77,0x77,0x77,//65(A)
0xFF,0x0F,0x77,0x77,0x0F,0x77,0x77,0x0F,//66(B)
0xFF,0x8F,0x77,0x7F,0x7F,0x7F,0x77,0x8F//;67(C)
};
void delay(unsigned char time )
{
unsigned char i,j;
for(i=0;i<time;i++)
for(j=0;j<121;j++);
}
void khoi_tao()
{
SCON =0X50;// UART CHE DO 1 (8 BIT), REN 1
TMOD=0X20; // TIMER 1 MODE 2, TIMER 0 MODE 1
TH1=0XFD; // BAUD 9600
TH1=0XFD; // BAUD 9600 TA: 11.0592
TR1=1; // KHOI DONG TIMER 1
IE=0X90;// CHO PHEP NGAT TOAN CUC VA NGAT NOI TIEP DE XU LY DU LIEU DEN
TI=0;
RI=0;
}
void receive_data_pc () interrupt 4
{
if(RI==1)
{
RI=0; // Xoa RI de xac dinh du lieu co duoc truyen tu PC xuong ?
uart_data =SBUF; // Khi Goi du lieu tu PC --> COM thi lay tu SBUF
// Dua du lieu vao chan DATA cua IC 595
}
}
void chon_hang(unsigned char hang)
{
switch(hang)
{
case 1:
{
P0=0x7F;// HANG 1
break;
}
case 2:
{
P0=0xBF;//hang 2
break;
}
case 3:
{
P0=0xDF;//hang3
break;
}
case 4:
{
P0=0XEF;//hang 4
break;
}
case 5 :
{
P0=0xF7;// HANG 5
break;
}
case 6:
{
P0=0xFB;// hang 6
break;
}
case 7:
{
P0=0xFD;//hang 7
break;
}
case 8 :
{
P0=0xFE;// hang 8
break;
}
Mình xin hỏi 2 vấn đề như sau:
1. Nhúng asm trong keil C như thế nào? Mình cũng dùng #pragma asm và #pragma endasm nhưng keil C báo ko được, (cứ báo #pragma asm/end asm not allowed in include files), mình đã vào option file kích chọn 2 ô như hd rồi. Các bạn có thể hướng dẫn cụ thể cho mình ko?
2. Mình muốn viết 1 hàm để chuyển giá trị BCD sang giá trị BIN, mình viết như sau, nhưng không chạy, bạn nào có thể hướng dẫn mình với (cụ thể là lấy gt từ ds1307 chuyen thành thập phân):
void BcdToBin(unsigned char sobcd)
{
unsigned char BcdChuc,BcdDonvi;
BcdChuc=sobcd * 0xF0; //giữ 4 bit cao
BcdChuc=BcdChuc>>4; //đảo 4 bit cao, thấp. Như lệnh swap trong asm ấy
BcdDonvi=sobcd * 0x0F;
sobcd=(BcdChuc * 16 + BcdDonvi); //chuyển từ bcd sang thập phân
}
Nếu viết bằng asm thì ko có vấn đề nhưng chuyển qua C thì mình còn lúng túng quá!
Chào cả nhà!
Mình là thành viên mới! Là con gà mới tập tẹo VXL.
Mình đang gặp khó khăn khi viết 1 đoạn chương trình điều khiển đèn LED. Khi viết Xong chương trình và kết thúc bằng lệnh Ret nhưng không hiểu tại sao chương trình cứ lặp mãi mà không chụ dừng.
Bác nào co kinh nghiệm chỉ cho em vài đường với!
cảm ơn nhiều nhé!
chào các pro.
em học khoa điện nhưng lại nhận đồ án về điện tử,
nhưng em gặp khó khăn trong việc đếm xung từ encoder và điều khiển tốc độ đc DC bằng PWM.
bác nào giúp em với.
thanks
Chào cả nhà!
Mình là thành viên mới! Là con gà mới tập tẹo VXL.
Mình đang gặp khó khăn khi viết 1 đoạn chương trình điều khiển đèn LED. Khi viết Xong chương trình và kết thúc bằng lệnh Ret nhưng không hiểu tại sao chương trình cứ lặp mãi mà không chụ dừng.
Bác nào co kinh nghiệm chỉ cho em vài đường với!
cảm ơn nhiều nhé!
Mình đang tập tọe VDK 8051 sử dụng trình dịch keil C. Các bước thao tác với Keil như thế nào mình không biết cụ thể.
Đầu tiên vào File -->new --> sau đó lập trình nhưng khi cho dịch chạy thử thì nó cứ chạy CT nguồn ee gì đó. xin hãy chỉ giúp.
huhu em post bài lên mà các bác chẳng chịu đọc gì cả, có chưong trình 8051 đơn giản và gọn nhẹ, giao diện tiếng việt thì các bác không chịu xem! học cái anh Keil-C này có phải rắc rối hơn chưa, rõ khổ!
Thui tạm biệt
huhu em post bài lên mà các bác chẳng chịu đọc gì cả, có chưong trình 8051 đơn giản và gọn nhẹ, giao diện tiếng việt thì các bác không chịu xem! học cái anh Keil-C này có phải rắc rối hơn chưa, rõ khổ!
Thui tạm biệt
Muốn nó biên dịch cái gì thì phải đặt project (hoặc file) đo làm project (file) đượcc active (đang sử dụng). tốt nhất đóng tất cả lại mở một file duy nhất cần biên dịch. Cái này chỉ la sử dụng chương trình đọc hướng dẫn của nó.
Chào cả nhà!
Mình là thành viên mới! Là con gà mới tập tẹo VXL.
Mình đang gặp khó khăn khi viết 1 đoạn chương trình điều khiển đèn LED. Khi viết Xong chương trình và kết thúc bằng lệnh Ret nhưng không hiểu tại sao chương trình cứ lặp mãi mà không chụ dừng.
Bác nào co kinh nghiệm chỉ cho em vài đường với!
cảm ơn nhiều nhé!
Nếu muốn hỏi gỡ rối chương trình phải post cả chương trình nên mới co thể hiểu được
huhu em post bài lên mà các bác chẳng chịu đọc gì cả, có chưong trình 8051 đơn giản và gọn nhẹ, giao diện tiếng việt thì các bác không chịu xem! học cái anh Keil-C này có phải rắc rối hơn chưa, rõ khổ!
Thui tạm biệt
À, sản phẩm họ thiết kế ra, họ yêu cầu mình chứng minh là sau chỉnh sửa thì 1 là gỡ jump cắm lại không hư mạch, 2 là gỡ jump thì 220Vdc vẫn dùng được led áp thấp 20V mà không hư led như mình báo, nên họ hiểu rõ mà....
Bài học kiểu trực tuyến dù là loại đơn giản bậc nhất cũng vẫn cần chú tâm. Chỉ bật tai nghe lên thì không có loại nào thấm nổi đâu. Cách hay hơn, dễ hơn là kiếm phim tiếng Anh nào đó xem, ban đầu bật phụ đề tiếng Việt, nghe và...
Ha ha !
Thay đổi cách nghĩ thì sẽ nghĩ ra.
.
.
.
Một thứ cần kiểm soát dòng + nhiệt + công suất tiêu tán. Nhưng lại dùng tư duy ổn áp. Làm sao mà giải quyết được.
Nó là mạch ổn dòng.
Vì thế các anh nước lạ không thèm quan tâm là phải....
Vì cứ phải chỉnh sửa cho mỗi dải điện áp, quên chỉnh thì hư chíp phải bảo hành nên em thấy bất tiện, mới cần cái mạch 1 dải áp cao dùng cho tất cả loại đèn đó bác!...
Mình thỉnh thoảng cũng làm việc với người nước ngoài nói tiếng Anh thì toàn ghép nhặt từ, cộng với quơ tay quơ chân để diễn tả, hix. Nỗi khổ là không biết cách để mô tả sự việc. Tôi muốn tìm các bài giảng tiếng anh nào phù hợp...
Trước khi có đủ thực lực thì chỉ làm vì mình thôi đừng nghĩ đến chuyện khác cái mạch toàn dãi tiện sử dụng nhưng tỷ lệ hư hỏng phải bảo hành cũng cao hơn ,lợi bất cập hại .
Comment