PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 01-07-2011, 05:49 PM   #1
thiengiang
Nhập môn đệ tử
 
Tham gia ngày: Nov 2009
Bài gửi: 5
:
lỗi ngắt timer0

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
Hình Kèm Theo
File Type: jpg Untitled.jpg (114.6 KB, 45 lần tải)
thiengiang vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-07-2011, 03:57 PM   #2
thiengiang
Nhập môn đệ tử
 
Tham gia ngày: Nov 2009
Bài gửi: 5
:
có anh em nào giúp đỡ với đang bí quá
thiengiang vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-07-2011, 05:18 PM   #3
danghien719
Đệ tử 3 túi
 
danghien719's Avatar
 
Tham gia ngày: Jan 2010
Bài gửi: 52
:
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.
__________________
HIENCLUBVN -Naval Academy
danghien719 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-07-2011, 12:24 AM   #4
thiengiang
Nhập môn đệ tử
 
Tham gia ngày: Nov 2009
Bài gửi: 5
:
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.
thiengiang vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-07-2011, 11:47 AM   #5
tdm
Đệ tử 7 túi
 
Tham gia ngày: May 2005
Bài gửi: 258
:
Trích:
Nguyên văn bởi thiengiang View Post
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.
Thời gian delay > thời gian time0 tràn.
khắc phục:MOVLW b'10000111' ;PS2:PS0: Prescaler Rate Select bits =1:256
MOVWF OPTION_REG
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề.
tdm vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-07-2011, 12:05 PM   #6
tdm
Đệ tử 7 túi
 
Tham gia ngày: May 2005
Bài gửi: 258
:
Trích:
Nguyên văn bởi thiengiang View Post
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.
để tăng giảm tốc độ đếm thỉ sử lí trong ngắt (bạn làm theo cách sau led không bao giờ bị nháy)
Code:
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 
dem EQU 0x29
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
DECFSZ dem,1
GOTO exit_int
;******************************
INCF HANGDONVI,1
MOVLW 0x0A
XORWF HANGDONVI,0
BTFSS STATUS,Z
GOTO exit
CLRF HANGDONVI
INCF HANGCHUC,1
MOVLW 0x0A
XORWF HANGCHUC,0
BTFSS STATUS,Z
GOTO exit_int
CLRF HANGCHUC
GOTO exit
exit
MOVLW D'20';toc do dem
MOVWF dem
;----------------------------
;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 0x00
MOVWF TRISC
MOVLW b'11111100'
MOVWF TRISB
BCF STATUS,RP0
CLRF PORTD
MOVLW b'00000011'
MOVWF PORTB
MOVLW d'20'
MOVWF dem
MOVWF PORTC
; KHOI TAO TIME0
CLRF TMR0
CLRF INTCON
BSF STATUS,RP0
MOVLW b'00000111'
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 0xC7
MOVWF COUNTA
delay_1
DECFSZ COUNTA,1
GOTO delay_1
RETURN
END
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề.
tdm vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-07-2011, 12:28 AM   #7
thiengiang
Nhập môn đệ tử
 
Tham gia ngày: Nov 2009
Bài gửi: 5
:
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


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 đỡ.
thiengiang vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-07-2011, 01:46 PM   #8
tdm
Đệ tử 7 túi
 
Tham gia ngày: May 2005
Bài gửi: 258
:
Trích:
Nguyên văn bởi thiengiang View Post
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


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 đỡ.
coi lại code thì thấy sai cho này:
Code:
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 
dem EQU 0x29
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
DECFSZ dem,1
GOTO exit_int
;******************************
INCF HANGDONVI,1
MOVLW 0x0A
XORWF HANGDONVI,0
BTFSS STATUS,Z
GOTO exit
CLRF HANGDONVI
INCF HANGCHUC,1
MOVLW 0x0A
XORWF HANGCHUC,0
BTFSS STATUS,Z
GOTO exit;sửa tại đây
CLRF HANGCHUC
GOTO exit
exit
MOVLW D'20';toc do dem
MOVWF dem
;----------------------------
;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 0x00
MOVWF TRISC
MOVLW b'11111100'
MOVWF TRISB
BCF STATUS,RP0
CLRF PORTD
MOVLW b'00000011'
MOVWF PORTB
MOVLW d'20'
MOVWF dem
MOVWF PORTC
; KHOI TAO TIME0
CLRF TMR0
CLRF INTCON
BSF STATUS,RP0
MOVLW b'00000111'
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 0xC7
MOVWF COUNTA
delay_1
DECFSZ COUNTA,1
GOTO delay_1
RETURN
END
bạn cứ làm theo như vậy là chạy thôi (thay đổi giá trị biến đếm để có tốc độ đếm mong muốn.)
hàm delay không cho quá lớn tránh để led hiển thị sẽ bị nháy.
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề.
tdm vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-07-2011, 04:18 PM   #9
thiengiang
Nhập môn đệ tử
 
Tham gia ngày: Nov 2009
Bài gửi: 5
:
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
thiengiang vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-07-2011, 06:50 PM   #10
phatcddt08a
Đệ tử 5 túi
 
phatcddt08a's Avatar
 
Tham gia ngày: Dec 2010
Bài gửi: 101
:
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é
File Kèm Theo
File Type: rar NgatTIMER0.rar (87.4 KB, 15 lần tải)
phatcddt08a vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 05:04 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam