Nhật ký học PIC (Quên mang kính - Upd. 01/2006)
Giờ có một cái đề tài làm Remote bằng Pic16.
Mua được từ bbd mấy cón Pic16f88 bắt đầu ngồi mò mẫm. Tiện thể xin bác fall một góc diễn đàn để post lên quá trình làm việc. Nhiều việc khác xen vào nên không nhanh. Đầu tiên là tập hợp một ít tài liệu trên diễn đàn này bao gồm có học pic 1 ngày..., rồi cái tutorial gì đó. Đồng thời tìm thêm một vài cuốn sách trên mạng. Vài tài liệu xem lướt nữa cuối cùng kết luận bắt đầu từ bài của bác fall. Phần cứng đã chuẩn bị trước coi như không lo. |
- Tìm datasheet của 16f87/88 đọc lướt qua.
- In cái danh sách SFR - Híc tìm mãi kô có cái tóm tắt tập lệnh nào ngắn ngắn chỉ trong một trang. Tìm một lúc thì thấy nó nằm trong datsheet. In ra luôn. - Đọc qua cái tutorial pdf thấy tập lệnh của chuối, khái niệm chuyển bank hơi rối rắm. Như vậy không tối ưu phải chuyển bank rất nhiều. Cảm nhận ban đầu. * Thanh ghi W giống thanh ghi A của msc51 nhưng bị tận dụng một cách quá đáng ??? * Tập lệnh hơi bị ít lệnh. Có vẻ thiếu thiếu. Mỗi 2 lệnh mov. Vậy con này kô có bộ nhớ ngoài ??? Mov bit thế nào đây ??? * Cái lệnh retlw hay hay. Lệnh sleep, clrwdt tại sao là lệnh mà kô là một thao tác nào đó trên thanh ghi ??? Dành chỗ cho mấy lệnh khác. Có vẻ vừa thiếu vừa thừa. Chắc có ý đồ. * Không hiểu so sánh thế nào ??? Có lệnh testbit, với incfsz/decfsz chắc là dùng nó. Chưa rõ cách dùng lắm. * Không thấy lệnh push, pop ??? Giờ đọc kỹ tài liệu của fall xem sao với bản pdf xem sao. |
Ngâm cứu cái taplenh.pdf với các tiêu chuẩn mà bác fall đưa ra.
Tại cũng có tiêu chuẩn khác rồi. Bổ sung mấy ý của bác fall. Chương trình đầu tay. Code:
;;================================================|================================================= Warning[215] D:\TESTF88\MAIN.ASM 21 : Processor superseded by command line. Verify processor symbol. Message[302] D:\TESTF88\MAIN.ASM 35 : Register in operand not in bank 0. Ensure that bank bits are correct. Warning[205] D:\TESTF88\MAIN.ASM 43 : Found directive in column 1. (END) Dòng 35 là: clrf TRISB ;; TRISB = 0 Out, =1 In (Tri State) Ngoài ra khi để dòng này nó sẽ báo lỗi: __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF &_HS_OSC Error[126] D:\TESTF88\MAIN.ASM 24 : Argument out of range (not a valid config register address) Không hiểu lệnh này mâu thuẫn với cấu hình Device trong MPlab thế nào. |
Có vẻ như trong bài tutorial của bác fall chứ END. là không đúng. Chỉ là END thôi.
Híc mấy cái waning củ chuối, nó bắt phải viết lệnh after collum1. Còn lable thì phải ngay collum1. Không biết sao turn off cái này đây. Gặp một lỗi ngớ ngẩn. Nhấn vào version control mplab treo luôn. Tôi dùng MPLAB7.1 Mới down 7.3 về. Khi mở lại thì project conrrupt. Bó tay |
Chương trình thứ 2:
Code:
;Region CẤU HÌNH BỘ BIÊN DỊCH - COMPILER CONFIGURATION RB0 EQU 0 RB1 EQU 1 RB2 EQU 2 RB3 EQU 3 RB4 EQU 4 RB5 EQU 5 RB6 EQU 6 RB7 EQU 7 Sửa một số chữ chú thích sai Code:
;;================================================|================================================= |
Phiên bản khác dùng timer để delay
Code:
;Region CẤU HÌNH BỘ BIÊN DỊCH - COMPILER CONFIGURATION |
Vài kinh nghiệm
- Với những người đã quen Asm51 vào trong build option chọn số mạch định là Decimal như vậy tất cả các số mặc định sẽ là dạng số ai cập thường ví dụ 500 chứ kô cần viết d'500' - Cái warning: Register in operand not in bank 0. Ensure that bank bits are correct. không phải sợ chỉ cần check xem đúng bank chưa. Có ý kiến về đoạn mã sau của bác fall: Code:
MOVWF W_SAVE ;; W_SAVE(bank unknown!) = W Lệnh BSF cuối cùng không cần thiết vì khi retfie lệnh này đã set GIE lên rồi. Trong trường hợp trong ngắt không sử dụng Indirect thì có thể không cần lưu FSR. Trong trường hợp chương trình chỉ nằm trong 2K có thể không cần lưu PCLATCH. Với các ứng dụng đơn giản và các dòng PIC như 16F88, 16F877 có common RAM chỉ thế này là đủ: Code:
;;------------------------------------------------|------------------------------------------------- |
Mình mới học, và mình sẽ học theo cách của bạn,rất thú vi! Thank!
|
Bác cho em hỏi, phần các bác viết về ngắt ý, sao các bác lại dùng lệnh SWAP , theo em nghĩ thì chỉ cần lưu giữ giá trị các thanh ghi trước khi vào ngắt thôi, sao lại cần đổi vị trí các bít thấp cho bít cao làm gì
|
Trích:
Thân, |
các anh chị ơi có tài liệu nào chỉ rõ đặc điểm các thanh ghi đồng thời cho các ví dụ đàng hoàn không za? mình tự nhận mình là cpu mình chỉ học được qua các ví dụ không àh!!!!!!!! giúp em với các anh chị ơi giừi qua nich em giùm nha các anh chị "phieudu_cunggio951@yahoo.com.vn"
|
Múi giờ GMT. Hiện tại là 04:18 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