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.
Tôi đang dùng Keil để viết cho 89C51, nhưng cần khai báo biến có dung lượng lớn hơn 128 bytes, như thế có phải bắt buộc dùng RAM ngoài không ? Có cách nào không cần phải dùng RAM ngoài không ? Nhờ các bác chỉ giúp.
Tôi đang dùng Keil để viết cho 89C51, nhưng cần khai báo biến có dung lượng lớn hơn 128 bytes, như thế có phải bắt buộc dùng RAM ngoài không ? Có cách nào không cần phải dùng RAM ngoài không ? Nhờ các bác chỉ giúp.
Xin cảm ơn !
Bạn có thể dùng chip có RAM lớn hơn , như 89C52 chẳng hạn (256 byte RAM ). Còn nếu bộ nhớ RAM cần dùng quá lớn thì đành phải dùng RAM ngoài thôi !
Tôi dùng Keil để viết chương trình, cần khai báo một biến lớn khoảng 4Kb(dùng để lưu giữ bộ font trong chương trình quang báo).Tôi có tìm hiểu một số sơ đồ mạch về ROM, RAM nhưng không hiểu. Làm sao khai báo một biến trong chương trình mà nó lại tự nằm ở RAM ngoài ? Bác có sample nào không ?
Tôi dùng Keil để viết chương trình, cần khai báo một biến lớn khoảng 4Kb(dùng để lưu giữ bộ font trong chương trình quang báo).Tôi có tìm hiểu một số sơ đồ mạch về ROM, RAM nhưng không hiểu. Làm sao khai báo một biến trong chương trình mà nó lại tự nằm ở RAM ngoài ? Bác có sample nào không ?
Chào ANE, làm quang báo thì phải dùng bộ nhớ ngoài mới đủ dung lượng cho buffer và character code. Ghép nối phần cứng thì là kỹ năng cơ bản rồi nhé, còn phần mềm với Keil, biến trong RAM ngoài hãy khai báo nó với từ khóa "xdata" sau từ khóa định kiểu.
Ví dụ:
[code:1]unsigned char xdata array[100];[/code:1]
Quy Nhơn trời đẹp không bác?
Quy Nhơn mùa này đẹp lắm bác ạ. Biển xanh ngắt, còn gió Nam thì mạnh phải biết. Khi nào rảnh mời bác vào QN chơi
Vẫn còn một thắc mắc nữa, nhờ bác chỉ luôn.
Khi giao tiếp VXL với ROM, RAM hay 8255..., tớ thấy phải có thao tác chọn chip để làm việc, giả sử chúng ta dùng 74LS138. Như vậy muốn thao tác với RAM phải chọn RAM thông qua 74LS138, nghĩa là trong chương trình mình phải làm việc này. Như bác nói, việc khai báo xdata sẽ tự đặt biến vào RAM, như vậy làm sao nó hiểu mà tự đặt vào đó được ? Kết nối VXL với RAM gồm có bus dữ liệu và bus địa chỉ và thông qua 74LS138. Nếu nó tự đặt biến vào RAM thì mạch có phải bắt buộc theo một cách kết nối nào đó không ?
Giao tiếp với bộ nhớ ngoài có nhiều cách, miễn sao tạo được giản đồ thời gian (timing diagram) đúng yêu cầu của bộ nhớ cần ghép nối. Bác có thể "làm bằng tay" các xung trong giản đồ đó bằng các lệnh setb, clr; chỉ cần làm đúng thứ tự và đảm bảo yêu cầu về thời gian (độ rộng xung, khoảng thời gian giữa các xung). Tuy nhiên nên sử dụng bus mở rộng của 8051. Khi ghép nối với theo cách này, bác sẽ dùng hai cổng p0 và p2 (tất nhiên không sử dụng làm I/O được nữa), tín hiệu ALE (#PSEN nếu là ghép nối với bộ nhớ chương trình ngoài) cùng một mạch giải mã. 74138 bác đề cập đến chính là thuộc phần mạch giải mã. Sau đó việc tạo các tín hiệu theo timing diagram sẽ là việc của phần cứng phụ trách bus trên chip, bác không cần phải thực hiện các lệnh setb hay clr để làm các việc này nữa. Tất cả những gì phải làm là viết ra một câu lệnh truy nhập bộ nhớ ngoài (là lệnh MOVX trong asm). Khi CPU thực hiện lệnh này sẽ đảm bảo giao tiếp với bộ nhớ ngoài theo đúng timing diagram.
Hãy ghép nối với bộ nhớ ngoài sử dụng bus mở rộng của 8051 và hãy xây dựng mạch giải mã phù hợp với dải địa chỉ mà bác dành cho biến nhớ ngoài. Đó là những gì bác cần phải làm.
Tại hạ chưa từng cầm cẩm nang đó trên tay nên cũng không biết trả lời thế nào, chỉ biết là ghép nối với bộ nhớ ngoài theo kiểu bus (có các đường dữ liệu và địa chỉ ghép với P0 và P2 ấy).
Tớ sẽ cố gắng thử và cho bác biết kết quả. Vì chưa từng học điện tử bao giờ nên tớ không biết được các quy trình, các giới hạn, các nguyên tắc... của điện tử. Giờ làm thì cứ gặp cái gì bí là search, là đọc, là hỏi. Mong là không phiền bác.
Hôm rồi tớ thấy một cái mạch, họ dùng con NE555 và một biến trở để điều khiển tốc độ nhanh chậm của vi xử lí(giống như ta dùng thạch anh 12, 24 nhưng thấy trong mạch vẫn có thạch anh). Mà lạ là sao ngõ ra của NE555 lại nối vào chân read của 89C2051. Tớ lại lục sách mà không hiểu sao cả. Bác có kinh qua thì chỉ tớ với. Chắc phải trả nợ bác bằng tin học vậy
Như vậy có nghĩa là tớ làm cái mạch y như trong cuốn Vi điều khiển của Tống Văn On là có thể khai báo RAM ngoài được ?
Nếu bạn dùng KeilC để lập trình sử dụng RAM ngoài,bạn có thể sử dụng các cách sau : *Cách 1 :Vào Target, chọn Memory Model là Large , khi đó mọi biến bạn khai báo đều được lưu trữ trong RAM ngoài.Cách này đơn giản nhưng có nhược điểm là không quản lý được biến, compiler sẽ tự định địa chỉ cho biến của bạn. *Cách 2 :Chọn Memory Model là small. Khi đó , biến nào khai báo ở dạng xdata thì sẽ hiểu là RAM ngoài.
VD : unsigned char xdata Dulieu[10];
cách này thường được sử dụng rộng rãi, tuy nhiên RAM của bạn phải bắt đầu từ địa chỉ 0x0000. *Cách 3 : Nếu vùng địa chỉ của RAM không bắt đầu từ 0x0000 , chẳng hạn bạn sử dụng mạch giải mã để đặt địa chỉ cho RAM bắt đầu từ 0x8000 , khi đó ta có thể sử dụng thư viện "absacc.h" ,ví dụ khai báo như sau :
#include "absacc.h"
....
#define baseaddr 0x8000
void InitRAM()
{
unsigned char i;
for(i=0;i<10;i++)
XBYTE[baseaddr+i]=i; // Ghi vào RAM ngoài 10 giá trị , bắt đầu từ
// 0x8000
}
lúc lấy giá trị ra, bạn có thể gọi : x=XBYTE[address];
-Với các khai báo như trên, compiler sẽ hiểu là sử dụng RAM ngoài, và như blackmoon đã nói,việc trao đổi thông tin với RAM ngoài sẽ được VĐK thực hiện bằng lệnh movx, các xung ALE,RD,WR sẽ họat động theo nhịp clock để trao đổi với RAM.
Để tớ chụp rồi tớ post lên. Đó là cái mạch điều khiển đèn neon đấy, dùng AT89C2051 để điều khiển(chỉ có 8 đèn = 1 port) và BTA16 làm công suất. Nó cho phép điều khiển nháy nhanh hay chậm thông qua một biến trở. Tớ thấy nó dùng con NE555, chân ra của con này nối vào chân 11 của AT89C2051.
Theo bác thì có cách nào điều khiển nhanh chậm thông qua biến trở ? Dùng biến đổi AD ?
Theo bác thì có cách nào điều khiển nhanh chậm thông qua biến trở ? Dùng biến đổi AD ?
Kiểu gì thì cũng phải biết được sự thay đổi của biến trở. Trong mạch của bác không thấy nói đến ADC, chỉ thấy nói đến 555, có thể là họ cho biến trở vào mạch dao động 555 và xử lý xung đầu ra mạch dao động. Cụ thể thế nào thì để bác post cái schematic lên đã nhé.
Neu ban lam quang bao ma khong can doi noi dung tu ban phim thi co the luu trong ROM noi cua 8951.
unsigned char code data[]={1,4,7}
Su dung bien dât giong nhu mang
Vd: data[0] la 1
Neu ban lam quang bao ma khong can doi noi dung tu ban phim thi co the luu trong ROM noi cua 8951.
unsigned char code data[]={1,4,7}
Su dung bien data giong nhu mang
Vd: data[0] la 1
Dạ hông dám làm thì chắc chắn sẽ mãi ko thể làm được đâu ạ. Nguồn xung dân dụng vài kw giờ rất nhìu ạ, sạc ô tô điện, máy hàn, lò vi sóng, âm ly... tùy chất lượng mà độ phức tạp sẽ khác nhau ạ. Và cái giá phải trả về kinh tế...
Đúng rồi chọn mua theo tai . ca thì phải toàn dải nhạc thì chỉ cao và thấp thé nên loa ca thì nghe nhạc không hay và ngược lại .
Muốn ca và nhạc đều hay thì phải dúng 2 giàn , còn nếu chỉ có 1 thì phải chỉnh sửa lại sao cho ca và nhạc đều được không quá dở ....
Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
Mấy con...
Bác nói đúng quá. Cơ mà muốn mua hàng chính hãng, hàng thương hiệu mà tai lại hợp hàng tầu mới khổ chứ.
Đang tính mua cái loa tầu nữa cột đằng sau loa này, Loa sony chỉ để hát nhép thôi, có dc k các bác ...
Theo tôi thì khi hpj sản xuất ra cái loa đó, đã có nhiều chuyên gia kỹ thuật hiệu chỉnh, tính toán các phần tử kỹ lưỡng rồi.
Bây giờ tính toán hiệu chỉnh lại cần có đội ngũ tương đương với nhà sản xuất.
Cách đơn giản...
Dạ cháu có ý tốt muốn động viên chú ấy ngâm cứu khoa học thôi ạ. Về phần kiểm tra dao động thì chú ấy chưa biết thì sẽ tìm hiểu được là cần những gì ạ, chắc chắn là khi hướng dẫn phần ấy các cô chú nào đó sẽ lưu ý cần loại sò công suất ra tránh cháy nổ rồi ạ....
Loa bass đấu trực tiếp không qua phân tần để thành loa toàn dải xem có thoát tiếng khộng , nếu không thoát cần phải sửa lại mạch cs hay âm sắc nếu đủ trình còn nếu thoát ca hay nhưng chưa vừa ý vì bass kém chăc thì đấu lại như cũ và đấu thêm loa mid treble bên ngoài .
Comment