chắc chắn là cần lưu giữ giá trị các thanh ghi W, STATUS và PCLATH nếu bạn muốn chương trình chạy đúng sau khi trở về từ ngắt. Cách khai báo hình như không đúng...mình thường viết như thế này:
W_TEMP EQU 0X20 STATUS_TEMP EQU 0X21 PCLATH_TEMP EQU 0X22 riêng FSR có cần lưu trữ nó không nhỉ? |
Trích:
Còn cách định nghĩa hằng của em: Code:
PCLATH EQU 0X22 Thân, |
ủa, thôi chết, em viết thiếu, đại loại phải như vầy (đúng là nhanh nhảu đoảng... hic)
PCLATH_TEMP EQU 0X22 cách khai báo như bạn friend vẫn đúng? anh có thể giải thích rõ hơn không? |
À, anh xem lướt qua nên không phát hiện lỗi ở lần đầu.
Phần khai báo của bạn friends dịch không có lỗi, nhưng chạy chương trình sẽ bị sai (vì các địa chỉ biến được đặt không đúng). Toàn bộ 4 biến đó đều sẽ có địa chi 0x20. Bạn friends cần phải chỉnh lại như sau thì mới có chương trình đúng: Code:
Org 0x20 Thân, |
Chào bang chủ ,đệ tử nhập môn thật vất vả để viết chương trình đầu tiên !
thứ 1 : vì chưa biết gì về MPLAB thế nên sau khi cài đặt đọc mãi hướng dẫn sử dụng mới có thể làm được mong bang chủ thêm phần hướng dẫn cơ bản sử dụng MPLAB trong 1 ngày học PIC thứ 2 : Ngay trong bài tập đầu tiên Bang chủ đã gài pan thêm dấu . kế lệnh END làm trình dịch báo lổi mà ko biết mò đâu mà sửa ! dù sao thì đệ cũng đã làm được bài tập đầu tiên ! |
Trích:
http://www.picvietnam.com/forum/showthread.php?t=354 Về thứ 2: đó chưa hẳn là một pan được gài, MPLAB đã trải qua nhiều lần nâng cấp kể từ khi chú F viết bài tập đó, đến nay thì directive END được dùng cho các chương trình hợp ngữ dành cho các vi điều khiển 8-bit (PIC10, PIC12, PIC16 và PIC18, nhưng directive .END vẫn được dùng cho các chương trình hợp ngữ dành cho các vi điều khiển và DSC 16-bit (PIC24, dsPIC30, dsPIC33). Thân, |
Vì quá kém cỏi đành xin trưởng lão thọ giáo thêm chút nữa !
vì sao chương trình này em viết dịch bị lỗi ! Code:
;==================================== Make: The target "E:\pic1\baitap2.o" is out of date. Executing: "C:\Program Files\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F628A "baitap2.asm" /l"baitap2.lst" /e"baitap2.err" /o"baitap2.o" Warning[215] E:\PIC1\BAITAP2.ASM 18 : Processor superseded by command line. Verify processor symbol. Message[302] E:\PIC1\BAITAP2.ASM 32 : Register in operand not in bank 0. Ensure that bank bits are correct. Error[113] E:\PIC1\BAITAP2.ASM 54 : Symbol not previously defined ( ) Error[112] E:\PIC1\BAITAP2.ASM 54 : Missing operator Error[113] E:\PIC1\BAITAP2.ASM 57 : Symbol not previously defined (f ) Error[113] E:\PIC1\BAITAP2.ASM 58 : Symbol not previously defined (d1 ) Halting build on first failure as requested. BUILD FAILED: Sat Aug 12 18:02:25 2006 |
Chương trình này không có lỗi cú pháp, tất nhiên cái warning về bộ xử lý do MPLAB chọn tại dòng lệnh và cái message về thanh ghi không nằm trong bank 0 là hợp lý. Tôi cho là bạn đang gặp khó khăn trong việc biên dịch chương trình. Nhân tiện bạn cho biết bạn đang dùng MPLAB phiên bản nào.
Với các bản MPLAB IDE mới, cách đơn giản để bạn biên dịch chương trình chỉ gồm 1 tập tin .asm là chọn loại bộ xử lý cho đúng trong mênu "Configure", lệnh "Select Device ...", sau đó bạn chọn trong mênu "Project" lệnh "Quickbuild <tentaptin.asm>", với <tentaptin.asm> là tập tin .asm mà bạn đang soạn thảo (nó đã được mở ra và đang active). Thân, |
O Day Cac Bac Noi Ve Cach Dung Pic Co Ban Nhat
Nhung Nhung Ung Dung Khac Thi Chua Thay Cac Bac De Cap Nhieu Hi Vong Cac Bac Post Them Nhieu De Anh Em Ta Cung Hoc Nhanh Hon Vi Du Nhu Timer0, 1, 2 Truyen Thong Du Lieu Pwm... Thank You |
Cac Bac Toan Viet Delay Nho Decfsz A
Cai Lay Dung Cung Duoc Nhung Ma Thoi Gian De Lay Khong Chinh Xac Lam Em Thu Dung Timer0 Cua 16f877a De Tao Tre Nhung Ma Tim Mai Khong Thay Lenh Khoi Dong Timer0 Dau Bac Nao Viet Chuong Trinh Tao Tre Nho Timer0 Thi Chi Cho Em Voi Hinh Nhu Voi Con Pic877a No Tu Khoi Dong Timer0 Hay Sao Day Bac Nao Ro Thi Giup Em Voi Thank You! |
rất cám ơn trưởng lão !
|
Nếu mẫu khai báo biến như faleaf trình bày bên trên không tối ưu thì mong bác namp viết lại cho chuẩn. Đây là mẫu khai báo biến của faleaf:
;================================================= ======== ; KHAI BAO BIEN ;-------------- ; Bien nam o bank 0 ;---------------------------------------------------------------------- ORG 0x020 COUNT_L RES 1 COUNT_H RES 3 ;---------------------------------------------------------------------- ; BiEn NAM O bank 1 ;---------------------------------------------------------------------- ORG 0x0A0 COUNT1_L RES 1 ;---------------------------------------------------------------------- ; Bien nam o bank 2 ;---------------------------------------------------------------------- ORG 0x120 ;================================================= ======= 2. Trong chuong trình ngắt theo tôi chỉ cần lưu giá trị của thanh ghi W và STATUS vì thanh ghi PC đã được lưu trong stack. Đồng thời trong quá trình xử lý 1 ngắt thì bit toàn cục GIE đã bị clear nên sẽ không có ngắt nào khác hoạt động được nữa lên không sợ tràn stack. 3. Ở cuối chuong trình ngắt không cần phải set bit GIE vì khi ra khỏi chương trình ngắt thì bit GIE tự động được set lên. Chỉ phải clear flag trước khi ra khỏi chương trình ngắt. |
Trích:
vì thế không cần lưu trữ giá trị thanh ghi PCLATH chỉ chính xác với những dòng PIC có bộ nhớ chương trình <=2K (2^11=2048 địa chỉ). |
Các bác cho hỏi trong khi thực hiện chương trình ngắt ta thường lưu giá trị các thanh ghi W và status vào địa chỉ 0x70, 0x71.... Mấy cái địa chỉ này nằm ở bank 0. Nhưng nếu khi vào chương trình ngắt mà ta đang ở bank 1 thì sao nhỉ? Theo tôi hiểu là trước khi lưu giá trị thanh ghi W và STATUS ta phải chuyển về bank 0 trước đúng không? nhưng tôi thấy các chương trình ngắt viết mẫu đều không thấy làm điều này? Hình như nó tự động hiểu được à? Các bác có thể giải thích cái địa chỉ ghi tạm giá trị thanh ghi W, status được không?
|
Tiện thể hỏi thêm một câu nữa: để chuyển giá trị các thanh ghi đặc biệt vào các thanh ghi lưu trữ thì chỉ cần dùng các lệnh mov là được sao thấy trong tài liệu hướng dẫn và cũng thấy một số bạn trên này hay dùng lệnh swapf?
|
Múi giờ GMT. Hiện tại là 12:14 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam