|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
|
Ðiều Chỉnh | Xếp Bài |
04-11-2010, 08:40 PM | #1 |
Nhập môn đệ tử
Tham gia ngày: Sep 2010
Bài gửi: 4
: |
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 |
05-11-2010, 10:01 AM | #2 |
Nhập môn đệ tử
Tham gia ngày: Sep 2010
Bài gửi: 4
: |
sao khong ai giup het vay???????????????????
|
05-11-2010, 01:43 PM | #3 |
Đệ tử 4 túi
|
Không có sơ đồ nguyên lí !Bạn không nêu rõ là lỗi gì !Làm sao giúp
__________________
My blog: http://autumnneverreturn.blogspot.com/ Đối thủ khó chiến thắng nhất là bản thân !!! |
05-11-2010, 02:01 PM | #4 |
Nhập môn đệ tử
Tham gia ngày: Sep 2010
Bài gửi: 4
: |
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
|
09-11-2010, 08:40 PM | #5 |
Nhập môn đệ tử
Tham gia ngày: May 2010
Bài gửi: 9
: |
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ĩ ) 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í hix.viết c oy coi lại mấy cái ASM.công nhận oãi thiệc thay đổi nội dung bởi: sonluyen, 09-11-2010 lúc 09:02 PM. |
|
|