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.
13bit :time đếm đến 8192 thì tràn.
16bit:time đếm đến 65356 thì tràn.
bạn muốn biết chính xác hay không lên chạy trên mạch thật.ngoài ra sai số của thạnh anh cũng là nguyên nhân.
không khời tạo TMOD=00
Mình tìm ra chỗ sai rồi, bây giờ thì text chạy thử chính xác đến micro giây luôn! Mô phỏng proteus chính xác thật, chưa bao giờ thấy nó sai toàn thấy mình sai
- Dùng C hay Assembly language đều cần phải biết rõ về cấu trúc của VĐK. Nếu không rành về cấu trúc VĐK, biết rõ C hay không cũng đều là vô dụng...
.
Tôi hoàn toàn nhất trí với bạn Paddy. Ở đây tôi chỉ đưa ra 1 sự so sánh đơn giản để các bạn mới nhập môn có thể tự chọn con đường đi phù hợp với mình hơn.
Tôi cũng muốn bổ sung 1 chút xíu là nếu các bạn bắt đầu với C dành cho VĐK (ko phải C tổng quát) thì sẽ dễ dàng hơn ASM rất nhiều, và cũng ko sợ học những thứ dư thừa hay phức tạp. Bởi vì C dành cho VĐK chỉ bằng khoảng 1% C tổng quát, gồm những phép tính và hàm dành cho VĐK thôi.
Lựa chọn ngôn ngữ nào là tùy ở mục đích và sức lực hiện tại của các bạn.
Vi dụ điển hình nhất trong lập trình VXL
void delayms(int n)
{
int i,j; // khai bao bien chi trong chuong trinh con
for (i=0;i<n;i++)
for (j=0;j<1500;j++) { } // tham so j tuy thach anh toc do vxl ma cac
//ban thay doi cho phu hop
}
em đọc được vd này trên mạng nhưng em chưa hiểu cách tính " j " như thế nào ?
(sao lai là nhỏ hơn 1500 ?)
Xin trả lời như sau:
Biến j chỉ đơn giản là biến đếm thôi.
Khi thực hiện phép tính j=j+1 (trong C viết là j++) thì VXL tốn 1 khoảng thời gian bằng 1 bước thời gian của VXL(gọi là chu kỳ máy).
Ví dụ nếu tần số làm việc của VXL là 1MHz, nghĩa là 1 triệu phép tính/giây, thì mỗi phép tính tốn 1 phần triệu giây.
Nếu thực hiện 1500 phép tính thì VXL tốn 0.0015 giây.
Mỗi vòng lặp FOR tốn 2 phép tính. Vậy nếu 1500 vòng lặp FOR thì tốn 3000 phép tính, và VXL tốn 0.003 giây để thực hiện hết số vòng lặp này.
Để tìm ra số vòng lặp cần thiết khi đã biết thời gian tiêu tốn và tần số của VXL, bạn chỉ cần làm bài toán ngược.
Gọi thời gian là t, tần số là f, số phép toán thực hiện được là n, số vòng lặp là m, ta có công thức tính như sau:
n = t/f
m = n/2
vòng lặp FOR của ta khi đó sẽ viết có dạng:
for (j=0; j<m; j++) { }
Ở đây tôi hướng dẫn cụ thể để các bạn dễ hiểu. Quen dần thì các bạn sẽ tính nhẩm rất nhanh, ko cần phải qua các thao tác trên.
Chúc vui !
Thiết nghĩ thi thoảng bác lên đây chia xẻ ít kinh nghiệm cũng vui rồi. Còn chuyện con người sinh lão bệnh tử là thường, sống cùng với quy luật đó thôi. Bqv nhớ trước đây bác từng kể về chuyện rang chì ô-xít bằng chảo để phục hồi bình điện, đấy cũng là thành quả đáng nể phục ở thời kỳ thiếu thốn đó.
Uống rượu 1 mình, thấy trang này nhớ lại cách đây vài chục năm hàn thiếc với inox cực kỳ khó, phải dùng acid Hcl tác dụng lên kẻm Zn để có Zncl2 làm thuốc trợ hàn, lúc đó làm gì có acid Hcl và thuốc trợ hàn?
À, 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à....
Comment