Đệ tử 4 túi
Tham gia ngày: Jan 2007
Bài gửi: 79
:
|
Đuối lắm rồi!!!!
Mới thử con PIC khác của thằng bạn, vần không được. Đoạn chương trình của mình như sau :
1. Quét phím (không dùng ngắt), 12 phím 4 chân (10 phím số 0 đến 9, 1 phím cho động cơ chạy xuôi, 1 phím cho động cơ chạy ngượac) được nối trực tiếp với với PORTD. Phải nhập đủ 4 chữ số tương ứng tốc độ đặt của động cơ thì mới làm việc khác tiếp được, nếu chưa nhập đủ 4 số mà nhấn nhầm sang 2 phím chiều quay của động cơ thì vẫn ko sao, nhập lại tốc độ bình thường.
2. Sau khi nhập đủ 4 chứ số tốc độ đặt, bạn phải bắt buộc nhấn phím QUAY NGƯỢC hoặc QUAY XUÔI. Nhấn một trong 2 phím đó, chương trình sẽ chuyển tới đoạn phục vụ cho việc quay ngược, quay xuôi.
2 bước trên mình đã thực hiện xong, chạy rất tốt. Tuy nhiên bước tiếp theo thì đang "rất kẹt" cái vụ ngắt Timer1. Mình muốn dùng timer1 định thời gian 1ms rồi nhảy vào trình phục vụ ngắt rồi đọc xung encorder từ timer0 để tìm tốc độ đo. Làm riêng chương trình đọc xung vào timer0 thì OK. Nhưng khi dùng ngắt timer1 định thời 1ms thì ko được. Nó chỉ chạy vào trình phục vụ ngắt có 1 lần, sau đó không vào nữa cho dù trong chương trình ngắt timer1 đã bật timer1 chạy lại. Mình đã thử mọi cách vẫn ko xong.
Không biết làm sao nữa. Nhờ mọi người giúp.
Lẽ ra mình ko muốn post đoạn code lên lúc này vì còn rất....lung tung. Mình chú thích, chỉnh sửa lung tung trên đó, để khi nào xong, làm cho nó đàng hoàng rồi post lên luôn để người học sau có cái tham khảo. Nhưng bây giờ đành thua rồi. Post lên luôn, các đoạn code sau dấu ; là những gì mình viết thêm để thử trong quá trình tìm chổ sai, chứ ko có ý nghĩa gì. (đoạn chương trình trong ngắt chỉ để tìm chổ sai).
Mình sử dụng L293 làm driver cho động cơ ( dùng PortC tác động các chân của L293). IC7447 để chuyển từ mã BCD sang mã led 7 đoạn.
Code:
;CHUONG TRINH DIEU KHIEN ON_OFF DONG CO DC
;SINH VIEN THUC HIEN : NGUYEN UY DANH
;===================================================================================================
;KHAI BAO VI DIEU KHIEN;
;===================================================================================================
processor 16f877a ;vi dieu khien duoc su dung la PIC16F877A cua Microchip
include <p16f877a.inc> ;header file kem theo
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF
;===================================================================================================
;KHOI TAO CAC BIEN
;===================================================================================================
;NHOM CAC BIEN SU DUNG TRONG CHUONG TRINH DELAY
count1 EQU 0x20
counta EQU 0x21
countb EQU 0x22
;===================================================================================================
;NHOM CAC BIEN SU DUNG TRONG CHUONG TRINH QUET PHIM VA NHAN BIET PHIM
cols EQU 0x23
key EQU 0x24 ;bien key chua ma ASCII cua phim duoc nhan
;===================================================================================================
;NHOM CAC THANH GHI HIEN THI LEN 4 LED 7 DOAN TOC DO DAT
dem EQU 0x25
hangngan EQU 0x26
hangtram EQU 0x27
hangchuc EQU 0x28
hangdonvi EQU 0x29
;===================================================================================================
;NHOM CAC THANH GHI TRONG CHUONG TRINH NGAT
W_save EQU 0x2A
PCLATH_save EQU 0x2B
STATUS_save EQU 0x2C
FSR_save EQU 0x2D
demtimer1 EQU 0x2E
TMR0_save EQU 0x2F
highbyte EQU 0x30
lowbyte EQU 0x31
h_byte_save EQU 0X32
l_byte_save EQU 0x33
;===================================================================================================
;NHOM CAC THANH GHI DUNG TRONG CHUONG TRINH DOI TU HEX SANG BCD
aar0 EQU 0x34 ;binary number low byte
aar1 EQU 0x35 ;binary number high byte
aac0 EQU 0x36 ;bcd number ones
aac1 EQU 0x37 ;bcd number tens
aac2 EQU 0x38 ;bcd number hundreds
aac3 EQU 0x39 ;bcd number thousands
aac4 EQU 0x3A ;bcd number ten-thousands
;===================================================================================================
;===================================================================================================
;CHUONG TRINH NGAT
;===================================================================================================
ORG 0x004
GOTO ISR
ISR
;---------------------------------------------------------------------------------------------------
;CHUONG TRINH BAT BUOC DAU CHUONG TRINH NGAT
;---------------------------------------------------------------------------------------------------
MOVWF W_save
SWAPF STATUS_save,W
CLRF STATUS
MOVWF STATUS_save
MOVF PCLATH,W
MOVWF PCLATH_save
CLRF PCLATH
MOVF FSR,W
MOVWF FSR_save
;---------------------------------------------------------------------------------------------------
;NOI DUNG CHUONG TRINH NGAT
;---------------------------------------------------------------------------------------------------
BTFSS PIR1,TMR1IF
GOTO exit_int
BCF T1CON,TMR1ON
CLRF TMR1L
CLRF TMR1H
MOVLW 0X27
MOVWF TMR1H
MOVLW 0X10
MOVWF TMR1L
BSF T1CON,TMR1ON
BCF PIR1,TMR1IF
; MOVF TMR0,W
; MOVWF lowbyte
; CLRF highbyte
DECFSZ demtimer1,1
GOTO tiep1
GOTO tiep2
; MOVF TMR0,W
; MOVWF lowbyte
; CLRF highbyte
tiep1:
MOVLW B'11000110'
MOVWF PORTB
; MOVLW D'20'
; MOVWF demtimer1
GOTO exit_int
tiep2:
MOVLW B'00000000'
MOVWF PORTB
exit_int
MOVF FSR_save,W
MOVWF FSR
MOVF PCLATH_save
MOVWF PCLATH
SWAPF STATUS_save,W
MOVWF STATUS
SWAPF W_save,1
SWAPF W_save,0
BSF T1CON,TMR1ON
BCF PIR1,TMR1IF
RETFIE
;=================================================================================================
ORG 0x0000
GOTO start
ORG 0x050
start
BCF STATUS,RP1 ;chon Bank1 co chua thanh ghi TRISD
BSF STATUS,RP0 ;thiet lap 4 bit cao cua PORTD la output tuong ung voi cols
MOVLW 0x0F ;thiet lap 4 bit thap cua PORTD la input tuong ung voi rows
MOVWF TRISD ;TRISD=00001111B
MOVLW 0x00
MOVWF TRISB ;thiet lap chan cua PORTB la port output
MOVLW b'00000000' ;thiet lap chan cua PORTC la port output
MOVWF TRISC
MOVLW 0xFF ;thiet lap chan cua portA la port input
MOVWF TRISA
BCF STATUS,RP0 ;chon Bank0
;===================================================================================================
;BAN DAU CHO TAT CA CAC LED HIEN THI 0 HET
;===================================================================================================
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
;==================================================================================================
;KHOI TAO TIMER1
;==================================================================================================
CLRF T1CON
CLRF INTCON
CLRF TMR1H
CLRF TMR1L
BSF STATUS,RP0
CLRF PIE1
BSF PIE1,TMR1IE
BCF STATUS,RP0
CLRF PIR1
MOVLW 0X00
MOVWF T1CON
MOVLW 0X27
MOVWF TMR1H
MOVLW 0X10
MOVWF TMR1L
;================================================================================================
;KHOI TAO CAC BIEN
;=================================================================================================
CLRF dem ;xoa bien dem ve 0
CLRF highbyte
CLRF lowbyte
CLRF h_byte_save
CLRF l_byte_save
CLRF aar0
CLRF aar1
CLRF aac0
CLRF aac1
CLRF aac2
CLRF aac3
CLRF aac4
MOVLW D'20'
MOVWF demtimer1
;===================================================================================================
;BAT DAU CHUONG TRINH CHINH
;===================================================================================================
Mainpro
CALL Chk_keys ;goi chuong trinh quet phim va nhan biet phim
MOVF key,W
GOTO Xuatled
Chk_keys ;chuong trinh CON quet phim
;===================================================================================================
;DOAN CHUONG TRINH KIEM TRA CO BI KET PHIM TRUOC KHI NHAN PHIM HAY KHONG
;DOAN CHUONG TRINH NAY CHAY NGAY KHI KHOI DONG CHUONG TRINH
;===================================================================================================
MOVLW 0x00 ;trang thai ban dau cua cac port cols la 0
MOVWF PORTD ;trang thai ban dau cua cac port rows la muc 1
CALL delay20 ;goi chuong trinh delay20ms
MOVF PORTD,W ;lay trang thai hien tai cua PORTD dua vao thanh ghi W
ANDLW 0x0F ;thuc hien phep AND thanh ghi W voi 0FH
SUBLW 0x0F ;thuc hien phep TRU voi gia tri thiet lap ban dau cho PORTD la OFH
BTFSC STATUS,Z ;neu gia tri hien tai cua PORTD van khong doi so voi thiet lap ban dau
GOTO Keys ;nghia la khong bi ket phim, co Z=1 thi nhay toi keys la chuong trinh con bat phim nhan
CALL delay20 ;con neu Z=0 nghia la bi ket phim thi dalay20 de nguoi dung xu ly viec ket phim nay
GOTO Chk_keys
;====================================================================================================
;DOAN CHUONG TRINH CON BAT PHIM NHAN
;====================================================================================================
Keys
CALL Scan_keys ;goi chuong trinh Scan_keys xem thu co phim nao nhan khong
MOVLW d'12' ;nap vao W gia tri 12
SUBWF key,0 ;lay gia tri trong key tra ve tru cho 12
BTFSS STATUS,Z ;truong hop khong co phim nhan thi key=12,delay 20ms va quay lai scan de phat hien
GOTO Key_found ;truong hop key<12 nghi la co nhan phim thi di vao chuong trinh con nhan dang phim
CALL delay20
GOTO Keys
Key_found
MOVF key,0 ;lay lai gia tri key luu vao W
ANDLW 0x0F ;chi nham loai bi 4 bit cao khong co y nghi gi trong key(mac dinh co the ton tai)
CALL Key_table ;goi chuong trinh tra bang gia tri
MOVWF key ;luu lai gia tri bang vao bien key
RETURN
Scan_keys
CLRF key ;xoa gia tri trong key ve 0, chuan bi chua ma cua phim duoc nhan
MOVLW 0x70 ;thiet lap cho tat ca cac cols deu len 1
MOVWF PORTD ;cac rows thi luon luon la 1
MOVLW 0x03
MOVWF cols ;thiet lap gia tri bien cols
BSF STATUS,C ;set co C len 1 trong thanh ghi Status, chuan bi shift vao PORTD
Scan
RRF PORTD,1 ;dich PORTD tung buoc kem theo co C
BTFSS PORTD,3 ;neu bit thu 3 cua PORTD bang 0 nghi la phim noi giua hang 3 va cot 3 nhan
GOTO press ;ung voi phim REVERSE, tro lai chuong trinh Keys de nhan biet phim
INCF key,1 ;neu sai thi tang key len 1
BTFSS PORTD,2 ;neu bit thu 2 cua PORTD bang 0 nghi la phim noi giua hang 2 va cot 3 duoc nhan
GOTO press ;ung voi phim so 8, tro lai chuong trinh keys de nhan biet phim
INCF key,1
BTFSS PORTD,1
GOTO press
INCF key,1
BTFSS PORTD,0
GOTO press
INCF key,1
DECFSZ cols,1 ;giam rows, neu bang khac 0 thi scan tiep, bang 0 thi tro ve
GOTO Scan
press
RETURN ;tro ve chuong trinh scan phim
;=======================================================================================================
;BANG TRA Key_Table
;=======================================================================================================
Key_table
ADDWF PCL,1
RETLW d'11' ;key=0 ung voi phim REVERSE co ma la 11D
RETLW 0x08 ;key=1 ung voi phim so 8 co ma la 08H
RETLW 0x05 ;key=2 ung voi phim so 5
RETLW 0x02 ;key=3 ung voi phim so 2
RETLW d'10' ;key=4 ung voi phim FORWARD co ma la 10D
RETLW 0x07 ;key=5 ung voi phim so 7
RETLW 0x04 ;key=6 ung voi phim so 4
RETLW 0x01 ;key=7 ung voi phim so 1
RETLW 0x09 ;key=8 ung voi phim so 9
RETLW 0x06 ;key=9 ung voi phim so 6
RETLW 0x03 ;key=10 ung voi phim so 3
RETLW 0x00 ;key=11 ung voi phim so 0
;======================================================================================================
;CHUONG TRINH HIEN THI RA LED GIA TRI LUU TRONG BIEN key SAU KHI SCAN PHIM
;CO SU DUNG BIEN dem DE THEO DOI SO LAN NHAN PHIM
;======================================================================================================
Xuatled
INCF dem ;cu moi lan bat duoc 1 phim thi tang bien dem len 1
MOVLW d'1'
XORWF dem,W ;so sanh gia tri luu trong bien dem va 1
BTFSC STATUS,Z ;neu dem=1 thi nhay den chuong trinh xu ly phim nhan thu 1
GOTO dem1 ;neu dem#1 thi kiem tra tiep theo
MOVLW d'2'
XORWF dem,W ;so sanh gia tri luu trong bien dem va 2
BTFSC STATUS,Z ;neu dem=2 thi nhay den chuong trinh xu ly phim nhan thu 2
GOTO dem2 ;neu dem#2 thi kiem tra tiep theo
MOVLW d'3'
XORWF dem,W ;so sanh gia tri luu trong bien dem va 3
BTFSC STATUS,Z ;neu dem=3 thi nhay den chuong trinh xu ly phim nhan thu 3
GOTO dem3 ;neu dem#2 thi kiem tra tiep theo
MOVLW d'4'
XORWF dem,W ;so sanh gia tri luu trong bien dem va 4
BTFSC STATUS,Z ;neu dem=4 thi nhay den chuong trinh xu ly phim nhan thu 4
GOTO dem4 ;neu dem#4 thi kiem tra tiep theo
;sau 4 lan nhan phim, da nhan du 4 so de cai dat toc do, nhan phim so 5 bat buoc la phim FORWARD or REVERSE
MOVLW d'10'
XORWF key,W ;so sanh ma phim trong key co phai la phim FORWARD khong?
BTFSC STATUS,Z ;neu dung la phim FORWARD thi Z=1
GOTO FORWARD ;se nhay den chuong trinh FORWARD
MOVLW d'11' ;neu khong la FORWARD
XORWF key,W ;thi so sanh ma phim trong key co phai la phim REVERSE khong?
BTFSC STATUS,Z ;neu dung la phim REVERSE THI Z=1
GOTO REVERSE ;se nhay den chuong trinh REVERSE
DECF dem,1 ;neu khong la FORWARD or REVERSE thi giam xuong dem=4
GOTO Mainpro ;nguoi dung phai nhan dung phim moi tiep tuc duoc
;cac chuong trinh xu ly cac phim nhan dem1 dem2 dem3 va dem4
dem1 ;dem1 la doan chuong trinh xuat led va save gia tri hang ngan cua toc do dat
CALL nhannhamphim? ;goi chuong trinh kiem tra co nhan nham phim REVERSE hay FORWARD truoc khi
;nhap day du so hangngan,hangtram,hangchuc,hangdoivi hay khong?
MOVF key,W ;neu nhan dung phim thi bat dau xu ly
MOVWF hangngan ;luu gia tri do vao bien hangngan
MOVLW b'00000000'
CALL xuatraled7doan_toc_do_dat
GOTO Mainpro
dem2
CALL nhannhamphim? ;goi chuong trinh kiem tra co nhan nham phim REVERSE hay FORWARD truoc khi
;nhap day du so hangngan,hangtram,hangchuc,hangdoivi hay khong?
MOVF key,W ;neu nhan dung phim thi bat dau xu ly
MOVWF hangtram ;luu gia tri do vao bien hangtram
MOVLW b'00100000'
CALL xuatraled7doan_toc_do_dat
GOTO Mainpro
dem3
CALL nhannhamphim? ;goi chuong trinh kiem tra co nhan nham phim REVERSE hay FORWARD truoc khi
;nhap day du so hangngan,hangtram,hangchuc,hangdoivi hay khong?
MOVF key,W ;neu nhan dung phim thi bat dau xu ly
MOVWF hangchuc ;luu gia tri do vao bien hangchuc
MOVLW b'01000000'
CALL xuatraled7doan_toc_do_dat
GOTO Mainpro
dem4
CALL nhannhamphim? ;goi chuong trinh kiem tra co nhan nham phim REVERSE hay FORWARD truoc khi
;nhap day du so hangngan,hangtram,hangchuc,hangdoivi hay khong?
MOVF key,W ;neu nhan dung phim thi bat dau xu ly
MOVWF hangchuc ;luu gia tri do vao bien hangchuc
MOVLW b'01100000'
CALL xuatraled7doan_toc_do_dat
GOTO Mainpro
;----------------------------------------------------------------------------------------------------------
;CAC CHUONG TRINH CON CUA CHUONG TRINH xuatled
xuatraled7doan_toc_do_dat
BCF STATUS,C ;xoa co C cua thanh ghi STATUS
ADDWF key,W ;cong voi gia tri trong W, luu lai vao trong thanh ghi W
MOVWF PORTB ;chuyen ra PORTB,thuc hien duoc viec xuat hangngan ra led 7 doan
RETURN
nhannhamphim?
MOVLW d'10'
XORWF key,W ;kiem tra thu co phai la nhan nham FORWARD khong?
BTFSC STATUS,Z ;neu nhan nham FORWARD thi phai NHANPHIMLAI
GOTO nhanphimlai
MOVLW d'11' ;kiem tra thu co phai nhan nham REVERSE khong?
XORWF key,W
BTFSC STATUS,Z
GOTO nhanphimlai ;neu nhan nham REVERSE thi phai NHANPHIMLAI
RETURN
;------------------------------------------------------------------------------------------------------------
nhanphimlai
DECF dem,1
GOTO Mainpro
;============================================================================================================
;CHUONG TRINH REVERSE VA FORWARD
;============================================================================================================
REVERSE
BSF T1CON,TMR1ON
BSF INTCON,TMR1IE
BSF INTCON,PEIE
BSF INTCON,GIE
; CLRF TMR0 ;xoa thanh ghi TMR0
; CLRF INTCON ;xoa thanh ghi INTCON
; BSF STATUS,RP0 ;chon Bank1
; MOVLW b'11101000' ;tat chuc nang keo dien tro len cua PORTB
; MOVWF OPTION_REG ;timer0 o che do dem xung, tac dong boi canh len, prescaler 1:1
; BCF STATUS,RP0 ;chon Bank0
; BSF INTCON,TMR0IE ;cho phep ngat timer0
; BSF INTCON,PEIE ;cho phep ngat ngoai vi
; BSF INTCON,GIE ;cho phep toan bo cac ngat
MOVLW b'01100000'
MOVWF PORTC
; BSF T1CON,TMR1ON
MOVLW B'10101001'
MOVWF PORTB
loop2
GOTO loop2
;LOOP2
; MOVLW 0x00
; MOVWF highbyte
; MOVF TMR0,W
; MOVWF lowbyte
; MOVLW 0x11
; MOVWF highbyte
; MOVLW 0x11
; MOVWF lowbyte
; MOVF highbyte,W
; MOVWF aar1
; MOVF lowbyte,W
; MOVWF aar0
; CALL b16_d5
; MOVLW b'10000000'
; ADDWF aac3,W
; MOVWF PORTB
; MOVLW b'10100000'
; ADDWF aac2,W
; MOVWF PORTB
; MOVLW b'11000000'
; ADDWF aac1,W
; MOVWF PORTB
; MOVLW b'11100000'
; ADDWF aac0,W
; MOVWF PORTB
; GOTO LOOP2
FORWARD
MOVLW b'01100000'
MOVWF PORTC
GOTO $
;CHUONG TRINH DELAY 20ms
;==============================================================
delay20
MOVLW d'10' ;nap 20 cho count1 de tao tre 20ms
MOVWF count1
lap1
MOVLW d'199'
MOVWF counta
MOVLW d'1'
MOVWF countb
delay1
DECFSZ counta,1
GOTO $+2
DECFSZ countb,1
GOTO delay1
DECFSZ count1,1
GOTO lap1 ;het doan chuong trinh delay 100ms
RETURN
b16_d5
swapf aar0,w ; partial ones sum in low byte
addwf aar0,w ;
andlw 0x0f ;
skpndc ;
addlw 0x16 ;
skpndc ;
addlw 0x06 ;
addlw 0x06 ;
skpdc ;
addlw -0x06 ; wmax=3:0
;
btfsc aar0,4 ; complete ones sum in low byte
addlw 0x15+0x06
skpdc
addlw -0x06 ; wmax=4:5
movwf aac0 ; save sum in aac0
;
; 8+ 4+ 2+ 1+ 8+ 4+ 2+ 1+
; 20
; 100 60 30 15+
; ----------------------------------------------------
; 128 64 32 16 8 4 2 1
;
swapf aar1,w ; partial ones sum in high byte
addwf aar1,w ;
andlw 0x0f ;
skpndc ;
addlw 0x16 ;
skpndc ;
addlw 0x06 ;
addlw 0x06 ;
skpdc ;
addlw -0x06 ; wmax=3:0
;
btfsc aar1,0 ; complete ones sum in high byte
addlw 0x05+0x06
skpdc
addlw -0x06 ; wmax=3:5
;
btfsc aar1,4
addlw 0x15+0x06
skpdc
addlw -0x06 ; wmax=5:0
;
addlw 0x06 ; include previous sum
addwf aac0,w
skpdc
addlw -0x06 ; wmax=9:5, ones sum ended
;
movwf aac0
movwf aac1
swapf aac1,f
movlw 0x0f
andwf aac0,f ; save total ones sum in aac0
andwf aac1,f ; save partial tens sum in aac1
;
; 8+ 4+ 2+ 1+ 8+ 4+ 2+ 1+
; 5+
; 60 80 90 10+ 5+
; 700 300 100 80 40 20 10 50
; 32000 16000 8000 4000 2000 1000 500 200
; ------------------------------------------------------
; 32768 16384 8192 4096 2048 1024 512 256
;
; complete tens sum in low and high byte
rrf aar1,w ; rotate right high byte once
andlw 0x0f ; clear high nibble
addlw 0x06 ; adjust bcd
skpdc
addlw -0x06 ; wmax=1:5
;
addlw 0x06 ; include previous sum
addwf aac1,w
skpdc
addlw -0x06 ; wmax=2:4
;
btfsc aar0,5
addlw 0x03+0x06
skpdc
addlw -0x06 ; wmax=2:7
;
btfsc aar0,6
addlw 0x06+0x06
skpdc
addlw -0x06 ; wmax=3:3
;
btfsc aar0,7
addlw 0x12+0x06
skpdc
addlw -0x06 ; wmax=4:5
;
btfsc aar1,0
addlw 0x25+0x06
skpdc
addlw -0x06 ; wmax=7:0
;
btfsc aar1,5
addlw 0x09+0x06
skpdc
addlw -0x06 ; wmax=7:9
;
btfsc aar1,6
addlw 0x08+0x06
skpdc
addlw -0x06 ; wmax=8:7
;
btfsc aar1,7
addlw 0x06+0x06
skpdc
addlw -0x06 ; wmax=9:3, tens sum ended
;
movwf aac1 ; save total tens sum in aac1
swapf aac1,w
andlw 0x0f ; load partial hundreds sum in w
;
; 8+ 4+ 2+ 1+ 8+ 4+ 2+ 1+
; 20+ 5+
; 100+ 60+ 30+ 10+
; ----------------------------------------------------
; 128 64 32 16 8 4 2 1
;
; 8+ 4+ 2+ 1+ 8+ 4+ 2+ 1+
; 5+
; 60+ 80+ 90+ 10+ 5+
; 700 300 100 80+ 40+ 20+ 10+ 50+
; 32000 16000 8000 4000 2000 1000 500 200+
; ------------------------------------------------------
; 32768 16384 8192 4096 2048 1024 512 256
;
; complete hundreds sum in high byte
btfsc aar1,1
addlw 0x05+0x06
skpdc
addlw -0x06 ; wmax=1:4
;
btfsc aar1,5
addlw 0x01+0x06
skpdc
addlw -0x06 ; wmax=1:5
;
btfsc aar1,6
addlw 0x03+0x06
skpdc
addlw -0x06 ; wmax=1:8
;
btfsc aar1,7
addlw 0x07+0x06
skpdc
addlw -0x06 ; wmax=2:5, hundreds sum ended
;
movwf aac2 ; save total hundreds sum in aac2
swapf aac2,w
movwf aac3 ; save partial thousands sum in aac3
movlw 0x0f ; clear high nibble
andwf aac1,f ;
andwf aac2,f ;
andwf aac3,f ;
;
; 8+ 4+ 2+ 1+ 8+ 4+ 2+ 1+
; 5+
; 60+ 80+ 90+ 10+ 5+
; 700+ 300+ 100+ 80+ 40+ 20+ 10+ 50+
; 32000 16000 8000 4000 2000 1000 500+ 200+
; ------------------------------------------------------
; 32768 16384 8192 4096 2048 1024 512 256
;
; complete thousands sum in low and high byte
rrf aar1,w ; rotate right high byte twice
movwf aac4 ;
rrf aac4,w ;
andlw 0x0f ; clear high nibble
addlw 0x06 ; adjust bcd
skpdc ;
addlw -0x06 ; wmax=1:5
;
addlw 0x06 ; include previous sum
addwf aac3,w
skpdc
addlw -0x06 ; wmax=1:7
;
btfsc aar1,6
addlw 0x16+0x06
skpdc
addlw -0x06 ; wmax=3:3
;
btfsc aar1,7
addlw 0x32+0x06
skpdc
addlw -0x06 ; wmax=6:5, thousands sum ended
;
movwf aac3 ; save total thousands sum in aac3
movwf aac4 ;
swapf aac4,f ; save ten-thousands sum in aac4
movlw 0x0f ; clear high nibble
andwf aac3,f ;
andwf aac4,f ;
return
END
Các bạn giúp đỡ mình nha. Cảm ơn
thay đổi nội dung bởi: uydanh, 23-12-2007 lúc 10:38 AM.
Lý do: Sửa nhầm
|