khong hieu sai o dau
các bác cho em hỏi tý
em muốn tao ra một chương trình trễ dài 2 phút để điều khiển mở cho rơ le, tuy nhiên em viết chương trình của em như sau:
processor 16f877a
include <p16f877a.INC>
TG1 EQU 0X20
TG2 EQU 0X21
TG3 EQU 0X22
org 0x000
bsf STATUS,RP0
bcf STATUS,RP1
MOVLW 0X00
MOVWF TRISB
BCF STATUS,RP0
MOVLW 0X01
MOVWF PORTB gửi ra chan rb0 bit 1
CALL DELAY gọi trễ
MOVLW 0X00
MOVWF PORTB
LOOP GOTO LOOP ;treo chương trình ket thuc chuong trinh tai day
DELAY
MOVLW x ;x y z la cac gia tri tong quat
MOVWF TG1
MOVLW y
MOVWF TG2
MOVLW z
MOVWF TG3
LABLE1
DECFSZ TG1
GOTO LABLE2
GOTO EXIT
LABLE2
DECFSZ TG2
GOTO LABLE3
MOVLW y
MOVWF TG2
GOTO LABLE1
LABLE3
DECFSZ TG3
GOTO LABLE3
MOVLW z
MOVWF TG3
GOTO LABLE2
EXIT
RETURN
END
theo em tinh toán thi mỗi lệnh goto cho 2 chu kỳ lệnh, như thế khi cho số x y z cho trước em tính được thời gian trễ delay sẽ là
{3(x-1){(3y-1)[3(z-1)+4]+4} + 10 }*4/4Mhz (vơi bộ dao động 4 Mhz)
vậy khi cho x,y z =255 thì phải được thời gian trễ rất lớn 1 phút
tuy nhiên khi em mô phỏng trên protelus chưa đên 1 phút chân RB0 đã chuyển trạng thái từ 0 sang 1 rồi. em thử nghĩ ra 3 vòng lap long nhau nhu thoi hoc pascal ay ma
mấy bác kiểm tra thuật toán dùm em được không, vì mới học pic nên em hơi bỡ ngơ,hic
|