PDA

View Full Version : giúp mình với


kimlikimli
30-03-2010, 12:49 AM
điều khiển led chạy dùng bảng dữ liệu !! theo 1 tài liệu viết cái bài này, mình cũng viết như vậy nhưng lại báo sai. mình ko biết vì sao hết? có ai biết giúp mình với
Đoạn code như sau :
list p=16f877a ; list directive to define processor
#include <p16f877a.inc> ; processor specific variable definitions

__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _RC_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF



ORG 0x020
count1 EQU 0x20 ; dung cho chuong trinh delay
counta EQU 0x21 ; dung cho chuong trinh delay
countb EQU 0x22 ; dung cho chuong trinh delay
count EQU 0x23 ; dung de tra bang du~ lieu


MAIN_PROG CODE

start
BANKSEL PORTB ; chon bank chua' PORTB
CLRF PORTB ; xoa' PORTB = 00000000
; PORTB = output
BANKSEL TRISB ; chon bank chua' TRISB
MOVLW 0x00 ; tin hieu ra TRISB
MOVWF TRISB
BANKSEL PORTB
loop1
CLRF count ; reset thanh ghi chua' gtri dem'
Loop2
MOVF count,0 ; dua gia tri dem vao thanh ghi W
CALL Table ; goi chuong trình con Table
MOVWF PORTB ; xuat gtri chua' trong thanh ghi W ra PORTB
CALL delay100ms ; goi chuong trình con delay100ms
INCF count,0 ; tang gtri trong thanh count len 1dv va chua' kq trong thanh W
XORLW d'8' ; so sanh thanh ghi W voi gtri 8
BTFSC STATUS,Z ; kiem tra bit Z (Zero)
GOTO Loop1 ; nhay ve label Loop1 neu W = 0
INCF count,1 ; thuc thi lenh nay neu W kha'c 0
GOTO Loop2
;=============== chuong trinh con =========================================
Table
ADDWF PCL,1 ; cong gia tri thanh ghi W vao thanh ghi PCL, kq chua trong thanh ghi PCL
RETLW b'10000000'
RETLW b'01000000'
RETLW b'00100000'
RETLW b'00010000'
RETLW b'00001000'
RETLW b'00000100'
RETLW b'00000010'
RETLW b'00000001'
;============ chuong trinh con delay100s =========================
delay100ms
MOVLW d'100' ; gia tri thap phan ( if 1000ms = d'1000' )
MOVWF count1 ; dua gia tri vao thanh count1
d1
MOVLW 0xC7 ; gia tri C7h( 199)
MOVWF counta ; dua gia tri vao thanh counta
MOVLW 0x01 ; gia tri 01h (1)
MOVWF countb ; dua gia tri vao thanh countb
delay_0
DECFSZ counta,1 ; giam? gtri thanh counta xuong' 1dv , gtri dua vao thanh f
GOTO $+2 ; khac' 0 -> nhay thuc hien lenh GOTO delay_0
; = 0 -> thuc hien lenh DECFSZ countb,1
DECFSZ countb,1 ; giam? gtri thanh countb xuong' 1dv , gtri dua vao thanh f
GOTO delay_0 ; khac' 0 -> nhay len delay_0
; = 0 -> thuc hien lenh DECFSZ count1,1
DECFSZ count1,1
GOTO d1
RETURN ; tro ve chuong trinh chinh
;================================================= ================
END ; ket thuc chuong trinh