📄 lm75a.lst
字号:
23 =2
24 =2 #endif
14 =1 #include "I2C.h"
1 =2 #ifndef _I2C_H
2 =2 #define _I2C_H
3 =2
4 =2 //模拟I2C总线的引脚定义
5 =2
6 =2 sbit I2C_SCL = P3^4;
7 =2 sbit I2C_SDA = P3^5;
8 =2
9 =2
10 =2 //定义I2C总线时钟的延时值,要根据实际情况修改,取值1~255
11 =2 //SCL信号周期约为(I2C_DELAY_VALUE*4+15)个机器周期
12 =2 #define I2C_DELAY_VALUE 5
13 =2
14 =2
15 =2 //定义I2C总线停止后在下一次开始之前的等待时间,取值1~65535
16 =2 //等待时间约为(I2C_STOP_WAIT_VALUE*8)个机器周期
17 =2 //对于多数器件取值为1即可;但对于某些器件来说,较长的延时是必须的
18 =2 #define I2C_STOP_WAIT_VALUE 1
19 =2
20 =2
21 =2 //I2C总线初始化,使总线处于空闲状态
22 =2 void I2C_Init();
23 =2
24 =2
25 =2 //主机通过I2C总线向从机发送多个字节的数据
26 =2 bit I2C_Puts(unsigned char SlaveAddr, unsigned char SubAddr, unsigned char Size, char *dat);
27 =2
28 =2 bit I2C_Puts_s(unsigned char SlaveAddr, unsigned char SubAddr) ;
29 =2
30 =2 //主机通过I2C总线向从机发送1个字节的数据
31 =2 bit I2C_Put(unsigned char SlaveAddr, unsigned char SubAddr, char dat);
32 =2
33 =2
34 =2 //主机通过I2C总线从从机接收多个字节的数据
35 =2 bit I2C_Gets(unsigned char SlaveAddr, unsigned char SubAddr, unsigned char Size, char *dat);
36 =2
37 =2
38 =2 //主机通过I2C总线从从机接收1个字节的数据
39 =2 bit I2C_Get(unsigned char SlaveAddr, unsigned char SubAddr, char *dat);
40 =2
41 =2
42 =2 #endif
43 =2
15 =1 #include "key.h"
1 =2 #ifndef _KEY_H
2 =2 #define _KEY_H
3 =2
4 =2 //定义按键
5 =2 sbit KEY1 = P3^2; //按键1
6 =2 sbit KEY2 = P3^3; //按键2
7 =2
8 =2 sbit Buzzer=P2^4;//????
9 =2
10 =2 #define TemperatureMax 50
11 =2
12 =2 #define TemperatureMin 5
13 =2
14 =2 void INTInit();
C51 COMPILER V8.16 LM75A 10/04/2008 14:53:01 PAGE 6
15 =2
16 =2 #endif
17 =2
16 =1
17 =1 sbit LEDCool = P2^0; //定义LED由P0.0控制
18 =1 sbit LEDHot = P2^1; //定义LED由P0.0控制
19 =1 sbit LEDSet = P2^2; //定义LED由P0.0控制
20 =1
21 =1
22 =1 //unsigned char Temperature_Set;//设定温度
23 =1
24 =1 #endif
2
3 /*
4 函数:Delay()
5 功能:延时1ms~65.536s
6 参数:
7 t>0时,延时(t*0.001)s
8 t=0时,延时65.536s
9 */
10 void Delay(unsigned int t)
11 {
12 1 do
13 1 {
14 2 TH0 = 0xFC;
15 2 TL0 = 0x66;
16 2 TR0 = 1;
17 2 while ( !TF0 );
18 2 TR0 = 0;
19 2 TF0 = 0;
20 2 } while ( --t != 0 );
21 1 }
22
23
24 /*
25 函数:SysInit()
26 功能:系统初始化
27 */
28 void T0Init()
29 {
30 1 TMOD &= 0xF0;
31 1 TMOD |= 0x01; //设置T0为16位定时器
32 1 }
33
34
35 /*
36 函数:LM75A_GetTemp
37 功能:读出LM75A的温度值
38 返回:LM75A温度寄存器的数值(乘以0.125可得到摄氏度值)
39 */
40 int LM75A_GetTemp()
41 {
42 1 unsigned char buf[2];
43 1 int t;
44 1 I2C_Gets(0x90,0xAA,2,buf);
45 1 t = buf[0];
46 1 t <<= 8;
47 1 t += buf[1];
48 1 t >>= 5; //去掉无关位
49 1 return t;
50 1 }
51
C51 COMPILER V8.16 LM75A 10/04/2008 14:53:01 PAGE 7
52
53
C51 COMPILER V8.16 LM75A 10/04/2008 14:53:01 PAGE 8
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION _Delay (BEGIN)
; SOURCE LINE # 10
;---- Variable 't' assigned to Register 'R6/R7' ----
; SOURCE LINE # 11
0000 ?C0003:
; SOURCE LINE # 13
; SOURCE LINE # 14
0000 758CFC MOV TH0,#0FCH
; SOURCE LINE # 15
0003 758A66 MOV TL0,#066H
; SOURCE LINE # 16
0006 D28C SETB TR0
0008 ?C0004:
; SOURCE LINE # 17
0008 308DFD JNB TF0,?C0004
000B ?C0005:
; SOURCE LINE # 18
000B C28C CLR TR0
; SOURCE LINE # 19
000D C28D CLR TF0
; SOURCE LINE # 20
000F EF MOV A,R7
0010 1F DEC R7
0011 7001 JNZ ?C0009
0013 1E DEC R6
0014 ?C0009:
0014 14 DEC A
0015 4E ORL A,R6
0016 70E8 JNZ ?C0003
; SOURCE LINE # 21
0018 22 RET
; FUNCTION _Delay (END)
; FUNCTION T0Init (BEGIN)
; SOURCE LINE # 28
; SOURCE LINE # 29
; SOURCE LINE # 30
0000 5389F0 ANL TMOD,#0F0H
; SOURCE LINE # 31
0003 438901 ORL TMOD,#01H
; SOURCE LINE # 32
0006 22 RET
; FUNCTION T0Init (END)
; FUNCTION LM75A_GetTemp (BEGIN)
; SOURCE LINE # 40
; SOURCE LINE # 41
; SOURCE LINE # 44
0000 750000 E MOV ?_I2C_Gets?BYTE+03H,#00H
0003 750000 R MOV ?_I2C_Gets?BYTE+04H,#HIGH buf
0006 750000 R MOV ?_I2C_Gets?BYTE+05H,#LOW buf
0009 7B02 MOV R3,#02H
000B 7DAA MOV R5,#0AAH
000D 7F90 MOV R7,#090H
000F 120000 E LCALL _I2C_Gets
; SOURCE LINE # 45
0012 AF00 R MOV R7,buf
;---- Variable 't' assigned to Register 'R6/R7' ----
; SOURCE LINE # 46
C51 COMPILER V8.16 LM75A 10/04/2008 14:53:01 PAGE 9
0014 EF MOV A,R7
0015 7F00 MOV R7,#00H
0017 FE MOV R6,A
; SOURCE LINE # 47
0018 EF MOV A,R7
0019 2500 R ADD A,buf+01H
001B FF MOV R7,A
001C E4 CLR A
001D 3E ADDC A,R6
001E FE MOV R6,A
; SOURCE LINE # 48
001F EF MOV A,R7
0020 7805 MOV R0,#05H
0022 ?C0010:
0022 CE XCH A,R6
0023 A2E7 MOV C,ACC.7
0025 13 RRC A
0026 CE XCH A,R6
0027 13 RRC A
0028 D8F8 DJNZ R0,?C0010
002A FF MOV R7,A
; SOURCE LINE # 49
; SOURCE LINE # 50
002B ?C0008:
002B 22 RET
; FUNCTION LM75A_GetTemp (END)
C51 COMPILER V8.16 LM75A 10/04/2008 14:53:01 PAGE 10
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
P2 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A0H 1
P3 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B0H 1
size_t . . . . . . . . . . . . . . . . TYPEDEF ----- U_INT ----- 2
T0Init . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
_I2C_Gets. . . . . . . . . . . . . . . EXTERN CODE PROC ----- -----
TMOD . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0089H 1
TF0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008DH 1
TH0. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 008CH 1
TL0. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 008AH 1
TR0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008CH 1
LM75A_GetTemp. . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
buf. . . . . . . . . . . . . . . . . AUTO DATA ARRAY 0000H 2
t. . . . . . . . . . . . . . . . . . * REG * DATA INT 0006H 2
_Delay . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
t. . . . . . . . . . . . . . . . . . * REG * DATA U_INT 0006H 2
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 76 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 2
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -