kidmaster08
21-09-2010, 12:30 AM
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
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