View Single Post
Old 28-08-2009, 07:51 PM   #11
congtri91
Đệ tử 3 túi
 
Tham gia ngày: Jan 2009
Bài gửi: 59
:
Trích:
Nguyên văn bởi ngocthanh07 View Post
Hằng số và Biến số khác nhau ở chỗ nào tin rằng nếu bạn đã từng học hết lớp 7 đã hiểu được. Chữ Hằng có nghĩa là "không thay đổi" còn chữ biến có nghĩa "thay đổi được"
cái vấn đề chính ở đây là mình thấy trong các tut mà mình down về thì chưa nói cụ thể về việc sử dụng nó thế nào cho đúng. đây là một đoạn trích dẫn trong bài vdk pic học nhanh đi vào ưng dụng:

" Nếu hiểu nôm na theo cách này, bạn có thể sẽ dễ hiểu nó hơn, một hằng là một giá trị. Giá trị đó có thể nằm trong thanh ghi dữ liệu (bộ nhớ dữ liệu), nhưng cũng có thể nằm trong lệnh điều khiển (bộ nhớ chương trình). Điều này khẳng định rằng, hằng là một giá trị.
Một khi bạn đặt một tên nào đó, để đại diện cho một hằng số, có nghĩa là thay vì bạn viết cái giá trị đó, thì bạn viết cái tên đại diện đó, để dễ nhớ. Chẳng hạn, bạn viết chữ pi, đại diện cho hằng số có giá trị 3.1415926....
Trong khi đó, nếu bạn đặt một biến pi, thì có nghĩa là bạn xác định địa chỉ của thanh ghi dữ liệu nào đó, mà mỗi khi bạn truy xuất đến biến pi, có nghĩa là bạn đang thao tác với thanh ghi ở địa chỉ mà biến pi đại diện. Ví dụ: bạn đặt biến pi ở thanh ghi 0x20 chẳng hạn. Điều đó có nghĩa là khi ban làm gì với biến pi, chính là bạn đang làm việc với thanh ghi ở địa chỉ 0x20.
Nhưng bạn sẽ thấy rằng, vậy biến pi và hằng số pi có gì khác nhau? Bây giờ biến pi và hằng pi cũng đều mang giá trị cả. Nhưng các bạn nên nhớ, trong câu lệnh lúc nào vị trí của biến (thanh ghi) F, và vị trí của hằng số k (trong cấu trúc một câu lệnh MPASM, tôi sẽ post lại bài này từ dddt). có sự phân biệt rõ ràng.
Vậy tùy theo vị trí bạn đặt nó ở đâu, nó sẽ là biến, hoặc là hằng. Nếu là biến, nó chỉ mang giá trị của dịa chỉ của thanh ghi nằm trong bộ nhớ dữ liệu, nếu là hằng, nó nằm đâu cũng được kể cả ở bộ nhớ dữ liệu và bộ nhớ chương trình."

tuy nhiên trong một đoạn code mà mình đọc trong tut khác cũng downd ở picvn thì lại thế này

processor 16f877a
include <p16f877a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC &
_WRT_OFF & _LVP_OFF & _CPD_OFF
;---------------------------------------------------------------------------------------------------------------
;khai báo hằng
;---------------------------------------------------------------------------------------------------------------
SW1 EQU 0
SW2 EQU 1
SW3 EQU 2
SW4 EQU 3
LED1 EQU 4
LED2 EQU 5
LED3 EQU 6
LED4 EQU 7
;----------------------------------------------------------------------------------------------------------------
;Khai báo biến
;----------------------------------------------------------------------------------------------------------------
count EQU 0x20 ; biến dùng cho chương trình dịch led
count1 EQU 0x21 ; các biến dùng cho chuơng trình delay
counta EQU 0x22
countb EQU 0x23

;chuơng trình
;----------------------------------------------------------------------------------------------------

ORG 0x000
GOTO start
start
.....................
.....................
.....................
end


nếu như trên thì lệnh equ đều được đặt tại cùng một vị trí, vậy thì cái nào mới là hằng cái nào là biến, có sự khác biệt nào ở đây
congtri91 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn