Nguyên văn bởi trimen
Xem bài viết
Thông báo
Collapse
No announcement yet.
chương trình delay
Collapse
X
-
Đầu tiên lệnh Push 05 sẽ đẩy nội dung thanh ghi tại địa chỉ 05 vào stack,địa chỉ 05 này tuơng ứng với thanh ghi R5, sau đó bạn có thể sử dụng thanh ghi R5 này vào mục đích khác mà không lo giá trị R5 ở chuơng trình chính bị thay đổi, ở đây R5 được sử dụng vào chuơng trình con delay do người viết sợ bạn sẽ sử dụng R5 trong chuơng trình chính vào việc khác nên mới dùng lệnh push để lưu giữ giá trị R5 trong chuơng trình chính vào stack,khi thực hiện xong chuơng trình con delay thì gọi lệnh pop 05 lúc này dữ liệu trong stack sẽ được đưa vào ô nhớ có địa chỉ 05 chính là thanh ghi R5, dữ liệu này là dữ liệu của R5 trước khi vào chuơng trình con delay.Nguyên văn bởi chick3nb0y9x Xem bài viếtthế là sao hả bạn, với câu lệnh trên bạn có thể giải thích giùm mình công dụng của nó dc k?
Comment
-
à, thì ra là thế, cám ơn bạn nhiều nhaNguyên văn bởi trimen Xem bài viếtĐầu tiên lệnh Push 05 sẽ đẩy nội dung thanh ghi tại địa chỉ 05 vào stack,địa chỉ 05 này tuơng ứng với thanh ghi R5, sau đó bạn có thể sử dụng thanh ghi R5 này vào mục đích khác mà không lo giá trị R5 ở chuơng trình chính bị thay đổi, ở đây R5 được sử dụng vào chuơng trình con delay do người viết sợ bạn sẽ sử dụng R5 trong chuơng trình chính vào việc khác nên mới dùng lệnh push để lưu giữ giá trị R5 trong chuơng trình chính vào stack,khi thực hiện xong chuơng trình con delay thì gọi lệnh pop 05 lúc này dữ liệu trong stack sẽ được đưa vào ô nhớ có địa chỉ 05 chính là thanh ghi R5, dữ liệu này là dữ liệu của R5 trước khi vào chuơng trình con delay.
thế bạn ơi, bạn có biết cách tính tần số quét ảnh của led7thanh và matrix k? hướng dẫn mình với
Comment
-
mắt thường không thể sự thay đổi ảnh ở tần số 50hz trở lên, bạn có thể thấy tần số quét của màn hình monitor máy tính là 60hz.Với f=50hz thì mình có T=1/f=20ms vậy chu kì quét led của bạn từ 20ms trở xuống thì mắt bạn sẽ không phân biệt được các led có chớp tắt không.
Comment
-
vậy có phải là khj dùng vòng lặp thì mình cho 2 giá trị ô nhớ là 200 và 50 phải k bạn?Nguyên văn bởi trimen Xem bài viếtmắt thường không thể sự thay đổi ảnh ở tần số 50hz trở lên, bạn có thể thấy tần số quét của màn hình monitor máy tính là 60hz.Với f=50hz thì mình có T=1/f=20ms vậy chu kì quét led của bạn từ 20ms trở xuống thì mắt bạn sẽ không phân biệt được các led có chớp tắt không.
Comment
-
bạn có thể dùng delay thường hoặc timer, nếu là timer thì giá trị ô nhớ là tl0 là low(-20000) và th0 là high(-20000) là xấp xỉ 20ms,còn dùng delay thường thì bạn tính toán chu kì các lệnh để delay đúng hoặc ít hơn 20ms.Bạn có thể tham khảo chuơng trình delay dưới đây của mình dùng để quét 14 kon led 7 đoạn:
delay:
push 30h
push 31h
mov 30h,#4
mov 31h,#1
lap:
djnz 31h,$
djnz 30h,lap
pop 31h
pop 30h
ret
Comment
-
bạn ơi, nếu với câu lệnh trên của bạn, nếu chương trình chính của mình mà k dùng ô nhớ 31h và 30h thì k cần lệnh push pop phải k bạn? còn cái giá trị gán vào 2 ô nhớ đó tại sao lại phải dùng 2 ô nhớ đó thế, tại vì 1 ô nhớ là 250bit mà,trong khj với câu lệnh trên của bạn, nó chỉ lặp có 4 lần mà?Nguyên văn bởi trimen Xem bài viếtbạn có thể dùng delay thường hoặc timer, nếu là timer thì giá trị ô nhớ là tl0 là low(-20000) và th0 là high(-20000) là xấp xỉ 20ms,còn dùng delay thường thì bạn tính toán chu kì các lệnh để delay đúng hoặc ít hơn 20ms.Bạn có thể tham khảo chuơng trình delay dưới đây của mình dùng để quét 14 kon led 7 đoạn:
delay:
push 30h
push 31h
mov 30h,#4
mov 31h,#1
lap:
djnz 31h,$
djnz 30h,lap
pop 31h
pop 30h
ret
Comment
-
đúng rồi nếu bạn không dùng 30h và 31h thì không cần dùng lệnh push,pop.1 thanh ghi 8 bit giá trị thập phân max của nó là 255 bạn,mình chạy từng bước 2 lần cho bạn thấy tại sao mình để 1 và 4:
Đầu tiên 31h giảm từ 1 xuống 0 ,30h giảm từ 4 xuống 3 , trở lại lặp lúc này 31h đang là 0 giảm 1 lần nữa là 255 lúc đó 31h sẽ giảm đúng 255 lần để về 0 ,30h giảm từ 3 xuống 2,trở lại lặp lúc này 31h đang là 0 giảm xuống 255 và quay lại chu trình trên cho đến khi 30h là 0.
Comment
-
vậy nếu với code của bạn mình sẽ có thời gian delay là bao nhiêu vậy bạn?Nguyên văn bởi trimen Xem bài viếtđúng rồi nếu bạn không dùng 30h và 31h thì không cần dùng lệnh push,pop.1 thanh ghi 8 bit giá trị thập phân max của nó là 255 bạn,mình chạy từng bước 2 lần cho bạn thấy tại sao mình để 1 và 4:
Đầu tiên 31h giảm từ 1 xuống 0 ,30h giảm từ 4 xuống 3 , trở lại lặp lúc này 31h đang là 0 giảm 1 lần nữa là 255 lúc đó 31h sẽ giảm đúng 255 lần để về 0 ,30h giảm từ 3 xuống 2,trở lại lặp lúc này 31h đang là 0 giảm xuống 255 và quay lại chu trình trên cho đến khi 30h là 0.
à bạn có nic yh k? cho minh xin đc k?
Comment
-
code này mình viết lại từ code delay 50ms cuả mình nên cũng làm biếng tính bao nhiu giây
, bạn có thể tham khảo code delay 50ms của mình rồi giảm 2 số trong 30h với 31h để hợp với bài tập của bạn:
t50ms:
push 30h
push 31h
mov 30h,#97
mov 31h,#255
lap:
djnz 31h,$
djnz 30h,lap
pop 31h
pop 30h
mov r0,#64
djnz r0,$
ret
Nick yh mình là Toilaai678_pt@yahoo.com
Comment
-
ủa sao code trên của bạn, đến lệnh pop 30h thì phải ret luôn chứ, sao còn thực hiện 2 lệnh dưới làm gì nữaNguyên văn bởi trimen Xem bài viếtcode này mình viết lại từ code delay 50ms cuả mình nên cũng làm biếng tính bao nhiu giây
, bạn có thể tham khảo code delay 50ms của mình rồi giảm 2 số trong 30h với 31h để hợp với bài tập của bạn:
t50ms:
push 30h
push 31h
mov 30h,#97
mov 31h,#255
lap:
djnz 31h,$
djnz 30h,lap
pop 31h
pop 30h
mov r0,#64
djnz r0,$
ret
Nick yh mình là Toilaai678_pt@yahoo.com
học kỳ trước, thầy mình có dạy mình cách tính thời gian delay dùng vòng lặp có công thức tạm gọi như thế này: 2*n*m=time delay
ví dụ: muốn delay 1s=1000000us=2*m*n
nên m*n=500000, sau đó mình chia ra, tại vì mỗi ô nhớ (r0,r1,...r7) có giá trị cực đại là 255, nên khi chia ra ta sẽ đc là 250,200,10, vậy mình cho nó vào 3 ô nhớ, thì sẽ có lệnh như thế này đúng k bạn:
mov r0,#10
lap:
mov r1,#200
lap1:
mov r2,#250
djnz r2,$
djnz r1,lap1
djnz r0,lap
ret
như thế đúng k bạn?
Comment
Bài viết mới nhất
Collapse
-
bởi Nexus 6Pe dùng KiCad 9.0 và đã xuất được file PDF mạch in gòi bác...
-
Channel: Điện tử công suất
hôm nay, 16:25 -
-
bởi bqvietBấm chuột vào các tệp sẽ bật ra chương trình tương ứng. Nên dùng bản KiCAD sau
https://kicad-downloads.s3.cern.ch/a...ll_version.exe-
Channel: Điện tử công suất
hôm nay, 14:57 -
-
bởi Nexus 6Pe cài KiCAD 2012 khi mở ra nó chỉ hiện ntn...
-
Channel: Điện tử công suất
hôm nay, 11:20 -
-
bởi bqvietThực tế bạn nào không tải được tệp nén thiết kế thì căn cứ theo ảnh sơ đồ mạch có thể vẽ lại sơ đồ bằng chương trình EDA nào đó rồi làm mạch được mà. Càng thêm quen thuộc với sơ đồ. Sau đó tùy ý chuyển sang TinySwitch-III hoặc TinySwitch-4.
-
Channel: Điện tử công suất
Hôm qua, 21:13 -
-
bởi Nexus 6PCó ai có bản in của mạch in không, cho em xin file để đi in với ạ
-
Channel: Điện tử công suất
Hôm qua, 14:37 -
-
bởi Nexus 6PLink hư rồi ạ, xin lại link của bản thiết kế cũ ạ...
-
Channel: Điện tử công suất
Hôm qua, 10:48 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92Dạ, cảm ơn bác đã nghe qua và có lời khích lệ cháu ạ.
Thật lòng cháu không dám nhận hai danh hiệu Kỹ sư và Nhạc sĩ đâu ạ, vì phải thật hiểu sâu nắm vững cơ, chứ thực lực cháu đây chỉ là biết chút ít thôi à. Về phần...-
Channel: Tâm tình dân kỹ thuật
29-01-2026, 11:58 -
-
Trả lời cho Có mạch sạc nlmt nào có mppt không các bácbởi bqvietĐơn giản thì có trải nghiệm này
http://www.dientuvietnam.net/forums/...ch%C3%AA%CC%81
Chỉ phần cứng,...-
Channel: Điện tử công suất
27-01-2026, 21:32 -
-
Trả lời cho Có mạch sạc nlmt nào có mppt không các bácbởi Nexus 6Pphức tạp quá, nếu mà có mạch làm sẵn thì ngon, e dùng 2 tấm pv loại 18v 55w thôi bác
-
Channel: Điện tử công suất
26-01-2026, 08:52 -
-
Trả lời cho Có mạch sạc nlmt nào có mppt không các bácbởi Nexus 6Pcảm ơn bác nhiều nha, để e nghiên cứu
-
Channel: Điện tử công suất
26-01-2026, 07:38 -

Comment