cac huynh ti cho em hoi cai nha ===> có cách nào dùng ngắt để trở về chương trình của 8951 tại vị trí 0000h không ạ (( chắc là không phải không ạ
Thông báo
Collapse
No announcement yet.
dùng ngắt trở về địa chỉ 0000h??
Collapse
X
-
Trước khi vào chương trình ngắt, bộ đếm PC được PUSH vào ngăn xếp ( 2 byte), bạn xác định địa chỉ PUSH này, trước khi thoát khỏi chương trình ngắt, bạn gán giá trị 00h vào 2 byte tại địa chỉ bạn xác định trên. Như vậy khi thoát khỏi ngắt chương trình sẽ chạy lại từ địa chỉ 0000h. Cách này tôi đã làm lâu lắm rồi nên không nhớ Code như thế này, bạn tự suy nghỉ xem.
Chúc thành công!
-
Nguyên văn bởi dangdung Xem bài viếtchi bằng bạn reset còn hơn
hoặc dùng lệnh jmp #0000h
Comment
-
Nguyên văn bởi pvkhai Xem bài viếtTrước khi vào chương trình ngắt, bộ đếm PC được PUSH vào ngăn xếp ( 2 byte), bạn xác định địa chỉ PUSH này, trước khi thoát khỏi chương trình ngắt, bạn gán giá trị 00h vào 2 byte tại địa chỉ bạn xác định trên. Như vậy khi thoát khỏi ngắt chương trình sẽ chạy lại từ địa chỉ 0000h. Cách này tôi đã làm lâu lắm rồi nên không nhớ Code như thế này, bạn tự suy nghỉ xem.
Chúc thành công!
Comment
-
Trước tiên bạn phải biết về ngăn xếp.
Ban đầu thanh ghi SP có giá trị =07h. (ô nhớ 07h, trùng với địa chỉ của thanh ghi r7)
Khi có ngắt thì SP tăng lần lượt lên và ghi giá trị là địa chỉ của chương trình hiện tại vào (2 byte), sau đó thì SP =09h, và chương trình nhảy tới vecto ngắt.
Khi gặp lệnh reti thì chương trình sẽ lấy địa chỉ củ trước khi có ngắt từ các ô nhớ được trỏ bởi thanh ghi SP ( lúc này là 08h và 09h) và nhảy tới đó để làm tiếp công việc đồng thời sp lần lượt giảm xuống 2 lần. -->07h
Với lệnh push thì SP sẽ tăng 1 và lưu giá trị cần lưu vào ô nhớ trỏ bởi sp, lúc này là 08h.
Với lệnh pop thì ngược lại,...
Vậy thì với cách push các số 00 vào ngăn xếp hay là dùng lệnh nhảy về đị chỉ 0000h gì thì thanh ghi SP của bạn cũng sẻ phình to lên (tăng dần lên) ít hay nhiều.
Cho đến khi nào đó nó trùng vào vùng Ram nội mà bạn đang lưu dữ liệu tạm thời Ví dụ 20h chẳn hạn. Vậy thì chương trình không còn chạy đúng nữa.
Chào!
Comment
-
Nguyên văn bởi thanhnguyen0 Xem bài viếtcac huynh ti cho em hoi cai nha ===> có cách nào dùng ngắt để trở về chương trình của 8951 tại vị trí 0000h không ạ (( chắc là không phải không ạ
CSEG
ORG 0000H ; power on/reset vector
jmp on_reset
ORG xxxxH
; Thay xxxx bằng địa chỉ hexa
; của ngắt mà bạn dùng để reset
jmp on_reset
;......các địa chỉ ngắt khác mà bạn sử dụng
on_reset:
mov sp, #50H ; khởi tạo stack pointer
;...... phần chương trình của bạnImagine all the people
Living life in peace...
Comment
-
Nguyên văn bởi vodangks Xem bài viếtXin hỏi cách xác định địa chỉ PUSH ở trên được ko??? Dùng mô phỏng thì có thể thấy được nhưng mình ko hiểu tại sao nó lại có những con số ấy cả, có cách nào tính toán ra ko???
Ví dụ :
mov r0,sp
mov @r0,#00h
dec r0
mov @r0,#00h
Như vậy nội dung 2 ô nhớ mà SP trỏ vào đã bị thay đổi thành 0000h.
Ở đầu chương trình bạn nên xác định vị trí ngăn xếp
main : mov sp,#07h
....
Chúc vui!
Comment
-
Nguyên văn bởi pvkhai Xem bài viếtThanh ghi SP chứa giá trị địa chỉ ngăn xếp, bạn sử dụng điều này để xác định.
Ví dụ :
mov r0,sp
mov @r0,#00h
dec r0
mov @r0,#00h
Như vậy nội dung 2 ô nhớ mà SP trỏ vào đã bị thay đổi thành 0000h.
Ở đầu chương trình bạn nên xác định vị trí ngăn xếp
main : mov sp,#07h
....
Chúc vui!
TROVE: mov sp,#50
mov 4FH,#5D ; (giả sử là 5D)
mov 50H,#00
RETI
Trên đây là 1 đoạn ct mình viết làm đồng hồ, sau khi kết thúc việc chỉnh hẹn giờ, mình cho trở về lại phần hiển thị giờ bình thường. Địa chỉ 5D (địa chỉ này có thể thay đổi tùy ct)là địa chỉ mình thấy khi mô phỏng tới phần mình muốn nhảy về (mặc định nó nằm ở R7). Thật sự mình ko hiểu rõ tại sao lại như thế.
Mấy bạn có thể giải thích cách xác định đia chỉ của 1 dòng lệnh có thể tính được ko??? Việc này rất quan trọng khi cần nhảy về đúng chỗ sau khi xài ngắt!!!
Và mình phải viết đúng như vậy thì nó mới trở về đúng, còn ko thì sai
Comment
-
Trong 8051: Khi có ngắt thì địa chỉ hiện thời của nó tự động ghi vào vùng Stask và khi gặp lệnh RETI thì tự động nó lấy địa chỉ đó để mà nhảy tới, không cấn phải định trước.
Chú ý là trong chương trình phục vụ ngắt bạn đừng dùng các lệnh tác động đến vùng stask này. Mà nếu có dùng thì phải làm sao cho thanh ghi SP vẩn giữ nguyên giá trị. Ví dụ nếu có lệnh call thì phải có lệnh ret, nếu có lệnh push thì phải có lệnh pop..
Comment
-
Nguyên văn bởi toymaker Xem bài viếtÝ bạn là khi có ngắt thì reset (mềm) MCU phải k?
CSEG
ORG 0000H ; power on/reset vector
jmp on_reset
ORG xxxxH
; Thay xxxx bằng địa chỉ hexa
; của ngắt mà bạn dùng để reset
jmp on_reset
;......các địa chỉ ngắt khác mà bạn sử dụng
on_reset:
mov sp, #50H ; khởi tạo stack pointer
;...... phần chương trình của bạn
giả sử chương trình chính mình đặt trng nhãn on_reset và nhãn on_reset đó cũng chính là trình phục vụ ngắt của ORG xxxxH và thì bắt buộc chương trình chính mình cũng phải đặt lệnh trở về là RETI vậy có mâu thuẫn gì kg anh? vì đầu tiên chương trình phải thực hiện ở nhảy tới nhãn on_reset trước mà
Comment
-
mình thấy cái này đơn giản thế này,không biết có đúng không?
sau khi đã thực hiện xong chương trình ngắt trước lệnh reti ta chỉ cần đặt vào ngan xếp giá trị 00 là đuowcj rồi
;chuong trình ngắt
...........
....
mov a,#00
push acc
push acc
reti
lúc này trên ngăn xếp có 2 byte 00h rồi
khi gặp lệnh reti thì uC sẽ lấy 2 byte ngăn xếp trở về và có địa chỉ 00h
tuy nhiên trong chương trình main khởi tạo bạn nên nạp lại giá trị cho ngăn xếp mov sp,#07h. như vậy có đúng không?hãy cố gắng dù vướn phải thất bại!!!!!!!!
Comment
-
Nguyên văn bởi chipmickey Xem bài viếtmình thấy cái này đơn giản thế này,không biết có đúng không?
sau khi đã thực hiện xong chương trình ngắt trước lệnh reti ta chỉ cần đặt vào ngan xếp giá trị 00 là đuowcj rồi
;chuong trình ngắt
...........
....
mov a,#00
push acc
push acc
reti
lúc này trên ngăn xếp có 2 byte 00h rồi
khi gặp lệnh reti thì uC sẽ lấy 2 byte ngăn xếp trở về và có địa chỉ 00h
tuy nhiên trong chương trình main khởi tạo bạn nên nạp lại giá trị cho ngăn xếp mov sp,#07h. như vậy có đúng không?
cach làm hay thật --- cam ơn anh nhe
kg cần tíinh toán gì cả.... heheh
Comment
-
Nguyên văn bởi chipmickey Xem bài viếtmình thấy cái này đơn giản thế này,không biết có đúng không?
sau khi đã thực hiện xong chương trình ngắt trước lệnh reti ta chỉ cần đặt vào ngan xếp giá trị 00 là đuowcj rồi
;chuong trình ngắt
...........
....
mov a,#00
push acc
push acc
reti
lúc này trên ngăn xếp có 2 byte 00h rồi
khi gặp lệnh reti thì uC sẽ lấy 2 byte ngăn xếp trở về và có địa chỉ 00h
tuy nhiên trong chương trình main khởi tạo bạn nên nạp lại giá trị cho ngăn xếp mov sp,#07h. như vậy có đúng không?
à nhưng mà cần phải lưu ý là khi thoát ra khỏi lệnh ngắt thì khôg dc phép dùng lệnh POP. nếu vo tình dùng lệnh này thì .......toi. vì trong vùng stack vẫn còn lưu địa chỉ trờ về của lệnh nhảy trước đó
dù sao cách này vẩn là một giải pháp mời nah một ly nhé
Comment
-
Nguyên văn bởi thanhnguyen0 Xem bài viếtý anh oi cho em hỏi cái nha
giả sử chương trình chính mình đặt trng nhãn on_reset và nhãn on_reset đó cũng chính là trình phục vụ ngắt của ORG xxxxH và thì bắt buộc chương trình chính mình cũng phải đặt lệnh trở về là RETI vậy có mâu thuẫn gì kg anh? vì đầu tiên chương trình phải thực hiện ở nhảy tới nhãn on_reset trước màImagine all the people
Living life in peace...
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi bqvietBqv từng làm việc với đám SIMATIC S5 và S7 đủ các thể loại của hãng Siemens anh ạ. Chưa từng nghe tới tới hãng SIEMEN nên cũng không biết S7-200 SMART là thế nào. Nhưng chuyện đó thì liên quan gì tới chủ đề đang thảo luận ở luồng này ?...
-
Channel: Điện tử công suất
Hôm qua, 20:01 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi bqvietThiết bị đang đề cập có chỉ số bảo vệ tới IP68, nghĩa là đặt ngoài trời được, nên không thể có chuyện "mạch quá bẩn". Cái anh nhìn tưởng là bẩn đấy là lớp nhựa dẻo phủ bảo vệ mạch, đã được bóc ra trông có vẻ...
-
Channel: Điện tử công suất
Hôm qua, 19:56 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi nhathung1101Bọn Tàu nó rất hay, xin nhấn mạnh từ "hay": Là giá nào cũng có.
Nếu muốn cao cấp, ok, nó sẽ đưa hàng cao cấp.
Muốn giá tụt quần, ok. Người dùng sẽ tự tụt quần thôi.
Nhưng chuyện đó là dành cho...-
Channel: Điện tử công suất
03-02-2025, 23:41 -
-
Trả lời cho tìm mua đồng hồ vạn năngbởi nhathung1101Đồng hồ của tôi đây. Theo tôi 20 năm rồi. Đảm bảo cả thế giới có 1 cái. Nên sẽ là vô giá....
-
Channel: Điện tử dành cho người mới bắt đầu
03-02-2025, 23:30 -
-
Trả lời cho Năm mới dientuvietnam.netbởi bqvietHôm nay mùng 6, ngày làm việc đầu tiên, bqv kính chúc thành viên diễn đàn một năm Rắn sức khỏe dồi dào, gia đình bình an sum vầy. Cần/nên dành sức đối phó cơn sóng hàng TQ tràn sang mạnh, sẽ là một năm không dễ dàng đối với người làm sản xuất.
-
Channel: Tâm tình dân kỹ thuật
03-02-2025, 19:46 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi tuyennhanHàng loạt máy bị lỗi nhiệt độ giống nhau thì trước tiên phải xem máy đó được sản xuất để hoạt động trong môi trường khí hậu nào .
-
Channel: Điện tử công suất
03-02-2025, 09:17 -
-
Trả lời cho tìm mua đồng hồ vạn năngbởi nguyendinhvanBây giờ , tôi phải đo AVO như thế này. Nhức đầu lắm.
...-
Channel: Điện tử dành cho người mới bắt đầu
03-02-2025, 00:52 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi bqvietViệc một máy đơn lẻ hỏng chi tiết nào đó có lẽ cũng không lạ lắm, nhất là đối với các loại máy chuyên dụng phức tạp. Điều mà dinhthuong80 muốn nhấn mạnh là tính hệ thống của hư hỏng, cả loạt máy cùng bị chung lỗi. Ngoài ra inverter thiết nghĩ cũng không phải dạng...
-
Channel: Điện tử công suất
02-02-2025, 22:05 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi nguyendinhvanHỏi chỗ anh này là biết cách xử lý ngay thôi.
https://www.google.com/search?sca_es...AQtKgLegQIDxAB
Một là cái mach quá bẩn, nên mọi số liệu, giá trị đo, hiện tượng, triệu chứng ... chỉ có giá trị chém gió, tám gẫu và tham khảo.
Hai là...-
Channel: Điện tử công suất
02-02-2025, 01:07 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi tuyennhanBác tìm coi mấy cái clip về tai nạn hàng không sẻ sáng tỏ nhiều điều ......
-
Channel: Điện tử công suất
01-02-2025, 11:02 -
Comment