![]() |
|
Tài trợ cho PIC Vietnam |
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 |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Đệ tử 1 túi
Tham gia ngày: Jul 2010
Bài gửi: 12
: |
![]() chào mọi người...mình có chút théc méc mong mọi người giúp đỡ..
minh vừa mới bắt đầu học bít nên gặp chút khó khen,có gì không đúng mong mọi người chỉ giáo.minh viết 1 c.trinh cho led,nó chạy thì ok rồi,nhưng ma` khi mô phỏng sao lại thấy ko chạy như ý mình. LIST P=16F877A ; LIST DIRECTIVE TO DEFINE PROCESSOR #INCLUDE <P16F877A.INC> ; PROCESSOR SPECIFIC VARIABLE DEFINITIONS __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF ; CP: code protect (o che do off de co the nap nhieu lan) ; WDT: WATCHDOG TIMER ; PWRTE:POWER UP ENABLE ; BODEN:... ; XT: THACH ANH <4 MHZ ; HS: 20MHZ > THACH ANH >4 MHZ ; RC: RES(10K) + CAP (33pF) ;================================================= ============= ;==========KHAI BAI BIEN CHO HAM DELAY========================= ; DELAY_VARIABLE UDATA D_VAL1 RES 2 D_VAL2 RES 2 ;================================================= ============= ORG 0x00 NOP GOTO MAIN ;================================================= ============= ORG 0x0004 ;GOTO INTER_GLOBAL (NHAY DEN VUNG NGAT) ;================================================= ============= ORG 0x0005 ;DIA CHI la`m VIEC BAN DAU CUA HAM MAIN MAIN ;CHUONG TRINH CHINH BANKSEL TRISB CLRF TRISB BANKSEL PORTB MOVLW 0x00 LOOP MOVWF PORTB CALL LOOP_DELAY RRF PORTB,1 BTFSS PORTB,0 GOTO LOOP ;================================================= =========== DELAY ; DELAY FUNCTION BANKSEL D_VAL1 MOVLW D'127' MOVWF D_VAL1 ;D_VAL1 = 127 MOVLW D'127' MOVWF D_VAL2 ;D_VAL2 = 127 LOOP_DELAY DECFSZ D_VAL1, F GOTO LOOP_DELAY MOVLW D'127' MOVWF D_VAL1 ;D_VAL1 = 127 DECFSZ D_VAL2, F GOTO LOOP_DELAY RETURN ; EXIT DELAY FUNCTION ;================================================= ========================= END mình dùng lệnh RRF ở PORTB.ban đầu ở portb la` 0000 0000 sau khi dùng RRF thi sẽ la` 1000 0000 va` tip tục la` 0100 0000 va` 0010 0000........ thì đáng lẽ led ban đầu sẽ sáng chân RB7,sau đó la` RB6 va` tip tục ..vậy ma` nó nháy theo kỉu gì đâu ko như ý minh. con cái này nữa la` sao?khi mình bỏ lệnh BTFSS thi nó chỉ có led RB7 sáng.mong mọi người giúp đỡ |
![]() |
![]() |
![]() |
#2 |
Đệ tử 2 túi
Tham gia ngày: May 2005
Bài gửi: 27
: |
Hix, mình cũng mới học Pic, tí toáy sửa thử đoạn code của bạn, nếu có sai mong anh em chỉ dẫn thêm.
1. Theo thiết kế của bạn thí hình như bạn làm mức 1 = led sáng, mức 0 = led tắt, trong thiết kế vđk nói chung không nên làm như thế mà phải làm ngược lại, tức là cực + anode led nối vào nguồn còn cực catode led nối vào trở, rồi vđk, khi đó chân vđk mức 0 = đèn sáng. Phải thiết kế như vậy vì khi mức 1 của vđk xuất port, xong đổ ra rất bé, nếu bạn kéo nhiều led thì không chịu nổi, vđk chạy bậy hoặc led không sáng. Cái này mình làm bên 89 nhiều nên rành. 2. Code:
BANKSEL PORTB MOVLW 0x00 LOOP MOVWF PORTB CALL LOOP_DELAY sửa thành CALL DELAY RRF PORTB,1 RRF f,d với d thuộc [0,1] nếu d = 0: dữ liệu sau khi dịch đc lưu trong thanh ghi w nếu d = 1: dữ liệu sau khi dịch đc lưu vào chính nó (vào f) 4. Lệnh BTFSS (bit test file skip Set) như sau: Code:
BTFSS f,b với b thuộc [0,7] - nếu b = 0, làm jì đó (thường là nhảy đến 1 nhãn nào đó) - nếu b = 1, làm jì đó (thường là nhảy đến 1 nhãn nào đó) 5. chỗ này Code:
MOVLW D'127' MOVWF D_VAL1 ;D_VAL1 = 127 MOVLW D'127' => thừa MOVWF D_VAL2 ;D_VAL2 = 127 Túm lại, bạn kím nhầm cái ví dụ tùm lum rùi, mới học pic thì tìm mí bài đơn giãn tập viết 1 led, nút nhấn ... cho hiểu lệnh cái đã ![]() Lên trang này, tìm bài học pic 1 ngày tham khảo đi bạn nhé, chúc thành công thay đổi nội dung bởi: unisa, 30-08-2010 lúc 02:59 AM. |
![]() |
![]() |
![]() |
#3 | |
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#4 |
Đệ tử 2 túi
Tham gia ngày: May 2005
Bài gửi: 27
: |
mình đã viết lại chương trình của bạn và test ok trên poteus 7.5 sp3, chưa có điều kiện test thực tế nhưng như vậy cũng tạm ok rùi, bạn tham khảo nhé
Code:
LIST P=16F877A ; LIST DIRECTIVE TO DEFINE PROCESSOR #INCLUDE <P16F877A.INC> ; PROCESSOR SPECIFIC VARIABLE DEFINITIONS DATA_LED EQU H'0B' D_VAL1 EQU H'0C' D_VAL2 EQU H'0D' D_VAL3 EQU H'0E' ;================================================= ============= ORG 0x00 GOTO MAIN ;================================================= ============= ORG 0x04 ;GOTO INTER_GLOBAL (NHAY DEN VUNG NGAT) ;================================================= ============= ORG 0x05 ;DIA CHI la`m VIEC BAN DAU CUA HAM MAIN MAIN ;CHUONG TRINH CHINH BANKSEL TRISB CLRF TRISB BANKSEL PORTB ABC MOVLW B'10000000' MOVWF DATA_LED ; NAP GIA TRI W VAO DATA_LED MOVWF PORTB ; LED 7 SANG (TUONG UNG PORTB.7 = 1) CALL DELAY LOOP RRF DATA_LED,1 ; XOAY PHAI DATA_LED MOVF DATA_LED,0 ; NAP GIA TRI DATA_LED NGUOC TRO LAI W MOVWF PORTB ; LAY GIA TRI W XUAT RA PORTB CALL DELAY BTFSS DATA_LED,0 ; NEU PORTB.0 = 0 THÌ NHAY DEN LOOP,NEU = 1 THÌ NHAY DEN ABC GOTO LOOP GOTO ABC ;================================================= =========== DELAY ; DELAY FUNCTION BANKSEL D_VAL1 MOVLW D'255' MOVWF D_VAL1 ;D_VAL1 = 255 MOVWF D_VAL2 ;D_VAL2 = 255 MOVLW D'20' MOVWF D_VAL3 LOOP_DELAY DECFSZ D_VAL1 GOTO LOOP_DELAY NOP DECFSZ D_VAL2 GOTO LOOP_DELAY NOP DECFSZ D_VAL3 GOTO LOOP_DELAY RETURN ; EXIT DELAY FUNCTION ;================================================= ========================= END |
![]() |
![]() |
![]() |
#5 |
Đệ tử 2 túi
Tham gia ngày: May 2005
Bài gửi: 27
: |
tuy nhiên mình gặp rắc rối với lệnh xoay, khi mình xoay trực tiếp Portb thì không được, không hiểu sao nữa
Code:
ABC MOVLW B'10000000' MOVWF PORTB ; LED 7 SANG (TUONG UNG PORTB.7 = 1) CALL DELAY LOOP RRF PORTB,1 ; XOAY PHAI PORTB CALL DELAY GOTO LOOP |
![]() |
![]() |
![]() |
|
|