分享

温度DS18b20与PIC单片机通讯程序

 wwwijhyt图书馆 2014-05-04

ORG     PIC54
     GOTO    MAIN
     ORG     0
;----------------------
;----------------------------
DELAY22           
        MOVLW   D'200'               ; DELAY 2*250=500mS
        MOVWF    COUNT1
DE32    MOVLW   D'250'                ; 8*250=2mS
    MOVWF    COUNT2
DE42    NOP                          ; 1+2+1=5uS
        DECFSZ    COUNT2,1
        GOTO    DE42
        DECFSZ    COUNT1,1
        GOTO    DE32
        RETLW   0            
;--------------------------------
;       子程序!!!
;********************************
MAIN
        MOVLW  0FFH
        TRIS   RA
LOOP
        CALL   CONVERT
        CALL   DELAY22
        CALL   DELAY22
        CALL   GET_TEMP

        GOTO   LOOP
;------------------------
GET_TEMP
       CALL   INI
       MOVLW  0CCH
       MOVWF  COMD
       CALL   WR1820
       MOVLW  0BEH
       MOVWF  COMD
       CALL   WR1820
       CALL   RE1820
       MOVF   TEM_DATE,W
       MOVWF  TEM_DATEL
       CALL   RE1820
       MOVF   TEM_DATE,W
       MOVWF  TEM_DATEH
       RETLW  0
;------------------------
CONVERT
        CALL   INI
        MOVLW  0CCH
        MOVWF  COMD
        CALL   WR1820
        MOVLW  44H
        MOVWF  COMD
        CALL   WR1820
        RETLW  0

;---------DS1820---------
INI
     ;MOVLW  B'00100000'
     MOVLW  0
     TRIS   RA
     BSF    RA,3
     NOP
     BCF    RA,3
     MOVLW  D'200'
     MOVWF  COUNT1
L0
     DECFSZ COUNT1,1
     GOTO   L0
     ;MOVLW  B'01100000'
     MOVLW  0FH
     TRIS   RA
     MOVLW  D'30'
     MOVWF  COUNT1
L1
     DECFSZ COUNT1,1
     GOTO   L1
     BTFSC  RA,3
     GOTO   INI
L2
     MOVLW  D'80'
     MOVWF  COUNT1
L3
     DECFSZ COUNT1,1
     GOTO   L3
     BTFSS  RA,3
     GOTO   L0
     RETLW  0
;-------------------------
WR1820
     MOVLW   8
     MOVWF   COUNT2
WR0
     ;MOVLW   B'00100000'
     MOVLW   0
     TRIS    RA
     BCF     RA,3
     NOP
     NOP
     MOVLW   2
     MOVWF   COUNT1
WR1    
     DECFSZ  COUNT1,1
     GOTO    WR1
     ;MOVLW   B'01111111'
     MOVLW   0FH
     BTFSC   COMD,0
     BSF     RA,3
     BTFSC   COMD,0
     TRIS    RA
     BCF     STATUS,C
     RRF     COMD,1
     MOVLW   D'20'
     MOVWF   COUNT1
WR2
     DECFSZ  COUNT1,1
     GOTO    WR2
     BSF     RA,3
     ;MOVLW   B'01100000'
     MOVLW   0FH
     TRIS    RA
     DECFSZ  COUNT2,1
     GOTO    WR0
     RETLW   0
;--------------------------
RE1820
     MOVLW   8
     MOVWF   COUNT2
RE0
     ;MOVLW   B'00100000'
     MOVLW   0
     TRIS    RA
     BCF     RA,3     
     MOVLW   2
     MOVWF   COUNT1
RE1    
     DECFSZ  COUNT1,1
     GOTO    RE1
     ;MOVLW   B'01100000'
     MOVLW   0FH
     TRIS    RA
     NOP
     BTFSS   RA,3
     BCF     STATUS,C
     BTFSC   RA,3
     BSF     STATUS,C   
     RRF     TEM_DATE,1
     MOVLW   D'20'
     MOVWF   COUNT1
RE2
     DECFSZ  COUNT1,1
     GOTO    RE2
     DECFSZ  COUNT2,1
     GOTO    RE0
     BSF     RA,3
     RETLW   0
;-------------------------     
;****************************
;**************************
         END

 

PIC控制时钟芯片DS1302汇编程序

