![]() |
lỗi ngắt timer0
1 Attachment(s)
chào mọi người hiện giờ mình đang bắt đầu học pic nhưng bị lỗi mong các đàn anh giúp đỡ.
em viết một chương trình đếm đơn giản từ 0->99. mà tại sao khi em gọi trong hàm delay nếu cho "d'50'" thì mạch chạy đúng nhưng khi cho những giá trị khác thì lại sai. mong các đàn anh giúp đỡ Đây là code của em LIST P=16F877A #INCLUDE P16F877A.INC ; khai bao bien COUNT1 EQU 0x20 COUNTA EQU 0x21 COUNTB EQU 0x22 HANGCHUC EQU 0x23 HANGDONVI EQU 0x24 W_SAVE EQU 0x25 PCLATH_save EQU 0x26 STATUS_save EQU 0x27 FSR_SAVE EQU 0x28 ORG 0x004 GOTO ISR ISR ;CHUONG TRINH NGAT MOVWF W_SAVE SWAPF STATUS,W CLRF STATUS MOVWF STATUS_save MOVF PCLATH,W MOVWF PCLATH_save CLRF PCLATH MOVF FSR,W MOVWF FSR_SAVE BTFSS INTCON,TMR0IF GOTO exit_int BCF INTCON,TMR0IF ;------------------------------------------------ ; CÁC THAO TÁC CHÍNH TRONG NGAT INCF HANGDONVI,1 MOVLW 0x0A XORWF HANGDONVI,0 BTFSS STATUS,Z GOTO exit_int CLRF HANGDONVI INCF HANGCHUC,1 MOVLW 0x0A XORWF HANGCHUC,0 BTFSS STATUS,Z GOTO exit_int CLRF HANGCHUC GOTO exit_int ;---------------------------- ;ket thuc ngat exit_int MOVF FSR_SAVE,W MOVWF FSR MOVF PCLATH_save,W MOVWF PCLATH SWAPF STATUS_save,W MOVWF STATUS SWAPF W_SAVE,1 SWAPF W_SAVE,0 RETFIE ;----------------------------; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;----------------------------; ;chuong trinh chinh ORG 0x00 GOTO MAIN ORG 0x050 MAIN ;khoi taoj port BCF STATUS,RP1 BSF STATUS,RP0 MOVLW 0x00 MOVWF TRISD MOVLW b'11111100' MOVWF TRISB BCF STATUS,RP0 CLRF PORTD MOVLW b'00000011' MOVWF PORTB ; KHOI TAO TIME0 CLRF TMR0 CLRF INTCON BSF STATUS,RP0 MOVLW b'10000001' MOVWF OPTION_REG BCF STATUS,RP0 BSF INTCON,TMR0IE BSF INTCON,PEIE BSF INTCON,GIE ;khoi tao bien CLRF HANGCHUC CLRF HANGDONVI START CALL HIENTHI GOTO START HIENTHI MOVF HANGCHUC,0 CALL TABLE MOVWF PORTD MOVLW b'11111101' MOVWF PORTB CALL DELAY CLRF PORTB MOVF HANGDONVI,0 CALL TABLE MOVWF PORTD MOVLW b'11111110' MOVWF PORTB CALL DELAY CLRF PORTB RETURN TABLE ADDWF PCL,1 RETLW 0xC0 RETLW 0xF9 RETLW 0xA4 RETLW 0xB0 RETLW 0x99 RETLW 0x92 RETLW 0x82 RETLW 0xF8 RETLW 0x80 RETLW 0x90 DELAY MOVLW d'60' MOVWF COUNT1 d2 MOVLW 0xC7 MOVWF COUNTA MOVLW 0x01 MOVWF COUNTB delay_1 DECFSZ COUNTA,1 GOTO $+2 DECFSZ COUNTB,1 GOTO delay_1 DECFSZ COUNT1,1 GOTO d2 RETURN END ; c |
có anh em nào giúp đỡ với đang bí quá
|
Hic, code ASM thì mình ko code.
Nhưng mình góp ý nếu 50 mà chạy được, tức là code tạm ổn. Nhưng tại sao giá trị khác ko đc, thì bạn nên xem lại ? Ở đây cái gì ko chạy đc ? LEd bị nháy hay là phần mềm ko chạy ? Thân. |
cảm ơn bạn. code nếu thay bằng giá trị khác thì nó nhảy lung tung. hàng đơn vị thì nhảy đúng nhưng hàng chục thì nhảy 2,4,6,8,1,3,5,7,9..... đại loại là nhảy lung tung cái hàng chục. còn nếu đặt "d'50' thì nhảy đúng nhưng bị nháy do giá trị d lớn nên thời gian delay lớn led bị nháy. không liên tục.
|
Trích:
khắc phục:MOVLW b'10000111' ;PS2:PS0: Prescaler Rate Select bits =1:256 MOVWF OPTION_REG |
Trích:
Code:
|
Cảm ơn bạn DTM nhiều.Mình đã làm chạy được rồi nhưng trong chương trình bạn viết mình có sửa lại một tí lúc đầu chạy theo code bạn sửa thì chỉ đếm được đến 10 thôi và không đếm lên tiếp được. sau đó mình có bỏ đoạn code bạn thêm vào chỉ giữ lại
MOVLW b'00000111' MOVWF OPTION_REG hai dòng code này thì mạch chạy đúng. Vậy nếu như không bỏ những đoạn code kia của bạn ; CÁC THAO TÁC CHÍNH TRONG NGAT DECFSZ dem,1 GOTO exit_int và MOVLW D'20';toc do dem MOVWF dem thì mình có cách nào để sửa code cho chay đúng ko. MÌnh cũng đã thử nhưng ko được. Thứ hai là bạn nói "Thời gian delay > thời gian time0 tràn." Vậy làm thế nào để mình tránh được tình huống này. Có phải là mình phải đặt PS2:PS0 là "111" là tốt nhất ko. Mong nhận được sự giúp đỡ từ DTM và các anh em khác. Cảm ơn vì sự giúp đỡ. |
Trích:
Code:
LIST P=16F877A hàm delay không cho quá lớn tránh để led hiển thị sẽ bị nháy. |
Vậy cảm ơn DTM nhiều. Bạn có thể cho mình mail của bạn được ko để có gì khó khăn trong quá trình mình tự học pic này nhờ bạn giúp được ko. Cảm ơn Bạn một lần nữa
|
1 Attachment(s)
Lâu rồi không viết bắng asm hồi mới đầu học toàn viết bang asm bây giờ mình toàn viết c .nhưng mà lục lại lúc trước viết bang asm về timer0 này .bạn THỬ XEM có giúp dc gj không nhé
|
Múi giờ GMT. Hiện tại là 10:49 AM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam