|
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 |
11-04-2013, 12:30 PM | #1 |
Đệ tử 1 túi
Tham gia ngày: Sep 2007
Bài gửi: 11
: |
16F887 giao tiếp với 18B20 (one_wire)
Chạy mô phỏng với Protues, kết quả nhận được toàn là FFH (Low) FFH (high).
Không biết sai chổ nào, các giúp đở . Pic 16F887, thạch anh 4MHz. như vậy mỗi chu kỳ lệnh = 1us. Khả năng sai là ở WRITE_TIME_SLOT và READ_TIME_SLOT; thay đổi tới lui cũng không được. Nhờ giúp đở. ;============================== Code Main: MAIN call RESET_18B20 movlw 0CCH movwf TEMP call WRITE_18B20 ;SKIP ROM command movlw 44H movwf TEMP call WRITE_18B20 ;temperature convert command ;==== call delay_750ms ;==== call RESET_18B20 movlw 0CCH movwf TEMP call WRITE_18B20 ;SKIP ROM command movlw 0BEH movwf TEMP call WRITE_18B20 ;READ temperature command call READ_18B20 ;READ temperature low byte movfw TEMP movwf PORTC movwf TEMP1 ;keep in TEMP1 call READ_18B20 ;READ temperature high byte movfw TEMP movwf PORTD movwf TEMP2 ;keep in TEMP2 goto MAIN ;========== RESET_18B20 banksel TRISB bcf Tris_DQ banksel PORTB bcf DQ movlw 0A4H ;500us movwf COUNT decfsz COUNT,1 goto $-1 banksel TRISB bsf Tris_DQ banksel PORTB movlw 0F4H movwf COUNT loop_reset_18B20 btfss DQ goto OK_RESET_18B20 decfsz COUNT,1 goto loop_reset_18B20 ;otherwise continue reset bsf DQ nop nop goto RESET_18B20 OK_RESET_18B20 btfss DQ goto $-1 banksel TRISA bcf Tris_DQ banksel PORTB bsf DQ return ;=========== WRITE_18B20 movlw 08H movwf COUNT1 WRITE_18B20_1 rrf TEMP,1 call WRITE_TIME_SLOT decfsz COUNT1,1 ;if finish 8 bit data goto WRITE_18B20_1 movlw 23H ;106us movwf COUNT decfsz COUNT,1 goto $-1 return ;============= WRITE_TIME_SLOT ;viet 1 bit bcf DQ nop nop bsf DQ ;3us movlw 04H ;17us movwf COUNT decfsz COUNT,1 goto $-1 btfss STATUS,C ;judge the write data is 0 or 1 goto WRITE_END bsf DQ WRITE_END movlw 13H ;58us movwf COUNT decfsz COUNT,1 goto $-1 bsf DQ nop return ;================ READ_18B20 movlw 08H movwf COUNT1 READ_18B20_1 call READ_TIME_SLOT decfsz COUNT1,1 ;if finish reading 8 bit goto READ_18B20_1 movlw 1FH movwf COUNT decfsz COUNT,1 goto $-1 return ;================== READ_TIME_SLOT bcf DQ nop nop bsf DQ ;3us banksel TRISA bsf Tris_DQ banksel PORTA movlw 04H ;16us movwf COUNT ; decfsz COUNT,1 goto $-1 bsf STATUS,C btfss DQ bcf STATUS,C rrf TEMP,1 movlw 11H movwf COUNT ; decfsz COUNT,1 goto $-1 ;pull low 56us banksel TRISA bcf DQ banksel PORTA bsf DQ nop nop return ;================== delay_750ms movlw 04H movwf DQ_DELAY3 DELAY_750MS_3 movlw 0FFH movwf DQ_DELAY2 DELAY_750MS_2 movlw 0FFH movwf DQ_DELAY1 DELAY_750MS_1 decfsz DQ_DELAY1,1 goto DELAY_750MS_1 decfsz DQ_DELAY2,1 goto DELAY_750MS_2 decfsz DQ_DELAY3,1 goto DELAY_750MS_3 return ;============= thay đổi nội dung bởi: duc thang, 11-04-2013 lúc 04:00 PM. |
|
|