mọi người kiểm tra giúp mình mạch và code với. Mình mô phỏng Protues thì nó chạy nhưng khi làm mạch thì nó k chạy. Mong được mọi người giúp đỡ. Tks
còn đây là code. Mình dùng PORT 3.5 đếm xung trong 15s và xuất kết quả ra LED 7 đoạn :
ORG 000H
MOV DPTR, #LUT
MOV P1, #00000000B // Cho P1 làm cổng xuất
MOV P0, #00000000B // Cho P0 làm cổng xuất
MAIN:
MOV R6, #230D
SETB P3.5 // Cho phép nhập từ P3.5
MOV TMOD, #01100001B // Timer 1 : Counter 1, mode 2 ; Timer 0 mode 2
MOV TL1, #00000000B // Đếm số xung
SETB TR1 // Cho chạy counter 1
BACK:
MOV TH0, #00000000B
MOV TL0, #00000000B
SETB TR0 // Cho timer 0 chạy
HERE:
JNB TF0, HERE // Đợi timer 0 tràn
CLR TR0 // Dừng timer 0
CLR TF0 // Xóa cờ báo tràn timer 0
DJNZ R6, BACK // Lặp lại chương trình con BACK 230 lần
CLR TR1 // Ngưng counter 1
CLR TF0 // Xóa cờ báo tràn timer 0
CLR TF1 // Xóa cờ báo tràn timer 1
ACALL DLOOP
SJMP MAIN // Nhảy về chương trình chính
DLOOP:
MOV R5, #252D
BACK1:
MOV A, TL1 // Copy số đếm ở TL1
MOV B, #4D
MUL AB // Nhân số xung đếm được với 4
MOV B, #100D
DIV AB // Lấy giá trị hàng trăm
ACALL DISPLAY // Lấy mã LED hàng trăm
MOV P0, A // Xuất dữ liệu ra PORT 0
SETB P1.0 // Cho phép hiển thị
ACALL DELAY
ACALL DELAY
MOV A, B
MOV B, #10D
DIV AB // Lấy giá trị hàng chục
CLR P1.0
ACALL DISPLAY // Lấy mã LED hàng chục
MOV P0, A // Xuất dữ liệu ra PORT 0
SETB P1.1 // Cho phép hiển thị
ACALL DELAY
ACALL DELAY
MOV A, B // Lấy giá trị hàng đơn vị
CLR P1.1
ACALL DISPLAY // Lấy mã LED hàng đơn vị
MOV P0, A // Xuất dữ liệu ra PORT 0
SETB P1.2 // Cho phép hiển thị
ACALL DELAY
ACALL DELAY
CLR P1.2
DJNZ R5, BACK1 // Quét 252 lần
RET
DELAY:
MOV R7, #250D // Tạo trễ 0.5ms
DEL1:
DJNZ R7, DEL1
RET
DISPLAY:
MOVC A, @A+DPTR // Lấy mã LED
CPL A
RET
LUT:
DB 3FH
DB 06H
DB 5BH
DB 4FH
DB 66H
DB 6DH
DB 7DH
DB 07H
DB 7FH
DB 6FH
END
còn đây là code. Mình dùng PORT 3.5 đếm xung trong 15s và xuất kết quả ra LED 7 đoạn :
ORG 000H
MOV DPTR, #LUT
MOV P1, #00000000B // Cho P1 làm cổng xuất
MOV P0, #00000000B // Cho P0 làm cổng xuất
MAIN:
MOV R6, #230D
SETB P3.5 // Cho phép nhập từ P3.5
MOV TMOD, #01100001B // Timer 1 : Counter 1, mode 2 ; Timer 0 mode 2
MOV TL1, #00000000B // Đếm số xung
SETB TR1 // Cho chạy counter 1
BACK:
MOV TH0, #00000000B
MOV TL0, #00000000B
SETB TR0 // Cho timer 0 chạy
HERE:
JNB TF0, HERE // Đợi timer 0 tràn
CLR TR0 // Dừng timer 0
CLR TF0 // Xóa cờ báo tràn timer 0
DJNZ R6, BACK // Lặp lại chương trình con BACK 230 lần
CLR TR1 // Ngưng counter 1
CLR TF0 // Xóa cờ báo tràn timer 0
CLR TF1 // Xóa cờ báo tràn timer 1
ACALL DLOOP
SJMP MAIN // Nhảy về chương trình chính
DLOOP:
MOV R5, #252D
BACK1:
MOV A, TL1 // Copy số đếm ở TL1
MOV B, #4D
MUL AB // Nhân số xung đếm được với 4
MOV B, #100D
DIV AB // Lấy giá trị hàng trăm
ACALL DISPLAY // Lấy mã LED hàng trăm
MOV P0, A // Xuất dữ liệu ra PORT 0
SETB P1.0 // Cho phép hiển thị
ACALL DELAY
ACALL DELAY
MOV A, B
MOV B, #10D
DIV AB // Lấy giá trị hàng chục
CLR P1.0
ACALL DISPLAY // Lấy mã LED hàng chục
MOV P0, A // Xuất dữ liệu ra PORT 0
SETB P1.1 // Cho phép hiển thị
ACALL DELAY
ACALL DELAY
MOV A, B // Lấy giá trị hàng đơn vị
CLR P1.1
ACALL DISPLAY // Lấy mã LED hàng đơn vị
MOV P0, A // Xuất dữ liệu ra PORT 0
SETB P1.2 // Cho phép hiển thị
ACALL DELAY
ACALL DELAY
CLR P1.2
DJNZ R5, BACK1 // Quét 252 lần
RET
DELAY:
MOV R7, #250D // Tạo trễ 0.5ms
DEL1:
DJNZ R7, DEL1
RET
DISPLAY:
MOVC A, @A+DPTR // Lấy mã LED
CPL A
RET
LUT:
DB 3FH
DB 06H
DB 5BH
DB 4FH
DB 66H
DB 6DH
DB 7DH
DB 07H
DB 7FH
DB 6FH
END