![]() |
|
Tài trợ cho PIC Vietnam |
MPASM Lập trình bằng hợp ngữ là một việc làm vô cùng vất vả, tuy nhiên, để hiểu và làm việc với vi điều khiển, hợp ngữ trở thành một công cụ khá đắc lực ... |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Đệ tử 1 túi
Tham gia ngày: Apr 2009
Bài gửi: 20
: |
![]() 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 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 thay đổi nội dung bởi: namqn, 04-06-2009 lúc 01:20 PM. Lý do: định dạng code |
![]() |
![]() |
![]() |
#2 |
Đệ tử 6 túi
Tham gia ngày: Nov 2008
Nơi Cư Ngụ: Di Linh
Bài gửi: 131
: |
Không cho phần cứng khác nào đánh đố nhau
|
![]() |
![]() |
![]() |
#3 |
Đệ tử 1 túi
Tham gia ngày: Apr 2009
Bài gửi: 20
: |
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 thay đổi nội dung bởi: maitruccucdao, 05-06-2009 lúc 09:51 PM. |
![]() |
![]() |
![]() |
#4 | |
Đệ tử 6 túi
Tham gia ngày: Nov 2008
Nơi Cư Ngụ: Di Linh
Bài gửi: 131
: |
Trích:
[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 ! |
|
![]() |
![]() |
![]() |
#5 |
Đệ tử 1 túi
Tham gia ngày: Apr 2009
Bài gửi: 20
: |
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" |
![]() |
![]() |
![]() |
#6 |
Đệ tử 6 túi
Tham gia ngày: Nov 2008
Nơi Cư Ngụ: Di Linh
Bài gửi: 131
: |
[
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 |
![]() |
![]() |
![]() |
#7 |
Đệ tử 1 túi
Tham gia ngày: Apr 2009
Bài gửi: 20
: |
![]() 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 thay đổi nội dung bởi: maitruccucdao, 06-06-2009 lúc 10:43 AM. |
![]() |
![]() |
![]() |
|
|