top
<返回首页 <退出
欢迎您来到51-ARM学习论坛,您还没有[注册]或[登陆]
用户名:  
密  码:  
验证码:  
共有1299位会员 新进来宾:xle
今日发帖:27篇 在线人数:965人
最高发帖:140篇 主题总数:589篇
消息:热烈祝贺侯工单片机工作室官方网站正式开通!论坛版块诚征精英斑竹...凡51-ARM论坛斑竹,均有机参加侯工单片机工作室组织的各种技术交流,培训!!!
 论坛帮助  
  51-ARM学习论坛>>源码下载区>>温度计源代码
 
回帖
当前心情:

内  容:
   
 

;************************************************************************
;FUNCTION:  Thermometry                                                                                                      *
;HARDWARE: P0.0-3 connect 7447 P0.4-6 connect 138                                                          *
;                    P3.0 connect  18B20                                                                                          *
;AUTHOR:      luochao                                                                                                              *
;DATA:          2008-12-15 06:04                                                                                              *
;************************************************************************
;43H 42H.41H 40H
R_SelectShow    EQU    44H            ;Select which DPRAM to Show
R_SelectData     EQU    45H             ;Select which LED to light
R_ShowCount    EQU    46H            ;There are 4 LED to show
R_TempValueA   EQU    47H           ;Need a temp register for A to PUSH
R_DataBuffer     EQU     48H           ;Buffer for send/receive
R_DataHigh       EQU     49H           ;Temperature data high byte
R_DataLow       EQU     4AH            ;Temperature data low byte
R_Fraction         EQU    4BH            ;Fraction of temperature value
VQ                     BIT      P3.0           ;DataBus between MCU and 18B20
;------------------------------------------------------------------------
 ORG 0000H
 LJMP L_MAIN
 ORG 000BH
 LJMP INT_T0
 ORG 0030H
;========================================================================
;    MAIN
;========================================================================
L_MAIN:
 MOV SP,#60H 
 MOV TMOD,#01H                        ;Config T0 to generate 10ms interrupt
 MOV TH0,#HIGH(65536-10000)
 MOV TL0,#LOW(65536-10000)
 SETB EA
 SETB ET0
 SETB TR0
 CLR F0
 MOV R_SelectShow,#00H
 MOV R_SelectData,#40H
 MOV R_ShowCount,#04H
 MOV R0,#40H 
L_ClearDPRAM:
 MOV @R0,#00H
 INC R0
 CJNE R0,#44H,L_ClearDPRAM
L_GetTemperature:
 LCALL F_18B20
 LJMP L_GetTemperature
;--------------------------------------
F_18B20:
 CLR EA
 LCALL F_RST
 JNB F0,L_Exit18B20
 MOV R_DataBuffer,#0CCH ;Send skip rom instruction
 LCALL F_SendByte 
 MOV R_DataBuffer,#44H ;Send convert instruction
 LCALL F_SendByte
 SETB EA
 LCALL F_Delay750  ;Need 750ms to Convert
 CLR EA
 LCALL F_RST
 JNB F0,L_Exit18B20
 MOV R_DataBuffer,#0CCH ;Send skip rom instruction
 LCALL F_SendByte
 MOV R_DataBuffer,#0BEH ;Send read temperature
 LCALL F_SendByte
 LCALL F_READ
 MOV R_DataLow,A  ;Read temperature data
 LCALL F_READ
 MOV R_DataHigh,A
 LCALL F_TRANSLATE  ;Translate temperature code
L_Exit18B20:
 SETB EA
 RET
;--------------------------------------
F_RST:
 SETB VQ
 NOP
 NOP
 CLR VQ
 LCALL F_Delay600
 SETB VQ
 LCALL F_Delay30
 MOV C,VQ
 JC L_Fail
 SETB F0  
 LJMP L_ExitRST
L_Fail:
 CLR F0
L_ExitRST:
 LCALL F_Delay120
 SETB VQ
 RET
;---------------------------------------
F_SendByte:
 MOV A,R_DataBuffer
 MOV R2,#08H
