có bác nào biết cách viết asm để so sánh lớn hơn hay nhỏ hơn giá trị định sẵn không?làm ơn cho mình xin code.CÁM ƠN NHIỀU !!!!!!!!
Thông báo
Collapse
No announcement yet.
so sánh lớn hơn,nhỏ hơn trong ASM
Collapse
X
-
Nguyên văn bởi thaithanhtam Xem bài viếtcó bác nào biết cách viết asm để so sánh lớn hơn hay nhỏ hơn giá trị định sẵn không?làm ơn cho mình xin code.CÁM ƠN NHIỀU !!!!!!!!
nguong equ 100 ; dat nguong theo yeu cau
mov A,giatricansosanh
cjne A,#nguong,khac_nguong
khac_nguong:
;if A < nguong thi C=1
JC nho_hon
;A>=nguong
; Place your code here for >= nguong
sjmp end_sosanh
nho_hon:
; Place your code here for < nguong
end_sosanh:
email:mahaco@fpt.vn
-
Nguyên văn bởi thaithanhtam Xem bài viếtcó bác nào biết cách viết asm để so sánh lớn hơn hay nhỏ hơn giá trị định sẵn không?làm ơn cho mình xin code.CÁM ƠN NHIỀU !!!!!!!!
Ví dụ cho "nhảy nếu A lớn hơn"
Code:;định nghĩa Macro %*DEFINE (JGT(VALUE, LABEL)) ( CJNE A, #%VALUE+1, $+3 JNC %LABEL ) ;Xong, giời thì sử dụng, so sánh A, và 1 số %JGT(55H, LON_HON) ;Chỗ này dành cho chương trình nếu A nhỏ hơn ;.... LON_HON: ;Chỗ này dành cho chương trình nếu lớn hơn ...
Diễn đàn Vi điều khiển:
Comment
-
Nguyên văn bởi thaithanhtam Xem bài viếtnhưng giá trị a của mình luôn biến thiên các bạn ơi,giúp mình nhe!!!!!
mov A,giatricansosanh
giatricansosanh luôn biến thiên theo ý bạn mà, nó là 1 biến chiếm 1 ô nhớ 1 byte trong RAM.
Bạn hãy học ASM hơn nữa nhé, kiến thức của bạn thấy không ổn!
email:mahaco@fpt.vn
Comment
-
Nguyên văn bởi hoctro89xxx Xem bài viếtMẫu đây bạn ạ:
nguong equ 100 ; dat nguong theo yeu cau
mov A,giatricansosanh
cjne A,#nguong,khac_nguong ;(Cái này là so sánh với 100 chứ không phải so sánh với giá trị chứa trong ô nhớ địa chỉ 100)
khac_nguong:
;if A < nguong thi C=1
JC nho_hon
;A>=nguong
; Place your code here for >= nguong
sjmp end_sosanh
nho_hon:
; Place your code here for < nguong
end_sosanh:
nguong equ 100 ; dat nguong theo yeu cau(hằng số so sanh sẽ chứa trong ô nhớ 100
giatricansosanh equ 20h; them như vấy cho bạn ấy dể hiểu(biến để so sánh chứa trong ô nhớ 20h)
mov A,giatricansosanh
cjne A,nguong,khac_nguong
khac_nguong:
;if A < nguong thi C=1
JC nho_hon
;A>=nguong
; Place your code here for >= nguong
sjmp end_sosanh
nho_hon:
; Place your code here for < nguong
end_sosanh:Last edited by phienbinh; 09-06-2008, 14:23.
- 1 like
Comment
-
Nguyên văn bởi thaithanhtam Xem bài viếtcám ơn hai bạn,nhưng mình không biết c,mình muốn hỏi code viết bằng asm.các bạn có thì cho mình xin nhe,cám ơn nhiều lắm.
Comment
-
Nguyên văn bởi thaithanhtam Xem bài viếtcó bác nào biết cách viết asm để so sánh lớn hơn hay nhỏ hơn giá trị định sẵn không?làm ơn cho mình xin code.CÁM ƠN NHIỀU !!!!!!!!
nguong equ r1
giatricanss equ r2
..............................
mov a,nguong
sub a,giatricanss
jc nhohon ;kiểm tra co c để biết giá trị lớn hơn, bằng, hay nhỏ hơn
jz bang ; kiểm tra co z de biet gia tri co bang hay khong
;nếu giatricanss lon hon nguong làm lệnh kế
Ở đây mình dùng lệnh SUB(trừ), lấy giá trị cần so sánh trừ cho ngưỡng, nếu kết quả lớn hơn hoặc bằng thì cờ c = 0, nếu kết quả nhỏ hơn thì cờ c = 1. Như vậy chúng ta đi kiểm tra cờ c thì sẽ biết kết quả lớn hơn hoặc bằng hay nhỏ hơn. Để biết kết quả có bằng không thì ta kiểm tra cờ z, nếu bằng thì cờ z = 1.
Comment
-
hi.. chắc bạn mới đụng vào 89, mà bạn có tài liệu nào về tập lệnh của 89 ko, của thầy tống văn on hoặc các tài liệu trong các trường đại học chẳng hạn.
bạn coi kĩ chỗ giải thích cho lệnh CJNE ở trang 278 trong sách của thầy tống văn on.
cjne x,y,nhãn
x khác y thì nhảy đến nhãn
x=y thì thực hiện lệnh kế.
đồng thời:
c=1 nếu x<y
c=0 nếu x>=y
trong đó
x là a,Rn hoặc @Ri
y là data,Rn...
nhãn: là tên nhãn bạn đặt ở đâu mà muốn chương trình nhảy tới.
và giá trị so sánh ở đây là giá trị nguyên không dấu 8 bit (0-255)
Comment
-
Ngoài chống nhiễu ở phần cứng, thì ở phần mềm bạn viết đoạn code kiểm tra tồn tại của tín hiệu tại cổng nhận sau 1 thời gian nhất định (thường nhiễu có biên độ cao nhưng thời gian tồn tại ngắn), trong thời gian kiểm tra nếu vẫn tồn tại liên tục thì nhận nó là tín hiệu, ngược lại thì coi là nhiểu.
Thí dụ, sau khi vào ngắt ( chân INT0, active logic = 0):
push r0
move r0 # 50
loop1: jb INT0, loop2 ; if INT0=1 > nhiểu, nhảy đến loop2 (bỏ qua).
djnz r0, loop1
------ ; tín hiệu thật vào xử lý
------
loop2: pop r0
reti
Bạn thử xem.
Comment
-
CÁM ƠN CÁC BẠN,BÀI TOÁN CHỐNG NHIỂU CHO NGẮT MÌNH ĐÃ GIẢI QUYẾT XONG RỒI.
Mình chọn ngắt theo mức & cho kiểm tra khi chân ngắt về lại mức 1 mình cho delay khoảng 50ms xong mới thực hiện lệnh trong ngắt,hết nhiểu các bạn ạ.Last edited by thaithanhtam; 23-06-2008, 22:49.
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Kiểm tra biến ápbởi lamvu0677nhân tiện cho mình hỏi thêm về cái phần test hipot (cao áp),là để kiểm tra độ bền cách điện giưa các cuộn dây,mà thấy thông số test thường ở mức 4kvac,vậy nếu mấy con fail đó xài bình thường vẫn dduocj phải không ạ,vì điện mình làm gì lên tới mức đó
-
Channel: Điện tử dành cho người mới bắt đầu
10-11-2024, 08:52 -
-
Trả lời cho Kiểm tra biến ápbởi lamvu0677máy đo số vòng thì cty có ,mà nó to quá,tưởng có máy nào gọn gọn bỏ túi được thì tiện hơn,vì đi lại nhiều...
-
Channel: Điện tử dành cho người mới bắt đầu
10-11-2024, 08:47 -
-
bởi tmcodonMình thấy diễn đàn có chuyên mục quảng cáo rồi mà. Bạn đóng góp để mở luồng riêng
-
Channel: Hướng dẫn sử dụng diễn đàn
09-11-2024, 13:36 -
-
bởi Nicole08Xin chào mọi người, tôi đã sử dụng Flashforge Inventor 2 được gần 5 năm và rất hài lòng với nó, nhưng tuần trước đã xảy ra sự cố. Có vẻ như động cơ bước đưa sợi in vào đầu nóng đã bị hỏng. Mọi thứ khác có vẻ ổn trên máy...
-
Channel: Điện tử dành cho người mới bắt đầu
09-11-2024, 12:55 -
Comment