📄 send.lst
字号:
C51 COMPILER V8.02 SEND 08/18/2007 07:17:33 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE SEND
OBJECT MODULE PLACED IN send.OBJ
COMPILER INVOKED BY: D:\SOFTWARE\uv3\C51\BIN\C51.EXE send.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #include <intrins.h>
3 #define uint unsigned int
4 #define uchar unsigned char
5 uchar xstemp;
6
7 sbit DQ =P2^0; //定义通信端口
8 sbit rt=P1^0; //收发选择端口
9 sbit enable=P1^7; //定义模块使能端
10 void delay1(unsigned int i)
11 {
12 1 while(i--);
13 1 }
14
15
16 reset(void)
17 {
18 1 unsigned char x=0;
19 1 DQ = 1; //DQ复位
20 1 delay1(8); //稍做延时
21 1 DQ = 0; //单片机将DQ拉低
22 1 delay1(80); //精确延时 大于 480us
23 1 DQ = 1; //拉高总线
24 1 delay1(14);
25 1 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
26 1 delay1(20);
27 1 }
28
29
30
31 //读一个字节
32 unsigned char read_byte(void)
33 {
34 1 unsigned char i=0;
35 1 unsigned char dat = 0;
36 1 for (i=8;i>0;i--)
37 1 {
38 2 DQ = 0; // 给脉冲信号
39 2 dat>>=1;
40 2 DQ = 1; // 给脉冲信号
41 2 if(DQ)
42 2 dat|=0x80; /*LSB to MSB*/
43 2 delay1(4);
44 2 }
45 1 return(dat);
46 1 }
47
48
49
50 //写一个字节
51 write_byte(unsigned char dat)
52 {
53 1 unsigned char i=0;
54 1 for (i=8; i>0; i--)
55 1 {
C51 COMPILER V8.02 SEND 08/18/2007 07:17:33 PAGE 2
56 2 DQ = 0;
57 2 DQ = dat&0x01;
58 2 delay1(5);
59 2 DQ = 1;
60 2 dat>>=1;
61 2 }
62 1 }
63
64
65
66
67
68 //读取温度
69 unsigned char read_temperature(void)
70 {
71 1 unsigned char a=0;
72 1 unsigned char b=0;
73 1
74 1 reset();
75 1 write_byte(0xCC); // 跳过读序号列号的操作
76 1 write_byte(0x44); // 启动温度转换
77 1 reset();
78 1 write_byte(0xCC); //跳过读序号列号的操作
79 1 write_byte(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
80 1 a=read_byte();
81 1 b=read_byte();
82 1 xstemp=a&0x0f;
83 1 b=b<<4;
84 1 a=a>>4;
85 1
86 1 return(a|b);
87 1 }
88
89 unsigned char read_temperature_dec(void) //读入小数
90 {
91 1 unsigned char a=0;
92 1 reset();
93 1 write_byte(0xCC); // 跳过读序号列号的操作
94 1 write_byte(0x44); // 启动温度转换
95 1 reset();
96 1 write_byte(0xCC); //跳过读序号列号的操作
97 1 write_byte(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
98 1 a=read_byte();
99 1 xstemp=a&0x0f;
100 1 return(xstemp);
101 1 }
102 senddata(unsigned char dat) //串口发送数据
103 {SBUF=dat;
104 1 while(TI==0);
105 1 TI=0;
106 1 }
107
108 serial_init() //串口初始化
109 {
110 1 SCON=0X50; /* SCON: 串口方式1, 8位异步通信,接收使能*/
111 1 TMOD=0x20; /*波特率发生需用定时器1:TMOD: 定时器1, 8位自动重装 */
112 1 PCON=0x80; //双倍时钟
113 1 TH1=0xfd; /* TH1:自动重装值,19200baud ,晶振11.0592MHz */
114 1 TL1=0xfd;
115 1 TR1=1; /* TR1:启动定时器1 */
116 1 //ES=1;
117 1 //EA=1;
C51 COMPILER V8.02 SEND 08/18/2007 07:17:33 PAGE 3
118 1 }
119
120 send_temperature() //发送温度
121 {
122 1 uchar inte,dec;
123 1 inte = read_temperature(); //整数部分温度
124 1 dec = read_temperature_dec(); //小数部分温度
125 1
126 1 senddata(1);
127 1 senddata(dec);
128 1 senddata(0); //发送标志,0表示后面是整数,1表示后面是小数
129 1 senddata(inte);
130 1
131 1 delay1(100);
132 1 }
133 main()
134 {
135 1
136 1 serial_init(); //串口初始化
137 1 enable=0; //使模块工作
138 1 rt=0;
139 1 //发送使能 0发送,1接收
140 1 while(1)
141 1 {
142 2 send_temperature() ; //发送温度
143 2
144 2 }
145 1 }
146
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 250 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
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 + -