L_SendBit:
 CLR C
 RRC A
 JC L_SendBit1
 LCALL F_SendBit0
 AJMP L_SendNextbit
L_SendBit1:
 LCALL F_SendBit1
L_SendNextbit:
 DJNZ R2,L_SendBit
 RET
;---------------------------------------
F_SendBit0:
 SETB VQ
 NOP
 NOP
 CLR VQ
 LCALL F_Delay60
 SETB VQ
 RET
;---------------------------------------
F_SendBit1:
 SETB VQ 
 NOP
 NOP
 CLR VQ
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
 SETB VQ
 LCALL F_Delay60
 RET
;----------------------------------------
F_READ:
 MOV R3,#08H
L_ReadBit:
 LCALL F_ReadBit
 RRC A
 DJNZ R3,L_ReadBit
 RET
;----------------------------------------
F_ReadBit:
 SETB VQ
 NOP
 NOP
 CLR VQ
 NOP
 NOP
 NOP
 SETB VQ
 NOP
 NOP
 NOP
 NOP
 MOV C,VQ 
 LCALL F_Delay60
 RET
;-----------------------------------------
F_TRANSLATE:
 MOV A,R_DataHigh
 ANL A,#0FH
 MOV R_DataHigh,A
 MOV A,R_DataLow
 ANL A,#0F0H
 ORL A,R_DataHigh
 SWAP A
 MOV B,#10
 DIV AB
 MOV 43H,A
 MOV 42H,B
 MOV A,R_DataLow
 ANL A,#0FH
 MOV B,#02H
 MUL AB
 MOV R_Fraction,A
 MOV DPTR,#Table
 MOVC A,@A+DPTR
 MOV 41H,A
 MOV A,R_Fraction
 INC DPTR
 MOVC A,@A+DPTR
 MOV 40H,A
 RET
Table:
 DB 0,0,0,6,1,2,1,8,2,5,3,1,3,7,4,3
 DB 5,0,5,6,6,2,6,8,7,5,8,1,8,7,9,3
;-----------------------------------------------
F_Delay30:
 MOV R4,#15
 DJNZ R4,$
 RET
;------------------------------
F_Delay60:
 MOV R4,#30
 DJNZ R4,$
 RET
;------------------------------
F_Delay120:
 MOV R4,#60
 DJNZ R4,$
 RET
;------------------------------
F_Delay600:
 MOV R5,#3
L_LOOP:
 MOV R4,#100
 DJNZ R4,$
 DJNZ R5,L_LOOP
 RET
;------------------------------
F_Delay750:
 MOV R6,#9
L_LOOP1:
 MOV R5,#100
L_LOOP2:
 MOV R4,#100
 DJNZ R4,$
 DJNZ R5,L_LOOP2
 DJNZ R6,L_LOOP1
 RET
;========================================================================
;          INTERRUPT
;========================================================================
INT_T0:
 MOV R_TempValueA,A
 PUSH R_TempValueA
 PUSH PSW
 CLR RS0
 SETB RS1
 CLR TR0
 MOV TL0,#LOW(65516-4000)
 MOV TH0,#HIGH(65536-4000)
 SETB TR0
 LCALL F_Show
 POP PSW
 POP R_TempValueA
 MOV A,R_TempValueA
 RETI
;-------------------------------------
F_Show:
 MOV R0,R_SelectData
 MOV A,@R0
 ANL A,#0FH
 SWAP A
 ORL A,R_SelectShow
 SWAP A
 MOV P1,A
 INC R_SelectData
 INC R_SelectShow
 DJNZ R_ShowCount,L_ExitShow
 MOV R_SelectData,#40H
 MOV R_SelectShow,#00H
 MOV R_ShowCount,#04H
L_ExitShow:
 RET
;-------------------------------------
 END
bottom
 
联系电话:0755-26766021 邮箱:51-ARM@163.com QQ群:43996737
项目定制承接手机:13798532857(侯工)
部分内容转载于网络,如有涉及版权问题,请通知本站删除。
粤ICP备09217420号 版权所有  @  2008-2012  侯工单片机工作室