;PIC单片机 http://www./
#INCLUDE
CBLOCK 20H
SEC ;秒
MIN ;分
HOU ;小时
DATE ;日期
MON ;月
DAY ;日
YERR ;年
DDD ;写使能位
TIME_TX ;1302发送寄存器
TIME_RX ;1302接收寄存器
COUNT1 ;
COUNT2 ;
DELAY1
DELAY2
ENDC
*******************************
; ; 1302子程序说明
; ;******************************
; DS1302INI ;1302初始化,先禁止RST,设定充电方式
; SET_TIME ;一次发送7个数据设定时间,包含写使能寄存器,8个数据
; GET_TIME ;一次接收7个数据显示时间
; TIME_WRITE_1;一次写入1302一个字节
; TIME_READ_1 ;一次接收一个字节数据
; ;******* 1302定义**************
; ;******************************
#DEFINE I_O PORTC,7 ;1302I_O
#DEFINE SCLK PORTC,6 ;1302时钟
#DEFINE RST PORTA,0 ;1302使能位
#DEFINE RX_ADD 40H ;保存接受的7个数据
#DEFINE TX_ADD 20H ;开始保存7个要写入的时间数据
BANK1 MACRO
BSF STATUS,RP0
ENDM
BANK0 MACRO
BCF STATUS,RP0
ENDM

ORG 000H
NOP
GOTO MAIN
MAIN

CALL CLR_RAM 清除RAN
CALL PORT_INI 端口定义
CALL DS1302_INI
CALL SET_TIME 一次写入7个时间数据
CALL GET_TIME ; 一次读回7个时间数据
GOTO $


;; 写入秒,可以写任意的7个时间数据,单字节
MOVLW B'10000000'
MOVWF TIME_TX
BSF RST
CALL TIME_WRITE_1
MOVLW B'00100101'
MOVWF TIME_TX
CALL TIME_WRITE_1
BCF RST

读秒,可以读任意7个时间,单字节


MOVLW B'10000001'
MOVWF TIME_TX
BSF RST
CALL TIME_WRITE_1
CALL TIME_READ_1
BCF RST

GOTO $

:子程序

**************************************************
; DS1302_INI
; 作用:初始化1302,先禁止RST,允许写使能
;**************************************************
DS1302_INI
BCF SCLK
BCF RST ;先禁止
MOVLW B'10001110' ;写使能寄存器
MOVWF TIME_TX
BSF RST
CALL TIME_WRITE_1
MOVLW B'0' ;允许写使能
MOVWF TIME_TX
CALL TIME_WRITE_1;发送一个字节的数据
BCF RST

;设定充电方式

没有设定
RETURN

;**************************************************
; SET_TIME
; 作用:一次输入7个数据来一次性的设定时间,同时使能写寄存器
; 突发模式写入,必须写入8个数据,不是7个
; INPUT:要设定的8个数据已经写入到TIME_TX_ADD开始的8个字节里面
;**************************************************
SET_TIME
MOVLW B'10111110' ;标志位
MOVWF TIME_TX
BSF RST
CALL TIME_WRITE_1
;TIME_WRITE_8 ;发送8个数据
MOVLW TIME_TX_ADD ;发送数据的起始地址
MOVWF FSR
MOVLW D'8'
MOVWF COUNT2
TW1
MOVF INDF,W
MOVWF TIME_TX
CALL TIME_WRITE_1
INCF FSR,F
DECFSZ COUNT2,F
GOTO TW1
BCF RST
RETURN
;***********************************************
; GET_TIME
; 作用:一次接受7个字节的时间数据,突发模式读取
; INPUT:NONE
; OUTPUT:把7个时间数据保存在TIME_RX_ADD开始的7个寄存器里面
;***********************************************
GET_TIME
MOVLW B'10111111'
MOVWF TIME_TX
BSF RST
CALL TIME_WRITE_1
;TIME_READ_7 ;接收7个数据
MOVLW TIME_RX_ADD ;保存数据的起始地址
MOVWF FSR
MOVLW D'7'
MOVWF COUNT2
TR2
CALL TIME_READ_1
MOVF TIME_RX,W
MOVWF INDF
INCF FSR,F
DECFSZ COUNT2,F
GOTO TR2
BCF RST
RETURN
;************************************************
; TIME_WRITE_1
; 作用:一次发送一个字节的数据,用于发送1302的
; 控制字或者发送一个数据
; INPUT: TIME_TX
;************************************************
TIME_WRITE_1
MOVLW D'8'
MOVWF COUNT1
TLOP
BCF I_O ;初始值是低电平
BCF SCLK
BTFSC TIME_TX,0
BSF I_O
RRF TIME_TX,F
BSF SCLK ;高电平发送数据
DECFSZ COUNT1,F
GOTO TLOP
BCF SCLK ;恢复
RETURN
;************************************************
; TIME_READ_1
; 作用:读取1302一个字节的数据
; INPUT: NONE
; OUTPUT:接收数据保存在TIME_RX里面
; 原理:在SCLK下降沿接收数据,低字节在前,根据I_O的
; 的电平的高低,采取带进位和不带进位右移.
;***********************************************
TIME_READ_1
BANK1
BSF TRISC,7 ;I_O IS INPUT
BANK0
MOVLW D'8'
MOVWF COUNT1 ;读取8个字节
TR1
BCF SCLK ;下降沿读取
BCF STATUS,C
BTFSC I_O
BSF STATUS,C
RRF TIME_RX,F
BSF SCLK ;恢复高电平
DECFSZ COUNT1,F
GOTO TR1
BANK1
BCF TRISC,7 ;OUTPUT
BANK0
BCF SCLK ;恢复
RETURN
NOP

 

