PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   Hiển Thị số 00 - 99 trên led 7 đoạn ( code asm ) (http://www.picvietnam.com/forum/showthread.php?t=7319)

dien44 04-11-2010 08:40 PM

Hiển Thị số 00 - 99 trên led 7 đoạn ( code asm )
 
Chào mọi người. Em là người mới tham gia vào học PIC. em có viết 1 chương trình để hiển thị các số từ 00 - 99 bằng có asm như nó không chạy được. Em k biết bị lỗi ở chỗ nào, mong mọi người xem giúp và cho em vài ý kiến.
Code như sau:
Code:

;=========================================
;CHUONG TRINH DIEU KHIEN LED 7 DOAN HIEN THI CAC SO TU 0 - 99
;=========================================
PROCESSOR        16F877A                        ;khai bao vi dieu khien
INCLUDE                <p16f877a.inc>        ;file header cua vi dieu khien
;====================================================
                                                        ;khai bao cac bien cau hinh
__CONFIG        _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF
;====================================================
                                                        ;khai bao dia chi cac thanh ghi dung cho chuong trinh delay
count1                EQU        0x20
counta                EQU        0x21
countb                EQU        0x22
COUNT_DV        EQU        0x23
COUNT_CHUC        EQU        0x24
;====================================================
                        ORG        0x00                ;dia chi bat dau chuong trinh
        GOTO        start
start
                                                        ;chon BANK0 de xoa PORTB, PORTD
        BCF                STATUS,RP0
        BCF                STATUS,RP1
        CLRF        PORTB
        CLRF        PORTD
                                                        ;chon BANK1 de set portb, d la output
        BSF                STATUS,RP0
        MOVLW        0x00
        MOVWF        TRISB
        MOVLW        0x00
        MOVWF        TRISD
                                                        ;chon lai bank 0 de xuat gia tri mong muon ra portb
        BCF                STATUS,RP0

        CLRF        COUNT_DV
        CLRF        COUNT_CHUC
        INCF        COUNT_CHUC,1
        GOTO        loop
;QUY DINH. PORT B XUAT HANG CHUC, PORT D XUAT HANG DON VI
;o day dung led co cac cathode noi cung 1 diem. --> sang o muc 1
;==============================================================
loop
        INCF        COUNT_DV,1
        MOVF        COUNT_DV,0
        XORLW        D'10'
        BTFSC        STATUS,Z
        GOTO        reset_
        GOTO        sang
reset_
        CLRF        COUNT_DV
        INCF        COUNT_CHUC,1
        GOTO        loop
sang
        ;MOVF        COUNT_DV,0
        CALL        table
        MOVWF        PORTD
        CALL        delay_100ms
;----------- COPY NOI DUNG PCL VAO COUNT_DV, SAU DO XOA PCL DI ---------
        MOVF        PCL,0
        MOVWF        COUNT_DV
        CLRF        PCL
;----------- DUA GIA TRI CUA THANH COUNT_CHUC VAO THANH PCL -----------
        MOVF        COUNT_CHUC,0
        CALL        table
        MOVWF        PORTB
        CALL        delay_100ms
;---------- LUU NOI DUNG PCL VAO COUNT_CHUC VA XOA PCL DI -------------
        MOVF        PCL,0
        MOVWF        COUNT_CHUC
        CLRF        PCL
;----------- TRO VE CHUONG TRINH CHINH --------------------------------
        GOTO        loop
       
table
        ADDWF        PCL,1
                                                ;so_0
        RETLW        b'00111111'
                                                ;so_1
        RETLW        b'00000110'
                                                ;so_2
        RETLW        b'01011011'
                                                ;so_3
        RETLW        b'01001111'
                                                ;so_4
        RETLW        b'01100110'
                                                ;so_5
        RETLW        b'01101101'
                                                ;so_6
        RETLW        b'01111100'
                                                ;so_7
        RETLW        b'00000111'
                                                ;so_8
        RETLW        b'01111111'
                                                ;so_9
        RETLW        b'01101111'

delay_100ms
        MOVLW        d'250'
        MOVWF        count1
d1
        MOVLW        0xC7
        MOVWF        counta
        MOVLW        0x01
        MOVWF        countb
delay_0
        DECFSZ        counta,1
        GOTO        $+2
        DECFSZ        countb,1
        GOTO        delay_0
        DECFSZ        count1,1
        GOTO        d1
        RETLW        0x00
END


dien44 05-11-2010 10:01 AM

sao khong ai giup het vay???????????????????

hcmut.khoamaisi 05-11-2010 01:43 PM

Trích:

Nguyên văn bởi dien44 (Post 39907)
sao khong ai giup het vay???????????????????

Không có sơ đồ nguyên lí !Bạn không nêu rõ là lỗi gì !Làm sao giúp

dien44 05-11-2010 02:01 PM

Mình biên dịch thì chẳng xảy ra lỗi gì cả, nhưng khi mô phỏng trong prouteus thì nó k biết sao không chạy được. Mình cũng k biết lỗi gì nên mới mong mọi người xem giúp, chứ biết lỗi gì rồi thì nói làm gì nữa. Cảm ơn bạn đã tl

sonluyen 09-11-2010 08:40 PM

3 Attachment(s)
PROCESSOR 16F877A ;khai bao vi dieu khien
#INCLUDE <p16f877a.inc> ;file header cua vi dieu khien
;================================================= ===
;khai bao cac bien cau hinh
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF
;================================================= ===
;khai bao dia chi cac thanh ghi dung cho chuong trinh delay
count1 EQU 230h
counta EQU 240h
countb EQU 250h
COUNT_DV EQU 260h
COUNT_CHUC EQU 270h
;================================================= ===
ORG 0000h ;dia chi bat dau chuong trinh

;chon BANK0 de xoa PORTB, PORTD
BCF STATUS,RP0
BCF STATUS,RP1
CLRF PORTB
CLRF PORTD
;chon BANK1 de set portb, d la output
BSF STATUS,RP0
MOVLW d'0'
MOVWF TRISB
MOVLW d'0'
MOVWF TRISD
;chon lai bank 0 de xuat gia tri mong muon ra portb
BCF STATUS,RP0
CLRF COUNT_DV
CLRF COUNT_CHUC
;QUY DINH. PORT B XUAT HANG CHUC, PORT D XUAT HANG DON VI
;o day dung led co cac cathode noi cung 1 diem. --> sang o muc 1
;================================================= =============
LOOP4
MOVF COUNT_DV,W
CALL table
MOVWF PORTD
CALL delay_100ms
INCF COUNT_DV,0
MOVF COUNT_DV,w
XORLW D'9'
BTFSC STATUS,2
GOTO resetDV
GOTO TINHOK
TINHOK
INCF COUNT_DV,1
;----------- DUA GIA TRI CUA THANH COUNT_CHUC VAO THANH PCL -----------
MOVF COUNT_CHUC,W
CALL table
MOVWF PORTB
CALL delay_100ms
;======================KIEM TRA 100 CHUA,100 ROY THI COMBACK ===========
MOVF COUNT_CHUC,w
XORLW D'10'
BTFSC STATUS,2
GOTO TINHOK2
GOTO LOOP4
;=================CHUONG TRINH CON===========================
resetDV
CLRF COUNT_DV
INCF COUNT_CHUC,1
GOTO LOOP4
TINHOK2
CLRF COUNT_CHUC
GOTO LOOP4
;====================GOI BANG--------------------

table
ADDWF PCL,1
;so_0
RETLW b'00111111'
;so_1
RETLW b'00000110'
;so_2
RETLW b'01011011'
;so_3
RETLW b'01001111'
;so_4
RETLW b'01100110'
;so_5
RETLW b'01101101'
;so_6
RETLW b'01111100'
;so_7
RETLW b'00000111'
;so_8
RETLW b'01111111'
;so_9
RETLW b'01101111'
;======================DELAY====================== ==
delay_100ms
MOVLW d'250'
MOVWF count1
loop1
DECFSZ count1,1
goto loop2
return
loop2
movlw d'250'
movwf counta
loop3
decfsz counta,1
goto loop3
goto loop1
end

đây là bài sữa hoàn chỉnh
lỗi đầu tiên của bạn là mới vào đã gắn 1 vào thanh "count_dv" và "count_chuc" vì như vậy thi khi vào bảng(table) và khi xuất ra sẽ là số 1.
lỗi thứ 2 là theo mình nghĩ bạn nên xuat ra xong rồi hãy kiểm tra xem đã đũ 9 chưa để mà clrf nó.nhưng ma lu ý bạn là mình kinm63 tra hàng dv là "9"
và hàng chuc là "10"
vì giá trị đầu tiên của bạn là 0 ở dv.khi gọi bảng sẽ xuất ra số 0.và khi xuất ra số 9 thi gia tri hang dv của bạn vận là 9.nếu kiểm tra 10 sẽ xuất hiện nhiễu.
lỗi bự nhất của bạn là không được xóa thanh ghi "PCL" vì khi xóa thi PIC sẽ hông chạy nữa(theo minh nghĩ :D) và giá trị của thanh ghi PCL k ảnh hưởng tới lệnh RETLW mà là giá trị của thanh ghi W mới ảnh hướng tới nó.
sau đây là hình mình đã làm và ca file mô phỏng theo khai báo I/O của bạn
mình tạo vòng lập chậm 1 chút để dễ quan sát ____tinhok_____
bài mình sửa dựa trên code của bạn nên sắp xếp hơi lộn xộn tùm lum xí :D

hix.viết c oy coi lại mấy cái ASM.công nhận oãi thiệc :D


Múi giờ GMT. Hiện tại là 07:51 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam