cảm ơn nhiều ,chúc mau bình phục và chúc mừng năm mới luôn .
|
Trong bài 2, có một đoạn code mình không hiểu cho lắm?
Code:
Đoạn chương trình 2: Code:
MOVLW d’255’ Đoạn code sau sẽ đúng ghi ta thay đổi 0 thành 1 để sau khi thực hiện kệnh, giá trị sẽ được ghi vào file register. Ngoài ra, còn một chỗ không ổn ở chỗ loop1. Thử phân tích: - Đầu tiên gán giá trị 255 vào dalay-reg2. - giảm giá trị của delay-reg2 và so sánh với 0, nếu khác 0 thì thực hiện lệnh tiếp theo. (do ban đầu giá trị là 255 nên giảm 1 còn 254, khác 0 nên sẽ thực hiệ lênh tiếp theo, tức goto loop1) - lại set giá trị của delay-reg2 là 255. - giảm gias trị đi 1 và so sánh với 0. .... như vậy, riêng loop1 cũng thực với với thời gian là infinity dù ở lệnh DECFSZ có để giá trị tham số là 1 hay 0. vì vậy, ngoài sửa lại giá trị tham số của lệnh DECFSZ từ 0 thành 1, cần đưa phần gán giá trị 255 cho delay-reg2 ra ngoài vòng lặp, đặt nó ở cùng vị trí với chỗ gán giá trị 255 cho delay-reg1. chắc là NTC đau chân quas nên không chú ý chỗ này ;D Btw, cho mình hỏi một câu rất dở hơi, thạch anh tên tiếng Anh là gì vậy? có bạn nào giải thích cho mình biết thạch anh là gì không, mình hiểu nó là dùng để tạo xung, nhưng cụ thể hơn thì không biết. Mong được giúp đỡ. |
Xin lỗi các bạn, đoạn chương trình trên đã có sự nhầm lẫn, F đã được báo về vẫn đề lỗi chương trình ngay từ hôm đầu NTC post lên, nhưng vẫn không có thời gian sửa chữa chương trình. Có lẽ các bạn vào đây thường xuyên thì cũng biết F đang làm việc gì. Vì vậy, thành thật xin lỗi các bạn vì sự lầm lẫn trên.
Nếu bạn nào có thời gian, xin sửa chữa giúp đoạn code trên để bạn đọc không bị vướng vào lỗi sai này nữa. Chúc vui. |
Code:
MOVLW d’255’ F sửa luôn đoạn code trên để tránh các bạn mắc lỗi sai. Bản sửa sẽ được NTC cập nhật lại sau: Code:
MOVLW d’255’ À thôi, H hiểu vì sao NTC viết sai rồi... oki, để F nói NTC sửa lại sau ... sorry cả nhà... Chúc vui... |
Trong cách viết trên, F cũng đồng thời chỉ ra hai cách viết cho lệnh GOTO.
Code:
LOOP GOTO LOOP Code:
GOTO $ Chính vì vậy, trong đoạn code trên, thay vì viết Code:
loop Code:
loop Code:
loop1 Code:
loop1 |
Cảm ơn bạn hungkhanh đã phát hiện ra các lỗi sai của bài 2. Xin lỗi cả làng nghe, mình sẽ chỉnh sửa lại gấp.
|
1 Attachment(s)
Đây là bản đã được chỉnh sửa. Phần chỉnh sửa là phần tô màu đỏ trong tài liệu. Mọi người dowwnload lại rồi xem luôn nhé.
|
Bác ntc post tiếp các phần tiếp theo cho anh em tham khảo!Đợi bác mãi sốt ruột quá!
|
BẬT TẮT LED 1s
Code:
;======================================== |
;hex File
;==================== :020000040000fa :1000000001280313831686018312ff30a000a1008c :100010000d30a200ff30860013200d30a20000300a :10002000860013200828a00b1328a10b1328a20b6d :040030001328080089 :02400e00323f3f :00000001ff |
Ai phân tích đoạn chương trình này nào?
Lưu ý là có đoạn goto LOOP về chung, và lưu ý rằng khi 0 - 1 = 255 <> 0, nên sẽ không bị nhảy về LOOP trở lại nhé Công thức tính thời gian delay ở đây được tính như thế nào? Mời các bạn tham gia tính toán con số chính xác. Chúc vui. |
Ặc ăc !! Viết chương trình delay như vậy thì tính thời gian delay cũng chua lắm đó. Bà con thử phân tích coi. Đây cũng là một đề bài thú vị. Chú ý là mhh sử dụng thạch anh 10 MHz.
nhh đã nạp vào PIC và chạy thử chưa. Nhìn sơ qua có cái gì đó không ổn. |
Cách tính khá đơn giản, không phải quá khó đâu em, anh đã viết gợi ý rồi, nhưng xoá đi để mọi người cùng thảo luận.
Anh cũng chưa tính ra con số cụ thể, nhưng nếu biết cách tính khéo léo thì rất là hay. Đoạn code này là một thủ thuật viết hàm delay khá thú vị. Bây giờ giả sử loop 3 vòng như thế này, các giá trị count1, count2, count3 là a, b, và c. Vậy công thức tổng quát của còng lặp này là bao nhiêu chu kỳ máy? Đây là câu hỏi! Chúc vui. |
Tất nhiên, phải chỉ ra điều kiện ràng buộc của a, b và c. Nếu như mình làm 1 vòng, 2 vòng, 3 vòng lặp thì giá trị a, b, c phải là bao nhiêu?
Chúc vui. |
Trích:
|
Múi giờ GMT. Hiện tại là 10:53 AM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam