tình hình là kithuatmaytinh.net tạm not found nên mình lập ra topic này để các bạn cùng chia sẻ học môn vi xử lý- vi điều khiển này
đây là part2 trong lab1:
ORG 0000H
MOV A, #7FH
MOV R0, #FFH
LOOP1: DJNZ R0, LOOP2// NHẢY TỚI THỰC HIỆN LOPP2 ĐỒNG THỜI GIẢM RO ĐI 1 ĐƠN VỊ,LẶP LẠI CHO ĐẾN KHI R0=0.
MOV 90H, #FFH ; 90H is byte address of Port3.// GÁN FF CHO P1
RL A// DỊCH CHUYÊN A SANG TRÁI
ANL 90H, A //AND P1 VỚI A
MOV R0, #FFH
SJMP LOOP1
LOOP2:
MOV 8AH, #LOW(-10000) ; 8AH is byte address of register
TL0
MOV 8CH, #HIGH(-10000); 8CH is byte address of register
TH0
//TẠO TÍN HIỆU DELAY 10MS
MOV 89H,#01H ; 89H is byte address of register TMOD// BẬT THANH GHI TMOD
SETB 8CH ; 8CH is bit address of bit TR0// SETB TR0( TIMER RUN 0 ) LÊN 1 ĐỂ CHƯƠNG TRÌNH BẮT ĐẦU ĐẾM
LOOP3: JNB 8DH, LOOP3 ; 8DH is bit address of bit TF0// LÊNH KIỂM TRA BIT TRÀN TF0- ( TIMER FLAG) -
CLR 8DH// NGƯNG TL0
CLR 8CH// NGƯNG TH0
SJMP LOOP1// LẶP LOOP1 VÔ ĐIỀU KIỆN
END
hoặc mình cũng có thể viết như sau:
#include <sfr52.inc>
ORG 0H
MOV P1,#FFH
ACALL DELAY10MS
MOV A,#11111110B
XOAYA:
ACALL DELAY10MS
RL A
MOV P1,A
JMP XOAYA
;CHUONG TRINH DELAY10MS
DELAY10MS: MOV TH0,#HIGHT(-10000)
MOV TL0,#LOW(-10000)
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
RET
END
/// nếu không viết ct delay các bạn có thể dùng chương trình delay mặc định là 1s
/////////////////////////////
đây là mình tự làm,bạn nào nếu thấy mình làm sai thì cùng sửa nha.
và ai biết làm bài part3,4 thì share lên cho mọi người tham khảo nha, bạn nào chỉ mình là: nếu dùng button thì như thế nào? tác động ngắt ngoài ( dùng counter hay sao?) còn nếu không dùng button thì mình có thể làm được!
đây là part2 trong lab1:
ORG 0000H
MOV A, #7FH
MOV R0, #FFH
LOOP1: DJNZ R0, LOOP2// NHẢY TỚI THỰC HIỆN LOPP2 ĐỒNG THỜI GIẢM RO ĐI 1 ĐƠN VỊ,LẶP LẠI CHO ĐẾN KHI R0=0.
MOV 90H, #FFH ; 90H is byte address of Port3.// GÁN FF CHO P1
RL A// DỊCH CHUYÊN A SANG TRÁI
ANL 90H, A //AND P1 VỚI A
MOV R0, #FFH
SJMP LOOP1
LOOP2:
MOV 8AH, #LOW(-10000) ; 8AH is byte address of register
TL0
MOV 8CH, #HIGH(-10000); 8CH is byte address of register
TH0
//TẠO TÍN HIỆU DELAY 10MS
MOV 89H,#01H ; 89H is byte address of register TMOD// BẬT THANH GHI TMOD
SETB 8CH ; 8CH is bit address of bit TR0// SETB TR0( TIMER RUN 0 ) LÊN 1 ĐỂ CHƯƠNG TRÌNH BẮT ĐẦU ĐẾM
LOOP3: JNB 8DH, LOOP3 ; 8DH is bit address of bit TF0// LÊNH KIỂM TRA BIT TRÀN TF0- ( TIMER FLAG) -
CLR 8DH// NGƯNG TL0
CLR 8CH// NGƯNG TH0
SJMP LOOP1// LẶP LOOP1 VÔ ĐIỀU KIỆN
END
hoặc mình cũng có thể viết như sau:
#include <sfr52.inc>
ORG 0H
MOV P1,#FFH
ACALL DELAY10MS
MOV A,#11111110B
XOAYA:
ACALL DELAY10MS
RL A
MOV P1,A
JMP XOAYA
;CHUONG TRINH DELAY10MS
DELAY10MS: MOV TH0,#HIGHT(-10000)
MOV TL0,#LOW(-10000)
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
RET
END
/// nếu không viết ct delay các bạn có thể dùng chương trình delay mặc định là 1s
/////////////////////////////
đây là mình tự làm,bạn nào nếu thấy mình làm sai thì cùng sửa nha.
và ai biết làm bài part3,4 thì share lên cho mọi người tham khảo nha, bạn nào chỉ mình là: nếu dùng button thì như thế nào? tác động ngắt ngoài ( dùng counter hay sao?) còn nếu không dùng button thì mình có thể làm được!
Comment