PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   MPASM (http://www.picvietnam.com/forum/forumdisplay.php?f=34)
-   -   Help! Giúp mình sửa cos asm với (http://www.picvietnam.com/forum/showthread.php?t=4240)

maitruccucdao 04-06-2009 10:59 AM

Help! Giúp mình sửa cos asm với
 
bài viết của mình là dùng lm35 đo nhiệt độ rồi hiển thị lên led 7 đoạn, mình chỉ làm thử đo từ 0-3 độ, nhưng nó chỉ hiển thị 0 độ, khi tăng lên 1 độ thì nó hiển thị là số 01 nhưng sau đó lại nhảy về 00 liền, khi tăng lên 2 độ thì không hiển thị 02 mà nó hiển thị 00 luôn và các số lớn hơn mình chưa viết cho nó, nó vẫn hiển thị là 00...
Code:

PROCESSOR 16F877A
#INCLUDE <P16F877A.INC>
ORG 0X00
BCF STATUS, 6
BCF STATUS, 5
CLRF PORTB
CLRF PORTC
CLRF PORTA
CLRF PORTE
BSF STATUS,5
MOVLW 0X00
MOVWF PORTB
MOVLW 0X00
MOVWF PORTC
BCF STATUS, 5
MAIN
CALL ADC
MOVF ADRESH
XORLW D'0'
BTFSS STATUS,Z
GOTO LOOP0
XORLW D'1'
BTFSS STATUS,Z
GOTO LOOP1
XORLW D'2'
BTFSS STATUS,Z
GOTO LOOP2
XORLW D'3'
BTFSS STATUS,Z
GOTO LOOP3
GOTO MAIN

LOOP0
MOVLW 0X00
MOVWF PORTB
MOVLW B'00000010'
MOVWF PORTC
CALL DELAY
MOVLW 0X00
MOVWF PORTB
MOVLW B'00000100'
MOVWF PORTC
CALL DELAY
GOTO MAIN
LOOP1
MOVLW 0X00
MOVWF PORTB
MOVLW B'00000010'
MOVWF PORTC
CALL DELAY
MOVLW 0X01
MOVWF PORTB
MOVLW B'00000100'
MOVWF PORTC
CALL DELAY
GOTO MAIN
LOOP2
MOVLW 0X00
MOVWF PORTB
MOVLW B'00000010'
MOVWF PORTC
CALL DELAY
MOVLW 0X02
MOVWF PORTB
MOVLW B'00000100'
MOVWF PORTC
CALL DELAY
GOTO MAIN
LOOP3
MOVLW 0X00
MOVWF PORTB
MOVLW B'00000010'
MOVWF PORTC
CALL DELAY
MOVLW 0X03
MOVWF PORTB
MOVLW B'00000100'
MOVWF PORTC
CALL DELAY
GOTO MAIN

DELAY
MOVLW b'00100000'
MOVWF T1CON
MOVLW 0XCF
MOVWF TMR1H
MOVLW 0X2B
MOVWF TMR1L
BSF T1CON,0
loop
BTFSS PIR1,0
goto loop
BCF PIR1,0
return

ADC
BSF STATUS, 5
BSF ADCON1, 3
BCF ADCON1,2
BSF ADCON1, 1
BCF ADCON1, 0
BCF STATUS, 5
BSF ADCON0, 5
BCF ADCON0, 4
BSF ADCON0, 3
BSF STATUS, 5
BSF ADCON1, 6
BCF STATUS, 5
BCF ADCON0, 7
BCF ADCON0, 6
BSF STATUS, 5
BCF ADCON1, 7
BCF STATUS, 5
BSF ADCON0, 2
BSF ADCON0, 0
return
END

Mình sài con 74247 để giảm bớt port cho led
nếu bạn nào sửa được xin gởi thông tin sớm và nhớ gởi cho mình một địa chỉ liên hệ, như yahoo. hay số điện thoại gì nhé. thanks

phandinh 04-06-2009 12:04 PM

Không cho phần cứng khác nào đánh đố nhau

maitruccucdao 05-06-2009 12:41 AM

thôi nhờ các bạn xem dùm mình là lệnh nào sẽ thực hiện :"loo1 hay loop" nhé. Mình mô phỏng trong protues thấy nó bị kì kì.
processor 16f877a
#include<p16f877a.inc>
COUNT EQU 0X20
ORG 0000H
BCF STATUS, 6
BCF STATUS ,5
CLRF PORTA
BSF STATUS, 5
BCF TRISA, 1
BCF TRISA,4
BCF STATUS, 5
MAIN
MOVLW D'10'
MOVWF COUNT
MOVLW D'5'
SUBWF COUNT,0
BTFSS STATUS,0
GOTO LOOP
GOTO LOOP1
LOOP
BSF PORTA, 1
GOTO MAIN
LOOP1
BSF PORTA,4
GOTO MAIN
END

phandinh 05-06-2009 12:54 PM

Trích:

Nguyên văn bởi maitruccucdao (Post 26505)
thôi nhờ các bạn xem dùm mình là lệnh nào sẽ thực hiện kế nhé. Mình mô phỏng trong protues thấy nó bị kì kì
processor 16f877a
#include<p16f877a.inc>
COUNT EQU 0X20
ORG 0000H
BCF STATUS, 6
BCF STATUS ,5
CLRF PORTA
BSF STATUS, 5
BCF TRISA, 1
BCF TRISA,4
BCF STATUS, 5
MAIN
MOVLW D'10'
MOVWF COUNT
MOVLW D'5'
SUBWF COUNT,0
BTFSS STATUS,0
GOTO LOOP
GOTO LOOP1
LOOP
BSF PORTA, 1
GOTO MAIN
LOOP1
BSF PORTA,4
GOTO MAIN
END

[lệnh nào sẽ thực hiện kế] là lệnh nào.
[thấy nó bị kì kì] là như thế nào.
Mọi người còn chưa hiểu bạn hỏi gì thì làm sao co thể giúp bạn được.
Bạn nên suy nghĩ thật kĩ vấn đề bạn định hỏi, bạn nên nói rõ trọng tâm của vấn đề.
Nếu không sẽ chẳng ai trả lời bạn đâu.
Thân !

maitruccucdao 05-06-2009 09:46 PM

Mình xin lỗi, vì lên diễn đàn mà sơ xẩy quá, chắt tại bửa đó hấp tấp nên post tầm bậy tầm bạ.
bài của mình ở trên lệnh loop1 hay loop sẽ được thực hiện.
vì câu hỏi của mình hơi bị " không rõ ràng"

phandinh 05-06-2009 11:47 PM

[
MAIN
MOVLW D'10' ;
MOVWF COUNT ; count = 10
MOVLW D'5' ; w = 5
SUBWF COUNT,0 ; w = ( 10 - 5 ) = 5, C = 1, Z = 0
BTFSS STATUS,0 ; C = 1 ?
GOTO LOOP
GOTO LOOP1 ; C = 1 thì nhảy đến LOOP1
]
Theo như code của bạn thì thì chuơng trình sẽ nhảy đến LOOP1

maitruccucdao 06-06-2009 01:16 AM

Cám ơn bạn nhé. đúng rồi. Mình chạy trên protues cũng chạy như thế.
Nhưng nhờ bạn nói dùm mình thuật ngữ này nhé.
C=1 khi kết quả phép toán tác động lên bit MSB có nhớ
c=0 khi kết quả phép toán tác động lên bit MSB không có nhớ
mình nghĩ chẳng lẻ sách bị sai.
Hay mình đã hiểu nhầm. Cách nghĩ của mình là 10 -5 =5 thì c=0 .

Nhờ bạn xem giúp mình cái cos chuyển đổi ADC này xem, mình làm hoài mà vẫn không chạy bạn à.

processor 16f877a
#include<p16f877a.inc>
ORG 0000H
BCF STATUS, 6
BCF STATUS ,5
CLRF PORTE
BSF STATUS, 5
BCF PORTE,0
BCF TRISE, 2
BCF STATUS, 5
MAIN
CALL ADC
MOVLW D'10'
SUBWF ADRESH, 0
BTFSS STATUS,C
BSF PORTE,2
GOTO MAIN


ADC
BSF STATUS, 5
BSF ADCON1, 3
BcF ADCON1, 2
BsF ADCON1, 1
BcF ADCON1, 0
BCF STATUS, 5
BSF ADCON0, 5
BCF ADCON0, 4
BSF ADCON0, 3
BSF STATUS, 5
BSF ADCON1, 6
BCF STATUS, 5
BCF ADCON0, 7
BCF ADCON0, 6
BSF STATUS, 5
BCF ADCON1, 7
BCF STATUS, 5
BSF ADCON0, 0
BSF ADCON0, 2
LOOPA
BTFSC ADCON0, 2
GOTO LOOPA
RETURN
END
Mình đã làm hết cách rồi mà vẫn không ra, nên mới post hỏi xem. Các bạn nhớ post cm sớm cho mình nhé.Thanks


Múi giờ GMT. Hiện tại là 06:25 AM.

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