main.lst
来自「stc15单片机测试程序V1.0版」· LST 代码 · 共 168 行
LST
168 行
C51 COMPILER V9.01 MAIN 07/28/2012 10:08:43 PAGE 1
C51 COMPILER V9.01, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /***********************************************************
2 实验名称:18B20
3 程序说明:本程序测试了18B20
4 实验平台:stc15单片机开发板v1.0版
5 日期:2012-05-27
6 QQ: 259902530
7 www.stcstudy.com 61mcu.taobao.com 版权所有
8 ***********************************************************/
9 //18B20单线温度检测的应用样例程序, 输出结果用串口传输到上位机显示,可采用STC下载软件自带串口调试助力观察
10 #include "STC15F2K.h"
11 #include "UART.H"
12 #include <intrins.H>
13 #include<math.h>
14
15
16
17 sbit DQ=P1^2; //ds18b20 端口
18
19 uchar tab[]="0123456789";
20
21 void Delay1(uint x);
22 unsigned char ReadTemperature(void);
23 void Init_DS18B20(void);
24 unsigned char ReadOneChar(void);
25 void WriteOneChar(unsigned char dat);
26 void delay(unsigned int i);
27 /************************************************************************/
28 main()
29 {
30 1 uchar temp;
31 1 uchar a,b;
32 1 InitUART();
33 1 P2=0x01;
34 1 while(1)
35 1 {
36 2 temp=ReadTemperature()-1;
37 2 a=tab[temp/10]; //十位温度
38 2 b=tab[temp%10]; //个位温度
39 2 SendString("Now is : ");
40 2 SendData(a);
41 2 SendData(b);
42 2 SendString("\r\n\r\n");
43 2 Delay1(500);
44 2 }
45 1 }
46
47
48 void Delay1(uint x) //@11.0592MHz x ms
49 {
50 1 unsigned char i, j;
51 1 while(x--)
52 1 {
53 2 _nop_();
54 2 _nop_();
55 2 _nop_();
C51 COMPILER V9.01 MAIN 07/28/2012 10:08:43 PAGE 2
56 2 i = 11;
57 2 j = 190;
58 2 do
59 2 {
60 3 while (--j);
61 3 }
62 2 while (--i);
63 2 }
64 1 }
65
66 void delay(unsigned int i)//延时函数
67 {
68 1 while(i--);
69 1 }
70 /***************************************************************************************/
71 //18b20初始化函数
72 void Init_DS18B20(void)
73 {
74 1 unsigned char x=0;
75 1 DQ = 1; //DQ复位
76 1 delay(80); //稍做延时
77 1 DQ = 0; //单片机将DQ拉低
78 1 delay(800); //精确延时 大于 480us
79 1 DQ = 1; //拉高总线
80 1 delay(100);
81 1 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
82 1 delay(50);
83 1 }
84
85 //读一个字节
86 unsigned char ReadOneChar(void)
87 {
88 1 unsigned char i=0;
89 1 unsigned char dat = 0;
90 1 for (i=8;i>0;i--)
91 1 {
92 2 DQ = 0; // 给脉冲信号
93 2 dat>>=1;
94 2 DQ = 1; // 给脉冲信号
95 2 if(DQ)
96 2 dat|=0x80;
97 2 delay(50);
98 2 }
99 1 return(dat);
100 1 }
101
102 //写一个字节
103 void WriteOneChar(unsigned char dat)
104 {
105 1 unsigned char i=0;
106 1 for (i=8; i>0; i--)
107 1 {
108 2 DQ = 0;
109 2 DQ = dat&0x01;
110 2 delay(50);
111 2 DQ = 1;
112 2 dat>>=1;
113 2 }
114 1 delay(50);
115 1 }
116
117 //读取温度
C51 COMPILER V9.01 MAIN 07/28/2012 10:08:43 PAGE 3
118 unsigned char ReadTemperature(void)
119 {
120 1 unsigned char a=0;
121 1 unsigned char b=0;
122 1 unsigned char t=0;
123 1 //float tt=0;
124 1 Init_DS18B20();
125 1 WriteOneChar(0xCC); // 跳过读序号列号的操作
126 1 WriteOneChar(0x44); // 启动温度转换
127 1 delay(2000);
128 1 Init_DS18B20();
129 1 WriteOneChar(0xCC); //跳过读序号列号的操作
130 1 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
131 1 a=ReadOneChar();
132 1 b=ReadOneChar();
133 1
134 1 b<<=4;
135 1 b+=(a&0xf0)>>4;
136 1 t=b;
137 1 //tt=t*0.0625;
138 1 //t= tt*10+0.5; //放大10倍输出并四舍五入
139 1 return(t);
140 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 270 ----
CONSTANT SIZE = 15 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 3
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?