Các bác côh em hỏi 1 câu nhé.trong dòng VDK có con VDK nào tích hợp sẵn ADC và PWM không ạ?em chỉ biết phải mắc Bộ ADC và PWm ở ngoài với con AT89c51 .mong các bác chỉ bảo
Thông báo
Collapse
No announcement yet.
Cổng nối tiếp UART, các ngắt ngoài của 8051
Collapse
X
-
Đó là họ VĐK AVR và PIC, với 2 loại này thì chỉ cần lập trình bằng phần mềm chứ ko cần phải ghép nối phần cứng nhứ dòng 8051.Nguyên văn bởi congdatquan Xem bài viếtCác bác côh em hỏi 1 câu nhé.trong dòng VDK có con VDK nào tích hợp sẵn ADC và PWM không ạ?em chỉ biết phải mắc Bộ ADC và PWm ở ngoài với con AT89c51 .mong các bác chỉ bảo
Comment
-
Mình giao tiếp AT89C2051 với PC nhưng gặp 1 rắc rối, mình dùng timer 0 để tạo PWM điều khiển đ/cơ, ngắt nối tiếp vì mặc định ưu tiên sau ngắt định thời 0 cho nên nó tịt, ko giao tiếp đc với PC, mình bỏ đoạn ngắt timer 0 thì lại nhận đc.Mình đã thiết lập lại thứ tự ưu tiên nhưng ko đc.Các bác cho em hỏi thêm, bây giờ mình muốn gửi giá trị 1000(giá trị thạp phân thực sự) từ PC xuống VDK và muốn giá trị này gán cho biến m thì phải chuyển đổi như thế nào(mình dùng VB), các bác việt cụ thể tí nhé.Em rất mong bác NgoHaiBac ra tay cứu giúp.Thank!
Add: 97 Quán Nam - Lê Chân - Hải Phòng.
Tel: 031 518648 Phone: 0904 283 505
Comment
-
đây là code của mình.Mời các bác xem và đưa ra ý kiến.Tại sao nó không ưu tiên ngắt nối tiếp mặc dù đã ưu tiện lại ngắt??
#include <regx51.h>
unsigned char c=0,d=0,e=0,f=0,g=0,h=0,i=0;
unsigned int a=0,b=0;
unsigned char du_lieu[4];
/*void delay_ms(int time)//khong dung delay nua
{
while(time--)//ham delay
{
unsigned char j=122;
while(j--);
}
}*/
void init_ngat_noi_tiep()//khoi tao ban dau cho ngat
{
EA=1;//cho phep ngat toan cuc
ES=1;//cho phep ngat noi tiep
IP=0x10;//uu tien ngat noi tiep
//----------------thiet lap tna so bus---------------------
TMOD=0x20;//chon timer 1 che do 8 bit tu lap lai
TH1=0xFD;//chon toc do bauds la 9600
SCON=0x50;//chon khung du lieu 8 bit
TR1=1;//khoi dong timer 1
}
void init_PWM()//khoi tao ban dau cho ngat
{
EA=1;//cho phep ngat toan cuc
ET0=1;//cho phep ngat dinh thoi
IP=0x10;//uu tien ngat noi tiep
//----------------thiet lap tna so bus---------------------
TMOD=0x01;//chon timer 0 che do 16 bit
TH0=0x03;//chon thoi gian ngat ~1 ms
TH0=0xf8;
TR0=1;//khoi dong timer 0
}
//---------------ham xu ly ngat noi tiep-------------------
void ngat_noi_tiep(void) interrupt 4//Moi nguoi dung quan tam doan code phuc vu ngat noi tiep nay
{
if(RI==1)//kiem tra co nhan RI
{
a=SBUF;//dang ma acsii
RI=0;
b=a-48;//lay gia tri decimal
du_lieu[i]=b;
i++;
c++;
}
if(c==4)
{
i=0;
c=0;
d=1000*du_lieu[0]+100*du_lieu[1]+10*du_lieu[2]+du_lieu[3];
while(e<4)
{
SBUF=du_lieu[f]+48;
while(TI==0){}
if(TI==1)
{
TI=0;
}
f++;
e++;
}
e=0;
f=0;
}
}
void ngat_dinh_thoi_0(void) interrupt 1
{
TR0=0;
TH0=0x03;//chon thoi gian ngat ~1 ms
TH0=0xf8;
TR0=1;//khoi dong timer 0
g++;//bien nay de so sanh tao ra to do nhay led
}
//---------chuong trinh chinh--------------------------------
void main()
{
init_ngat_noi_tiep();
init_PWM();
//---------tao xung tren P3.7--------------------------------
while(1)
{
//nhay led o day
if(g<=100)
{
P1_0=1;//setb P1_0
}
else if(g>d && g<=2*d)
{
P1_0=0;
}
else
g=0;
}
}
Add: 97 Quán Nam - Lê Chân - Hải Phòng.
Tel: 031 518648 Phone: 0904 283 505
Comment
-
Cả truyền cả nhận cơ à ?
Tớ sửa lại phần code cho dễ nhìn, và 1 số cái khác, cậu xem thử có được ko. Hy vong nó chạy, nó mà ko chạy thì tớ chạy
Tớ chuẩn bị chạy đây!PHP Code:#include <at892051.h>
unsigned char c=0,d=0,e=0,f=0,g=0,h=0,i=0;
unsigned int a=0,b=0;
unsigned char du_lieu[4];
/*void delay_ms(int time)//khong dung delay nua
{
while(time--)//ham delay
{
unsigned char j=122;
while(j--);
}
}*/
//---------------ham xu ly ngat noi tiep-------------------
void ngat_noi_tiep(void) interrupt 4//Moi nguoi dung quan tam doan code phuc vu ngat noi tiep nay
{
if(RI)//kiem tra co nhan RI [if(RI) là đủ rồi, ko cần phải = 1, dài dòng :D]
{
a=SBUF;//dang ma acsii
b=a-48;//lay gia tri decimal
du_lieu[i]=b;
i++;
c++;
RI=0; // Cái này để ở cuối xem sao
}
if(c==4)
{
i=0;
c=0;
d=1000*du_lieu[0]+100*du_lieu[1]+10*du_lieu[2]+du_lieu[3];
while(e<4)
{
SBUF=du_lieu[f]+48;
while(TI==0){}
if(TI==1) TI=0;
f++;
e++;
}
e=0;
f=0;
}
}
void ngat_dinh_thoi_0(void) interrupt 1
{
g++;//bien nay de so sanh tao ra to do nhay led
}
//---------chuong trinh chinh--------------------------------
void main()
{
// Cái gì giống nhau thì gộp chung lại, vứt nó vào đây, như thế này:
TMOD = 0x22; //Bem 1 phát 2 em, Timer0 va Timer1 ở chế dộ 2 Autoload
TH0 = 0; // Cho nó đếm với giá trị max :D
TL0 = 0;
SCON = 0x50; // Chế độ nối tiếp 1, 8 bit data, Start, Stop
TH1 = 0xFD; // Baud rate 9600
TF0 = 0; // Xóa cờ tràn cho chắc ăn
ET0 = 1; // Cho phép ngắt Timer0
ES = 1; // Cho phép ngăt nối tiếp
EA = 1; // Cho phép ngắt toàn cục
TR0 = 1;
TR1 = 1;
//---------tao xung tren P3.7--------------------------------
while(1)
{
//nhay led o day
if(g<=100) P1_0=1;//setb P1_0
else if(g>100 && g<=200) P1_0=0;
else g=0;
}
}
Comment
-
việt lại như bác nói chung kô ổn(tuy có 1 số chỗ gọn hơn tớ), vấn đề là khi truyền nối tiếp từ PC xuống thì VDK có nhận đc không?//vì ngắt định thời 0 ưu tiên cao hơn ngắt nối tiếp.Bác không set lại mức ưu tiên ngắt thì chạy sao đây???????????Xin mời các cao thủ ra tay cứu giúp.Last edited by hoangdai; 13-09-2009, 14:04.
Add: 97 Quán Nam - Lê Chân - Hải Phòng.
Tel: 031 518648 Phone: 0904 283 505
Comment
-
Với cái "khung xương" đó tớ lập trình với 89S52 giao tiếp bình thường mà, cho dù có ưu tiên hay không ưu tiên thì "20 năm vẫn chạy tốt"
Phần mềm trên PC tớ lập trình bằng Delphi và cả VB6 đều gửi xuống VĐK OK !
Tớ cũng lười đọc Code nên chẳng biết Code của cậu viết những gì, chỉ chỉnh sửa cái khung thế thôi.
Xem lại Code đi nhé, cả trên PC nữa. Chạy thôi !
Comment
-
ko đc bác ơi-mình cứ bỏ cái ngắt timer 0 đi thì truyền nhận ngon, cứ cho vào là die ngay vì nó tràn nhanh hơn và đc ưu tiên cao hơn.Bó tay rồi-tớ tính phải dùng tới DAC và kết hợp với Ne555 để PWM thôi.Tại vì 89S52 của bạn có thêm cái timer2 nên dễ giải quyết.Tớ chỉ dùng 89C2051 là đủ rồi.
Add: 97 Quán Nam - Lê Chân - Hải Phòng.
Tel: 031 518648 Phone: 0904 283 505
Comment
-
Thực hiện xong ngắt T0 thì nó chạy đến ngắt nối tiếp thôi, debug thử xem sao !Last edited by Multi System; 14-09-2009, 18:39.
Comment
-
sao lại lủng cúng nhỉ.Cái đó là để dùng cho trương hợp bạn truyền nối tiếp mà cờ ngắt chưa đc set (truyền chưa hết 1 byte)thì lặp ở đó.Mình rất cám ơn góp ý của các bạn, bây giờ mình đã đk đc đ/cơ DC qua PC rồi, cũng chỉ cần dùng 1 chú AT89C2051, mình đã sửa lại code cho đúng đắn và gọn hơn.Đúng là tự mày mò lợi hại thật, nhưng trước khi mày mò cũng phải đọc bí kíp cho thuộc đã chứ nhỉ.Chúc các bạn thành công nhé!Nguyên văn bởi zemen Xem bài viết@hoangdai: bạn xem lại cái đoạn while(TI==0){} đi! Thấy nó lủng củng lắm!Last edited by hoangdai; 15-09-2009, 12:22.
Add: 97 Quán Nam - Lê Chân - Hải Phòng.
Tel: 031 518648 Phone: 0904 283 505
Comment
-
Khi xử lý ngắt tốt nhất bạn phải tạo cờ ngắt khi đang thực hiện ngắt nếu không sẽ gặp tình trạng chính ngắt tự đệ quy với chính mình hay ngắt liên quan khi được gọi lại lần nữa. Và việc này sẽ gây ra việc tràn đệm và treo chip.Nguyên văn bởi linhcdtdh2 Xem bài viếtXin hỏi các anh chị về vấn đề ngắt của 8051:
Khi em lập trình bằng ngôn ngữ C, sử dụng hai ngắt liên tiếp nhau trong bảng vector ngắt, nhưng một trong hai chương trình ngắt viết quá dài làm chèn lên vùng nhớ của chương trình ngắt tương ứng vector ngắt kế tiếp. Kết quả là ngắt đó bị mất. Vậy có cách nào dịch chuyển chương trình ngắt sang một vùng nhớ khác giống như lập trình bằng Assembly không?
Nghĩa là ngắt đang thực hiện phải có cờ ngắt (do mình tạo cờ trong RAM) để ngắt được gọi lai trong khi nó đang thực thị sẽ thoát ra ngoài. bên cạnh đó phải xử lý tốt lưu trữ các thanh ghi vào stack.
Comment
Bài viết mới nhất
Collapse
-
bởi lvhnHãng nào tùy thích thôi bác! bây giờ các hãng đều hỗ trợ xem qua máy tính hay điện thoại đều được. Gắn Trước tiên mua về cắm nguồn set ip hết xong hãy lắp lên, cam poe chỉ cần 4 lõi là hoạt động bình thường nên 1 dây kéo cho 2 cam vẫn ok
-
Channel: Tâm tình dân kỹ thuật
hôm nay, 15:49 -
-
Trả lời cho Tìm bạn thân quen cũ.bởi lvhnNhớ không nhầm thì lúc còn đi học có gặp chú 1 lần cf bãi xe Nguyễn Kim, giờ quán cf đó nghỉ bán rồi
-
Channel: Tâm tình dân kỹ thuật
hôm nay, 15:44 -
-
Trả lời cho Thắc mắc pin 21v ?bởi lvhnCon số đấy biểu thị gần đúng thôi, cái đồng hồ đó có đảm bảo chính xác hay không? pin có cục lên 4v4 vẫn bình thường. Cái gì cũng có sai số trong phạm vi không quá lớn thì không ảnh hưởng gì đâu, bàn ngay ngón ngắn ngón dài mà
-
Channel: Điện tử dành cho người mới bắt đầu
hôm nay, 15:32 -
-
Trả lời cho Amply bị rò DC 22 voltbởi lvhnThay mấy con transisto nhỏ đầu vào, thường vi sai lỗi hay bị. Khám tổng quát chân các linh kiện xem có bị rỉ sét nhiều không?
-
Channel: Điện thanh
hôm nay, 15:24 -
-
bởi dinhthuong92Mạch này hiệu suất ra led đạt khoảng 90.7% tại 12V in, 40W out.
-
Channel: Nguồn!
27-07-2026, 10:15 -
-
bởi dinhthuong92Có lẽ nguồn viết bài này chỉ mang tính định tính để nói rằng cần thay đổi tổng trở tải để có Pmax chứ trình bày chưa chi tiết và thấu đáo một cách định lượng. Công thức tổng quát phải có mặt L mới được, và nói là "tổng...
-
Channel: Nguồn!
27-07-2026, 10:09 -
-
Trả lời cho [Chia sẻ] Tổng hợp các công ty AI Việt Nam đang làm gì thật sự — Từ voicebot, computer vision đến AI agentsbởi nguyendinhvanCàng ngày, CNTT càng trở nên lôi thôi , rách việc.
Cái AI và Ge... trên trình duyệt chỉ tổ làm vướng mắt, mất thì gian.
Tôi toàm phải mất cộng tắt nó đi.-
Channel: Xu hướng, nhu cầu và thị trường
25-07-2026, 14:59 -
-
bởi trung30000Em có con amply 12 sò D 718 và e688 , biến áp 15A, 30v 0 30 v, một kênh thì hoạt động bình thường, kênh còn lại nổ bụp bụp, sột sột, đèn tín hiệu nhảy lên vạch max, khoảng 4 đến 5 giây, sau đó đèn tín hiệu trả về mức không, Em thấy như...
-
Channel: Điện thanh
24-07-2026, 13:50 -
-
Trả lời cho Tìm hiểu máy hàn lăn (Rolling Welding)bởi hoang_3ibác cần thì liên hệ Em: mayhanhaivuong.com (0903238399)...
-
Channel: Điện tử công nghiệp
24-07-2026, 10:58 -
-
Trả lời cho Công thức tính định luật kirchhoffbởi abcnewmemberGiải bằng hệ phương trình bật nhất 3 ẩn.
...
-
Channel: Hỗ trợ học tập
23-07-2026, 14:52 -

Comment