Bây giờ phân tích tiếp phần chương trình chính điều khiển động cơ của bạn nhé.
1. Phần khởi tạo các cổng vào ra, bạn cũng thiếu phần định nghĩa các chân cổng là digital I/O
Code:
BSF STATUS, RP0 ; Select Bank 1
MOVLW 0x06 ; Configure all pins
MOVWF ADCON1 ; as digital inputs
BCF STATUS, RP0 ; Select Bank 0
Cái này là bắt buộc nên trong tất cả các chương trình viết bằng ngôn ngữ ASM, bạn đều phải dùng trước các lệnh định nghĩa cổng vào ra. Không có đoạn này chắc chắn chương trình của bạn sẽ chạy loạn lên ngay.
2.
Code:
MOVLW b'00000000'
MOVWF PORTC
MOVLW b'00000000'
MOVWF PORTB
MOVLW b'00100000'
MOVWF PORTB
MOVLW b'01000000'
MOVWF PORTB
MOVLW b'01100000'
MOVWF PORTB
MOVLW b'10000000'
MOVWF PORTB
MOVLW b'10100000'
MOVWF PORTB
MOVLW b'11000000'
MOVWF PORTB
MOVLW b'11100000'
MOVWF PORTB
Đoạn này bạn có chú thích là ban đầu cho các LED đều hiển thị 0 hết. Thế thì chỉ cần viết thế này thôi chứ:
Code:
MOVLW b'00000000'
MOVWF PORTC
MOVLW b'00000000'
MOVWF PORTB
hoặc thế này nếu bạn muốn PORTB cuối cùng có giá trị b’1110 0000’
Code:
MOVLW b'00000000'
MOVWF PORTC
MOVLW b'11100000'
MOVWF PORTB
Không hiểu bạn thay đổi liên tục giá trị ghi vào cổng B như vậy để làm gì. Nhưng nên nhớ là 1 lệnh của PIC thường chiếm có 1 chu kỳ máy, nghĩa là nếu bạn dùng thạch anh dao động 4 MHz, mỗi lệnh chỉ xảy ra trong 1us, rất rất nhỏ. Vậy bạn thay đổi PORTB liên tục như thế chẳng có ý nghĩa gì cả.
Ở phần khởi tạo Timer1 chỉ viết thế này là đủ:
Code:
CLRF T1CON
CLRF INTCON
BSF STATUS,RP0
CLRF PIE1
BSF PIE1,TMR1IE
BCF STATUS,RP0
CLRF PIR1
MOVLW 0X27
MOVWF TMR1H
MOVLW 0X10
MOVWF TMR1L
Tuy nhiên, nếu bạn muốn tạo ngắt 1ms dùng Timer1 mà bạn lại nạp con số 0x2710, nghĩa là 10 000 dec vào TMR1H:TMR1L thì không đúng rồi. Vì timer sẽ đếm từ 0x2710 đến 0xFFFF là tràn, nghĩa là sẽ tạo 1 khoảng thời gian trễ là 0xFFFF – 0x2710 = 0xD8EF, nghĩa là 55535 microgiây hay 55.535 ms, không phải 1ms như bạn mong muốn. Vậy muốn tạo ngắt 1ms bạn phải nạp con số là:
Code:
TMR1H = 0xFC
TMR1H = 0x17
Lý do thì chắc bạn cũng tính được, theo như tôi phân tích ở trên.
Tạm thời như thế. Bạn sửa đi và nói lại cho tôi biết những lỗi xảy ra khi thiết bị hoạt động.
Thân.