Trích:
Nguyên văn bởi thang0105
Ban "nhh" cho mình hỏi tiếp nhé. Mình đã chỉnh sửa lại đoạn code rồi. Mình có gởi kèm đoạn code cho bạn xem đấy. Mình đã bỏ phần: Tạo hàm Delay, mà thay vào đó là viết luôn vào các Loop, tuy nhiên trình biên dịch MPLAB vẫn còn báo lỗi. Lần này lại phải nhờ tiếp đến bạn "nhh" và các anh chị em nữa rồi, giúp đỡ anh em với nhé.
|
Mình vừa edit lại bài gởi trên kia, có nhầm lẫn về sử dụng lệnh DECFSZ, những chỗ nào bạn sử dụng lệnh này thì phải sửa lại cho đúng.Ví dụ như sau:
Code:
LOOP1
DECFSZ REG_L,1 ;có thể thay số 1 bằng chữ F, số 0 bằng chữ W
GOTO LOOP1
GOTO LOOP2
Một điều nữa trong phần SET_POTRTS, bạn khai báo còn lằn nhằn lắm.Tham khảo các set chân IO trong đoạn code sau:
Code:
BCF STATUS,RP1
BSF STATUS,RP0 ; chon BANK 1 = cách xóa bit RP1, set bit RP0
CLRF TRISA ; toàn bộ PORTA là output nè.
MOVLW b'11110000'
MOVWF TRISB ;Bit nào bằng 1, chân tương ứng là input,
;ngược lại bằng 0 là output.Chân RB0 = output, RB6 = input,....
BCF STATUS,RP0 ; chon BANK 0 = cách xóa bit RP0, xóa bit RP1; ở đây RP1 bằng 0 rồi nên không cần.
Bạn phải nắm chắc phần này, nếu không sẽ gặp rắc rối lắm đó.Để viết được chương trình đèn giao thông, có led 7 thanh không phải đơn giản.Trước tiên bạn phải xuất nhập port thành thạo đã, tiếp đến là làm phần delay, tức tạo trễ.
Chương trình sau sẽ làm sáng bừng 8 con led nối với portb của PIC6F84 qua 8 điện trở 220 Ohm:
Code:
;====================================================================
;Auhor: NHH
;Date: 10/02/06
;Hardware: PIC16F84
;XTAL 10MHz, PORTB noi voi 8 LED qua 8 dien tro 220Ohm
;======================================================================
TITLE "ON-LED"
PROCESSOR PIC16f84
INCLUDE<P16f84.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _CPD_OFF &_LVP_OFF
;=========================CHUONG TRINH CHINH=========================
ORG 0x000
GOTO MAIN
MAIN
BCF STATUS,RP1
BSF STATUS,RP0 ; select BANK 1
CLRF TRISB ; PORTB output
BCF STATUS,RP0 ; select BANK 0
MOVLW d'255'
MOVWF PORTB ; sáng 8 led đi nào!
END
Thật là đơn giản phải không!
Còn đây là chương trình nhấp nháy 8 con led trong trường hợp trên, thời gian trễ là 1s
Code:
;========================================
;Auhor: NHH
;Date: 10/02/06
;Hardware: PIC16F84
;XTAL 10MHz, PORTB noi voi 8 LED qua 8 dien tro 220Ohm
;========================================
TITLE "ON-OFF LED 1 SECOND"
PROCESSOR PIC16f84
INCLUDE<P16f84.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _CPD_OFF &_LVP_OFF
;=============================================================================
COUNT1 EQU 0x20
COUNT2 EQU 0x21
COUNT3 EQU 0x22
;=========================CHUONG TRINH CHINH=========================
ORG 0x000
GOTO MAIN
MAIN
BCF STATUS,RP1
BSF STATUS,RP0 ; select BANK 1
CLRF TRISB ; PORTB output
BCF STATUS,RP0 ; select BANK 0
MOVLW d'255'
MOVWF COUNT1 ;<-COUNT1=255
MOVWF COUNT2 ;<-COUNT2=255
NEXT
MOVLW d'14'
MOVWF COUNT3 ;<-COUNT3=13
MOVLW b'11111111' ;LED ON
MOVWF PORTB
CALL LOOP
MOVLW d'14'
MOVWF COUNT3 ;<-COUNT3=13
MOVLW b'00000000' ;LED OFF
MOVWF PORTB
CALL LOOP
GOTO NEXT
;========================CHUONG TRINH CON====================
LOOP
DECFSZ COUNT1,1
GOTO LOOP
DECFSZ COUNT2,1
GOTO LOOP
DECFSZ COUNT3,1
GOTO LOOP
RETURN
END
Chỉ cần bạn viết được chương trình nhấp nháy led như trên thì vấn đề của bạn đã được giải quyết rồi !
Chúc học tốt nhé!