PORT_INI
BANK1
MOVLW B'00000000'
MOVWF TRISC
MOVLW B'0'
MOVWF TRISB
MOVLW B'00000111'
MOVWF ADCON1
MOVLW B'00000000'
MOVWF TRISA
BANK0
MOVLW 18H
MOVWF 20H
MOVLW 19H
MOVWF 21H
MOVLW 05H
MOVWF 22H
MOVLW 13H
MOVWF 23H
MOVLW 14H
MOVWF 24H
MOVLW 15H
MOVWF 25H
MOVLW 16H
MOVWF 26H
RETURN
CLR_RAM
MOVLW 20H
MOVWF FSR
LOOP
CLRF INDF
INCF FSR,F
BTFSS FSR,7
GOTO LOOP ;清除32个
RETURN
END

LCD驱动HT1621的PIC源代码

;PIC单片机 http://www./ 
STATUS  EQU     3H
FSR     EQU     4H
RB      EQU     6H
RC      EQU     7H
OPTIONA EQU     81H
TRISB   EQU     86H
TRISC   EQU     87H

GENR0   EQU     053H
GENR1   EQU     054H
WD_RG   EQU     055H
DA_AG0  EQU     056H      ;SEG0 SEG1
DA_AG8  EQU     05EH      ;SEG16 SEG17
;.............................
C       EQU     0
Z       EQU     2
RP0     EQU     5
RP1     EQU     6
CS      EQU     2   
WDA     EQU     5     ;RC,5数据线
WCLK    EQU     1     ;RB,1写时钟线
RCLK    EQU     4     ;RB,4读时钟线
;..............................
 ORG     0H
 GOTO    START
;...............................
START   BSF     STATUS,RP0
        MOVLW   00H
        MOVWF   TRISB
        MOVLW   81H
        MOVWF   TRISC
        BCF     STATUS,RP0
        MOVLW   12H
        MOVWF   RB
        BSF     RC,2
        BSF     RC,5
        MOVLW   4
        MOVWF   OPTIONA
LOOP    NOP
        CALL  X_QUAN
        NOP
        GOTO   LOOP

;............................
X_QUAN     
        MOVLW   8H    
        CALL    ON_LCD   ;TRANSMIT TH1621 WORK MODE VALUE         
                 
        MOVLW   9H       ;显示9位LCD 
        CALL    DIS_DATA
      
        RETURN
;............................
ON_LCD  MOVWF GENR1
        BCF     RC,2
 MOVLW 80H  ;HI_W3 BITS:100
 MOVWF WD_RG       
 MOVLW 3        ;3位命令100
 CALL TRAM_DATA      
ON_LCD0 MOVF GENR1,0
 CALL ON_VALUE ;查表初始化LCD
 MOVWF WD_RG

 MOVLW 8        ;送8位查表值
 CALL TRAM_DATA
   
        BCF     RC,WDA
        NOP
        NOP
        BCF     RB,1
        NOP
        NOP
        BSF     RB,1
        BSF     RC,2
 DECFSZ GENR1,1
 GOTO ON_LCD+1      
 RETURN
;........................
ON_VALUE
 ADDWF 2
        NOP
 RETLW 03H ;LCD ON
 RETLW 01H ;SYS ON

 RETLW 08H ;TONE OFF
 RETLW 29H ;BISA1/3  4 COM     
 RETLW 18H ;256K           
 RETLW 05H ;WDT DISABLE

 RETLW 80H ;/IRQ DISABLE  *
 RETLW 0E3H ;NORMAL MODE   *

;................................
;TRANSMIT BITS SUBROUTINE
TRAM_DATA
        BCF     STATUS,0    
 MOVWF GENR0      
 BCF RB,1       
 RLF WD_RG       
 BTFSS 3,0
 GOTO $+3
 BSF RC,WDA
 GOTO $+2
 BCF RC,WDA
                  
 BSF RB,1      
 DECFSZ GENR0,1
 GOTO TRAM_DATA+2
             
 RETURN
;.......................
DIS_DATA      
 MOVWF GENR1   ;9位LCD
        BCF     RC,2
 MOVLW 0A0H
 MOVWF WD_RG ;WRITE CONTROL

 MOVLW 3H      ;3位写命令101
 CALL TRAM_DATA      
 MOVLW 00
 MOVWF WD_RG ;WRITE ADDRESS
 MOVLW 6H      ;6位地址 
 CALL TRAM_DATA ;             
DIS_DATA0
 
 MOVLW 0FFH
 MOVWF WD_RG ;DISPLAY CODE

 MOVLW 8       ;8段数据
 CALL TRAM_DATA

 DECFSZ GENR1,1
 GOTO DIS_DATA0
        BSF     RC,2
 RETLW 0
        END    

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章