📄 tc728720.asm
字号:
;**********************************************************************
; *
; Filename: TC728720.asm *
; Date: 11/25/03 *
; File Version: 1.1 *
; *
; Author: TSENG-HSUAN FAN *
; *
; *
;**********************************************************************
; *
; Notes: *
; *
; 1. THIS SOFTWARE IS PROVIDED IN AN "AS IS" CONDITION. NO WARRANTIES,*
; WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED *
; TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
; PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE AUTHOR SHALL NOT, *
; IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR *
; CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. *
; 2. THIS PROGRAM WAS TESTED ON SSE8720 DEMO BOARD. *
; 3. THE DEMONSTRATION BOARD SSE8720 SPECIFICATIONS CAN BE FOUND AT *
; WWW.EVB.COM.TW *
;**********************************************************************
list p=18F8720
#include <p18F8720.inc>
#DEFINE TMP_ENB PORTH,0 ;TC72 CE
#DEFINE SPI_CK PORTC,3 ;SERIAL CLOCK
#DEFINE SPI_DI PORTC,5 ;SERIAL DATA IN
#DEFINE SPI_DO PORTC,4 ;SERIAL DATA OUT
; REGISERS TO STORE DATA
MSB EQU 0X34
LSB EQU 0X35
CNT RES 1
TEMP RES 1
ORG 0X00 ; START OF PROGRAM
CLRF TRISD ; SET PORTD AS OUTPUT PORT
MOVLW 0XFF ; TURN OFF LEDs
MOVWF PORTD ; "
CALL SPI_INIT ; INITILIZE SERIAL COMMUNICATION
CALL TC72_CONVERSION_MODE; LET TC72 STARTS CONVERTING EVERY 150ms
LOOP
CALL TC72_READING_MODE ; GET THE TEMPERATURE FROM TC72
COMF MSB,F ; LEDs ARE ACTINE LOW
MOVFF MSB,PORTD ; THEREFORE, COMPLEMENT THE DATA AND DISPLAY
CALL DELAY_100MS ; WAIT 200ms
CALL DELAY_100MS ; "
GOTO LOOP ; INFINITE LOOP
;;;---------------------------------------------------------------------
;;; TEMPERATURE SENSOR
;;;---------------------------------------------------------------------
TC72_READING_MODE
BSF TMP_ENB ; START SPI COMMUNICATION
NOP ; CLOCK SET UP DELAY
NOP ; "
MOVLW 0X02 ; MSB ADDRESS
CALL WRITE_SPI ; CALL WRITE SUBROUTINE
CALL READ_SPI ; CALL READ SUBROUTINE
MOVWF MSB ; COPY DATA TO MSB REGISTER
CALL READ_SPI ; READ LSB DATA
MOVWF LSB ; COPY DATA TO LSB REGISTER
NOP ; TCCH DELAY
NOP ; "
bCf TMP_ENB ; Terminate SPI communication
RETURN
TC72_CONVERSION_MODE
BSF TMP_ENB ; START SPI COMMUNICATION
NOP ; CLOCK SET UP DELAY
NOP ; "
MOVLW 0X80 ; CONTROL REGISTER ADDRESS
CALL WRITE_SPI ; CALL WRITE SUBROUTINE
MOVLW 0X00 ; TEMP. CONVERSION MODE
CALL WRITE_SPI ; CALL WRITE SUBROUTINE
NOP ; TCCH DELAY TIME
NOP ; "
bCf TMP_ENB ; Terminate SPI communication
RETURN
TC72_SAVING_MODE
BSF TMP_ENB ; START SPI COMMUNICATION
NOP ; CLOCK SET UP DELAY
NOP ; "
MOVLW 0X80 ; CONTROL REGISTER ADDRESS
CALL WRITE_SPI ; CALL WRITE SUBROUTINE
MOVLW 0X01 ; POWER SAVING MODE
CALL WRITE_SPI ; CALL WRITE SUBROUTINE
NOP ; TCCH DELAY TIME
NOP ; "
bCf TMP_ENB ; Terminate SPI communication
RETURN
READ_SPI
MOVLW 0X08 ; 8-BIT DATA
MOVWF CNT ; SET UP COUNTER
SPI_R_LOOP
RLNCF TEMP,F ; ROTATE TEMP REGISTER TO LEFT 1 BIT
BSF SPI_CK ; ASSERT CLOCK
BCF TEMP,0 ; DETERMINE INCOMING DATA
BTFSC SPI_DI ; IN-DATA = 0, SET TEMP,0 LOW
BSF TEMP,0 ; IN-DATA = 1, SET TEMP,0 HIGH
BCF SPI_CK ; DS-ASSERT CLOCK
DECFSZ CNT,F ; DECREMENT CONTER
GOTO SPI_R_LOOP ; NOT DONE YET
MOVF TEMP,W ; DONE. COPY DATA TO WREG REGISTER
RETURN
WRITE_SPI
MOVWF TEMP ; MOVE COMMAND TO TEMP
MOVLW 0X08 ; 8-BIT DATA
MOVWF CNT ; SET UP COUNTER
SPI_W_LOOP
BCF SPI_DO ; SHIFT OUT MSB
BTFSC TEMP,7 ; DETERMINE HIGH OR LOW
BSF SPI_DO ; "
BSF SPI_CK ; ASSERT CLOCK
RLNCF TEMP,F ; ROTATE TEMP TO LEFT ONE BIT
BCF SPI_CK ; DE-ASSERT CLOCK
DECFSZ CNT,F ; DECREMENT COUNTER
GOTO SPI_W_LOOP ; NOT DONE YET
RETURN
SPI_INIT
MOVLW B'00100000' ; SET UP THE PORT DIRECTION
MOVWF TRISC ; BIT5 INPUT, THE RESET OUTPUT
MOVLW B'00000000' ; CLEAR PORTC
MOVWF PORTC ; "
movlw 0x0F ; SET PORTH AS DIGITAL IO
movwf ADCON1 ; "
clrf PORTH ; CLEAR PORTH
clrf LATH ; "
CLRF TRISH ; SET PORTH AS OUTPUT PORT
clrf PORTH ; "
RETURN
#INCLUDE <c:\PIC18\8720 folder\DELAY.ASM>
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -