View Single Post
Old 07-04-2009, 05:17 PM   #5
phandinh
Đệ tử 6 túi
 
Tham gia ngày: Nov 2008
Nơi Cư Ngụ: Di Linh
Bài gửi: 131
:
các lệnh ASM bạn cần chú ý đặc biệt tới 0<= K <=255 và 0 <= F <= 127

bạn xem các ví dụ sau. mình đã test với pisumilator ide. Mình chỉ nhớ nó 1 cách rập khuôn . có rất ít bài viết nói rõ ý nghĩa K & F. bạn nên xem tập lệnh tiếng anh PIC 16F84 .cuón này có ví dụ cụ thể sau mỗi lệnh.
vd1:
;============phan dat bien=============================
D1 EQU 0X20
;===========Phan chuong trình chính======================
ORG 0x00
GOTO MAIN
ORG 0x0005
MAIN
BANKSEL TRISB
CLRF TRISB
BANKSEL PORTB
CLRF PORTB
MOVLW H'FF' ; 0<= k <= 255
MOVWF D1 ; 0 <= f <= 127
CLRW
MOVLW D1 ; 0<= k <= 255
MOVWF PORTB ; 0 <= f <= 127
GOTO $
END
Kết quả : g.tri portb = b ‘00100000’ = h ‘ 20’.
g.tri byte 20h = b ‘ 11111111’ = h ‘ff ’.
################################################## ######################################
vd2:
D1 EQU 0X20
;===========Phan chuong trình chính======================
ORG 0x00
GOTO MAIN
ORG 0x0005
MAIN
BANKSEL TRISB
CLRF TRISB
BANKSEL PORTB
CLRF PORTB
MOVLW H'FF' ; 0<= k <= 255
MOVWF D1 ; 0 <= f <= 127
CLRW
MOVF D1,W ; 0 <= f <= 127
MOVWF PORTB ; 0 <= f <= 127
GOTO $
END
Kết quả : g.tri portb = b ‘11111111’ = h ‘ ff’.
g.tri byte 20h = b ‘ 11111111’ = h ‘ff ’.
################################################## ######################################
vd3:
D1 EQU 0X20
;===========Phan chuong trình chính======================
ORG 0x00
GOTO MAIN
ORG 0x0005
MAIN
BANKSEL TRISB
CLRF TRISB
BANKSEL PORTB
CLRF PORTB
MOVLW H'FF' ; 0<= k <= 255
MOVWF D1 ; 0 <= f <= 127

CLRW
MOVF 0x20,W ; 0 <= f <= 127
MOVWF PORTB ; 0 <= f <= 127
GOTO $
END
Kết quả : g.tri portb = b ‘11111111’ = h ‘ ff’.
g.tri byte 20h = b ‘ 11111111’ = h ‘ff ’.
################################################## ######################################
vd4:
D1 EQU 0X20
;===========Phan chuong trình chính======================
ORG 0x00
GOTO MAIN
ORG 0x0005
MAIN
BANKSEL TRISB
CLRF TRISB
BANKSEL PORTB
CLRF PORTB
MOVLW H'FF' ; 0<= k <= 255
MOVWF 0x20 ; 0 <= f <= 127
CLRW
MOVF 0x20,W ; 0 <= f <= 127
MOVWF PORTB ; 0 <= f <= 127
GOTO $
END
Kết quả : g.tri portb = b ‘11111111’ = h ‘ ff’.
g.tri byte 20h = b ‘ 11111111’ = h ‘ff ’.
################################################## #####################################
0<= k <= 255 : k là hằng số.
0 <= f <= 127 : f là thanh ghi 8 bit.

Có 1 chú ý nhỏ ở vd1 :
MOVLW H'FF' ; 0<= k <= 255 ; copy g.trị .255 vào w
Và MOVLW D1 ; 0<= k <= 255 ; copy g.trị t.ghi d1 vào w, nhưng do ta đã khai báo
‘D1 EQU 0X20’ . nên c.trình hiểu 0x20 là 1 hằng số (g.trị ) chứ ko phải là 1 byte nhớ.

thay đổi nội dung bởi: phandinh, 07-04-2009 lúc 05:23 PM. Lý do: thêm
phandinh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn