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 04-07-2011, 12:28 AM   #1
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   #2
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   #3
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
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à 04:17 PM.


Đượ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