Trích:
Trong 8051 co cau lenh: CJNE A,#number, diachi
Cau lenh nay dung de so sanh mot thanh ghi voi mot so va rat hay duoc dung trong ASM(8051) vay cac bac hay cho biet su tuong duong trong MPASM
Huong cua em dang dinh giai quyet : tru W cho so can so sanh, xet bit Z neu = 1 thi nhay
Nhung cach nay cung kha dai, va cung ko tien loi lam
|
Khi lập trình cho VĐK, ta rất hay gặp những câu lệnh so sánh, Và trong PIC ko có hỗ trợ so sách giữa thanh ghi với một số, thanh ghi với thanh ghi. Để làm được điều này ta sẽ phải gây dựng bằng phần mêm.
Để so sánh một thanh ghi với một số, nếu ko bằng thì nhảy tới vị trí con trỏ địa chỉ nào đó ta có thể làm như sau:
(VD cho việc so sánh thanh ghi ACC ( địa chỉ 0x20 trong ram ) với số 0x05 , nếu ko bằng thì nhẩy tới NEXT_INS )
PHP Code:
ACC EQU 0x20
MAIN
.........
MOVLW 0x05
SUBWF ACC,W
BTFSS STATUS,Z
GOTO NEXT_INS
.....................
NEXT_INS
Và mỗi lần so sánh ta lại phải tương nguyên cái bộ khung ấy vào. Sẽ rất mệt.
Trong Mplab có hỗ trợ chế độ Macro, tức là có sự thay thế tương ứng nhờ trình dịch. Như vậy ta chỉ cần khai báo như sau
PHP Code:
CJNE: MACRO THANHGHI,SO,CONTRO
MOVLW SO
SUBWF THANHGHI,W
BTFSS STATUS,Z
GOTO CONTRO
ENDM
Voi VD khi dùng ta chỉ việc gọi ra:
PHP Code:
CJNE ACC,0x05, NEXT_INS
......
NEXT_INS
Với việc thay thế này các bạn sẽ thấy nhàn hơn rất nhiều trong việc lập trình. Băng một vài phép biến đổi ta có thể thêm vài chương trình nữa . Chắc chắn sau này sẽ được sử dụng rất linh hoạt
PHP Code:
CJNE: MACRO THANHGHI,SO,CONTRO
MOVLW SO
SUBWF THANHGHI,W
BTFSS STATUS,Z
GOTO CONTRO
ENDM
NCJNE: MACRO THANHGHI,SO,CONTRO1
MOVLW SO
SUBWF THANHGHI,W
BTFSC STATUS,Z
GOTO CONTRO1
ENDM
FJNE: MACRO THANHGHI1,THANHGHI2,CONTRO
MOVF THANHGHI2,W
SUBWF THANHGHI1,W
BTFSS STATUS,Z
GOTO CONTRO
ENDM
FJE: MACRO THANHGHI1,THANHGHI2,CONTRO
MOVF THANHGHI2,W
SUBWF THANHGHI1,W
BTFSC STATUS,Z
GOTO CONTRO
ENDM
CJNE là so sánh một số với thanh ghi, nếu ko băng thì nhảy tới vị trí con trỏ
NCJNE ngược lại với câu lệnh trên , nếu bằng thì nhảy tới vị trí con trỏ
FJNE là so sánh thanh ghi với thanh ghi , nếu ko bằng nhau thì nhảy tới vị trí con trỏ
FJE ngược lại nếu bằng thỉ nhảy tới vị trí con trỏ
Đây là công cụ tôi rất hay dùng trong các chương trình ứng dụng gần đây, với nó tôi thấy thoải mái và linh hoạt lên rất nhiều. Mong giúp ích được gì đó cho các bạn