|
Tài trợ cho PIC Vietnam |
MPASM Lập trình bằng hợp ngữ là một việc làm vô cùng vất vả, tuy nhiên, để hiểu và làm việc với vi điều khiển, hợp ngữ trở thành một công cụ khá đắc lực ... |
|
Ðiều Chỉnh | Xếp Bài |
15-02-2007, 02:47 PM | #16 |
PIC Bang chủ
|
Trong hai cách sửa XORLW, thì cách đảo INCF với MOVF của bạn hungpq hiệu quả hơn và chuẩn hơn so với cách sửa XORLW 0x00.
Tuy nhiên bạn dùng lệnh RETURN rất không ổn. Bản thân lệnh RETURN nó không làm gì hết, nhưng có có một nhiệm vụ là lôi cái Top of Stack ra và nhảy tới đó. Giả sử đoạn chương trình trên của bạn, bạn viết dạng CALL thì lập tức nó nhảy về chỗ CALL đó mà không thực hiện tiếp lệnh bên dưới. Nhưng nếu bạn không sử dụng CALL, và TOS đang trống!!? Do vậy, cách viết an toàn là GOTO $+3 Rồi nếu bạn dùng CALL thì ngay sau dòng GOTO LOOP, bạn sử dụng RETURN. Nếu bạn không dùng CALL, thì bạn có thể làm gì đó cũng được, ngay sau đó. Hồi F viết, F hay đặt một cái nhãn chỗ RETURN và nếu cần RETURN thì F nhảy tới đó. Viết như vậy để giữ cấu trúc: Code:
CALL LOOP ... ... LOOP .. RETLOOP RETURN Về phần bạn hỏi về ghi WR, đã gần 3 năm F không đụng tới PIC, cho nên F không thực sự nhớ rõ lắm. Tuy nhiên, bạn thử kiểm tra lại đoạn này. Đó là khi ghi Flash thì WR sẽ được tự xóa, và nó hoàn toàn được thực hiện bởi phần cứng. Khi đó nó không hề được xử lý gì cả. Có nghĩa là việc thì bạn có quyền bật trong chương trình, nhưng sau đó, thì bạn sẽ không thấy gì cả mà tự động tắt. Trong MPLAB, nó cho bạn xem EEPROM bằng MPLAB SIM. Vì vậy, bạn có thể theo dõi kết quả EEPROM có được ghi hay chưa. Bạn cũng có thể xem PROGRAMME MEMORY. Bạn chọn View và chọn các mục tương ứng để quan sát tại các địa chỉ mà bạn tương tác. Chúc vui
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
17-02-2007, 08:49 AM | #17 |
Trưởng lão PIC bang
|
Tôi xin lỗi vì một số nhận định không chính xác ở các post trước. Tôi (và có lẽ nhiều người dùng lâu năm) thường tin tưởng một cách chủ quan vào các datasheet của nhà sản xuất.
Tôi xin xác nhận là những ý kiến của bạn hungpq về sai sót của đoạn code mẫu trong datasheet của PIC16F87xA là chính xác: đoạn code đó chỉ thực thi 1 lần nếu đúng theo các điều kiện ban đầu được đặt ra, và cách sửa tốt là bỏ lệnh XOR và đổi BTFSC thành BTFSS. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 thay đổi nội dung bởi: namqn, 18-02-2007 lúc 12:36 AM. Lý do: bổ sung thông tin |
22-02-2007, 10:18 AM | #18 |
Đệ tử 1 túi
Tham gia ngày: Nov 2006
Bài gửi: 19
: |
Chào các bác mải ăn tết lâu quá nay mới ghé thăm, cáo lỗi các bác. Thưa các bác như vậy là chúng ta đã thống nhất với nhau rằng đoạn code mẫu thực hiện ghi vào bộ nhớ FLASH trong datasheet của con PIC16f877A là bị sai. Thú thực là tôi không bất ngờ với việc code mẫu trong các datasheet bị sai bởi vì tôi đã gặp rất nhiều lần rồi. Còn việc sửa lại đoạn code này như thế nào cho hợp lý thì theo tôi không cần thiết. Bởi vì với mỗi ứng dụng, với mỗi chương trình, đều có những cách thể hiện riêng của nó để cho nó tối ưu nhất. Đúng như vậy không các bác. Còn nếu có thể thì các bác cho một yêu cầu về một hàm ghi dữ liệu vào bộ nhớ Flash của con 16f877a để mọi người cùng thảo luận và xây dựng.
|
22-02-2007, 04:06 PM | #19 |
PIC Bang chủ
|
Trong datasheet thực tế là sai rất nhiều chỗ, lúc trước F mở ra cái box MPASM này là có ý đồ để các bạn viết MPASM và chuẩn hóa lại các đoạn code.
Thực tế như các bạn thấy, nếu như F có viết những lời mào đầu, thì giả sử như có đúng, có sai... Như vậy, nếu F có viết thì cũng làm sao bằng cái kho datasheet của Microchip, và cũng không thể bằng được cái kho thư viện thuật toán của piclist. Tuy nhiên, một điều hơi sai ý đồ, đó là vì nghĩ như vậy, cho nên F dành thời gian ban đầu, tập trung vào Cơ bản về PIC, và chính cái tên cơ bản về PIC cũng thu hút rất nhiều người đọc. Cuối cùng, ngay cả bài viết này, các bạn cũng tập trung vào box Cơ bản về PIC này, mà không chú ý viết bài ở phần MPASM Một số vấn đề về thuật toán cao cấp hơn, vd như các bạn chưa ai thử viết một mạch lọc bằng MPASM, hoặc viết các đoạn biến đổi số,... Hãy bắt đầu bằng các thảo luận ở đây nếu các bạn muốn. Chúc vui.
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
27-02-2007, 02:17 PM | #20 |
Đệ tử 1 túi
Tham gia ngày: Nov 2006
Bài gửi: 19
: |
Thực ra ở đây ý của tôi là muốn mọi người cùng xây dựng một hàm ghi số liệu vào bộ nhớ Flash của con 16f877a, để cho mọi người có nhu cầu sử dụng thì có thể lấy về để dùng. Bởi vì tôi nghĩ rằng có nhiều người làm trong lĩnh vực thu thập số liệu và điều khiển phân tán (SCADA), cho nên sẽ cần phải ghi, lưu trữ số liệu. Còn đối với các bài toán dạng như xây dựng các bộ lọc số, biến đổi số... thì có lẽ phải dùng công cụ khác thì mới có hiệu quả hơn.
|
27-02-2007, 04:58 PM | #21 |
PIC Bang chủ
|
Mình ủng hộ hoạt động này của bạn, mình sẽ dán luồng này lên cao dạng Chú ý để hỗ trợ hoạt động của bạn.
Chúng ta có thể cùng nhau xây dựng từ từ, và F mong rằng hoạt động này sẽ được sự ủng hộ của các thành viên. Chúc vui
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
03-03-2007, 03:38 PM | #22 |
Đệ tử 7 túi
Tham gia ngày: May 2005
Bài gửi: 258
: |
Ví Dụ Ghi Dọc:
Code:
#INCLUDE "P16F877A.INC" __CONFIG 0x3F72 CBLOCK 0x20 BYTE_CAO BYTE_THAP TAM DU_LIEU endc ;*************************************** ;********* MACRO DEFINITIONS *********** ;*************************************** INCLUDE "BANK.INC" ;*************************************** org 0000 BANK0 MOVLW B'0000010' MOVWF BYTE_CAO MOVLW B'00000000' MOVWF BYTE_THAP MOVLW B'00000000' MOVWF DU_LIEU BANK1 MOVLW .00 MOVWF TRISB CALL DL CALL DL BANK0 MOVF BYTE_CAO,0 BANK2 MOVWF EEADRH BANK0 MOVF BYTE_THAP,0 BANK2 MOVWF EEADR LOOP BANK0 MOVF DU_LIEU,0 BANK2 MOVWF EEDATH MOVWF EEDATA BANK3 BSF EECON1,EEPGD BSF EECON1,WREN BCF INTCON,GIE MOVLW 0x55 MOVWF EECON2 MOVLW 0xAA MOVWF EECON2 BSF EECON1,WR nop nop BCF EECON1,WREN BANK2 MOVF EEADR,W ANDLW 0x03 XORLW 0x03 BTFSC STATUS,Z ; GOTO DOC_DU_LIEU INCF EEADR,1 BANK0 INCF DU_LIEU,1 GOTO LOOP DOC_DU_LIEU LAP_LAI BANK0 MOVLW .4 MOVWF TAM BANK2 MOVLW 0xFF MOVWF EEDATA BANK0 MOVF BYTE_CAO,0 BANK2 MOVWF EEADRH BANK0 MOVF BYTE_THAP,0 BANK2 MOVWF EEADR LAP BANK3 BSF EECON1,EEPGD BSF EECON1,RD NOP NOP BCF EECON1,RD BANK2 MOVF EEDATA,0 BANK0 MOVWF PORTB;XUAT DU LIEU RA PORTB CALL DL BANK2 INCF EEADR,1 BANK0 DECFSZ TAM,1 GOTO LAP GOTO LAP_LAI ;******DL********* DL BANK0 CLRF T1CON CLRF TMR1H CLRF TMR1H CLRF INTCON BANK1 CLRF PIE1 BANK0 CLRF PIR1 MOVLW 0x30 ;1:8 MOVWF T1CON BSF T1CON,TMR1ON CHO BTFSS PIR1,TMR1IF GOTO CHO BCF T1CON,TMR1ON BCF PIR1,TMR1IF CLRF TMR1H CLRF TMR1H RETLW .00 END thay đổi nội dung bởi: namqn, 03-03-2007 lúc 07:06 PM. |
05-03-2007, 05:15 PM | #23 |
Đệ tử 1 túi
Tham gia ngày: Nov 2006
Bài gửi: 19
: |
Dạo này bận quá đã không xây dựng được một hàm ghi dữ liệu vào bộ nhớ FLASH của con 16f877a được để cho các bác cho ý kiến. Bác TDM và các bác thân mến tôi định xây dựng một hàm ghi sao cho về mặt cấu trúc phải rõ ràng, chặt chẽ, code ngắn gọn, tốc độ nhanh, và dễ sử dụng để nhiều người sử dụng được. Đại loại như thế này.
- Các tham số đầu vào của hàm: + Dữ liệu cần ghi. + Địa chỉ ghi dữ liệu. + ................ - Các tham số đầu ra: + Kết quả ghi + ............... - Nội dung cơ bản của hàm: + Kiểm tra các tham số đầu vào. + Ghi dữ liệu. + Trả kết quả. Mong các bác chỉ giúp xem như thế có được chưa, cần bổ sung thêm bớt gì không? Nếu được mong các bác cùng xây dựng giúp? Cám ơn các bác nhiều. |
05-03-2007, 05:33 PM | #24 |
PIC Bang chủ
|
Nếu viết thì nên viết dạng gọi hàm. Chúng ta cần thống nhất một số thông số như sau:
Dữ liệu vào: DATATOROM Địa chỉ ROM: ROMADDR Tên hàm ghi: SAVETOROM Dữ liệu ra: ROMTODATA Tên hàm đọc: READFRROM Quá trình ghi sẽ được thực hiện như sau: 1) Chọn giá trị ROMADDR 2) Ghi giá trị từ biến bất kỳ vào DATATOROM 3) CALL SAVETOROM Quá trình đọc sẽ được thực hiện như sau: 1) Chọn giá trị ROMADDR 2) CALL READFRROM (dữ liệu đã nằm trong biến ROMTODATA) 3) Chuyển dữ liệu từ ROMTODATA vào biến cần dùng F nghĩ, trước tiên cần thực hiện cái việc đơn giản này trước, sau đó, sẽ mở rộng lên, cho phép ghi mảng dữ liệu, và khai báo mảng. Sau đó sẽ mở rộng ra ghi nhiều mảng. Chúc vui.
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
05-03-2007, 05:34 PM | #25 | |
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
06-03-2007, 08:48 AM | #26 |
Đệ tử 1 túi
Tham gia ngày: Nov 2006
Bài gửi: 19
: |
Cám ơn các bác đã góp ý. Tôi nghĩ rằng trước tiên chỉ cần xây dựng một hàm ghi thật cơ bản trước sau đó mới thực hiện các hàm tiếp theo. Để xây dựng hàm ghi này cần phải dựa vào đặc điểm bộ nhớ flash của con 16f877a: đó là phải ghi đồng thời liên tiếp 4 Word.
Còn về gợi ý của bác namqn để có thể ghi vào địa chỉ bất kỳ trong vùng bộ nhớ thì hoàn toàn có thể thực hiện được không khó khăn gì lắm. Nhưng tôi nghĩ rằng trước tiên cần xây dựng một hàm ghi thật cơ bản trước đã. |
28-10-2009, 04:40 PM | #27 |
Nhập môn đệ tử
Tham gia ngày: Nov 2008
Bài gửi: 4
: |
Flash Program memnory!
|
28-10-2009, 04:43 PM | #28 | |
Nhập môn đệ tử
Tham gia ngày: Nov 2008
Bài gửi: 4
: |
Flash Program memnory!
Trích:
|
|
|
|
Similar Threads | ||||
Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
Chuỗi được lưu trong Flash | bien_van_khat | Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) | 24 | 15-12-2010 09:43 AM |
về Pickit 1 FLASH Starter Kit | hawinter | Cơ bản về vi điều khiển và PIC | 2 | 19-12-2006 01:16 AM |