📄 temp_1.lst
字号:
C51 COMPILER V7.07 TEMP_1 06/15/2005 10:44:55 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE TEMP_1
OBJECT MODULE PLACED IN TEMP_1.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE TEMP_1.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*****************************************************************************************/
2 /*****************************************************************************************/
3 /* 接于SST51单片机89E564RD */
4 /* SO-P1.6 ; CS-P1.5 ; SCK-P1.7 */
5 /* MAX6675测四路K型热电偶 */
6 /* MAX6675测温转换时间一般0.17S,最大0.22S */
7 /* 用继电器选通各路热电偶 */
8 /* 通信协议:不发送小数点位,用四舍五入取小数位.共10位温度数据 */
9 /* 先发送告知是哪段温度,F0为第一段,F1为第二段,F2,F3 */
10 /* 送温度数据为BCD码,先送高位,后送低位,共送2个字节,连续发两次 */
11 /* 连续发两次温度数据,最后以FF结束(共发六个字节)波特率9600(11.0592M) */
12 /* E0,E1,E2,E3为加热信息,00为不加热,11为加热,22为断线标志,连续发两次标志位数据 */
13 /* 修改平均温度*/
14 /* 2005.6.14 */
15
16 /*****************************************************************************************/
17
18 #include<stdio.h>
19 #include <SST89x5x4.H>
20 #include<intrins.h>
21
22 #define time_s (65536 - 57000) /* 定时转换时间为55MSx4=0.20S */
23 #define address_15c 0x00
24 #define address_5s 0x01
25 #define address_temp 0x02
26 #define uchar unsigned char //
27 #define uint unsigned int //
28
29 sbit SO = P1^6 ; /* 数据输入 */
30 sbit CS = P1^5 ; /* 从机选择 */
31 sbit SCK = P1^7 ; /* 时钟输出 */
32
33 sbit temp_heat1 = P2^4 ; /* 第一路加温输出,LED灯指示 */
34 sbit temp_heat2 = P2^3 ;
35 sbit temp_heat3 = P2^2 ;
36 sbit temp_heat4 = P2^1 ;
37
38 sbit work_led = P2^0 ; /* 程序运行指示灯,大约1S一次 */
39
40 sbit HC_A = P3^2 ; /* 第一路热电藕继电器控制口 */
41 sbit HC_B = P3^3 ;
42 sbit HC_C = P3^4 ;
43 sbit HC_D = P3^5 ;
44
45 bit heat1_open,heat2_open,heat3_open,heat4_open ; /* 热电偶断开标志 */
46 bit send_flag ; /* 正在发送,接受标志 */
47 bit little15_flag1,little15_flag2,little15_flag3,little15_flag4 ; /* 相差15度标志 */
48
49 uint xdata road1_tempdat=0,road2_tempdat=0,road3_tempdat=0,road4_tempdat=0 ; /* 四路平均温度存储器 *
-/
50 uint xdata site_temp1=0,site_temp2=0,site_temp3=0,site_temp4=0 ; /* 设置温度 */
51 uint xdata new_temp1=0,new_temp2=0,new_temp3=0,new_temp4=0 ; /* 每次读取的瞬间温度 *
-/
52
53 uchar xdata temp1_5s=0,road1_time=0,temp2_5s=0,road2_time=0,temp3_5s=0,road3_time=0,temp4_5s=0,road4_
C51 COMPILER V7.07 TEMP_1 06/15/2005 10:44:55 PAGE 2
-time=0; /* 差15度时,5S计数器和每路加热时间 */
54
55 uchar xdata read_time=0 ; /* 读温度数据时* */
56
57 uchar code road_15c_dat _at_ 0xff00 ; /* 存储第一路温度在与设置温度差15时,开始控制加温 */
58 uchar code road_5s_dat _at_ 0xff01; /* 存储第一路温度以5S一个周期控制温度 */
59 uchar code road_temp_dat _at_ 0xff02 ; /* 第一路温差 */
60 uchar code road_temp_minus _at_ 0xff03 ; /* 温差加减 */
61
62
63
64
65 /*****************************************************************************************/
66 /************************** 测温函数定义 ***************************************************/
67 /*****************************************************************************************/
68
69 /************************ 字节编程 ********************************************************/
70 void UnlockMcu(uint SFA,uchar wirte_data)
71 {
72 1 SFCF|=0x40 ; //启动IAP
73 1 SFAH=(uchar)(SFA>>8) ; //高8位地址
74 1 SFAL=(uchar)SFA ; //低8位地址
75 1 SFDT=wirte_data ; //数据0x55
76 1 SFCM=0x0e ; //写
77 1 while(SFST&0x04) ; //等待操作完
78 1 }
79
80 /************************* 扇区擦除 ********************************************************/
81 void sector_erase(uint SFA)
82 {
83 1 SFCF|=0x40; //启动IAP
84 1 SFAH=(uchar)(SFA>>8); //高8位地址
85 1 SFAL=(uchar)SFA; //低8位地址
86 1 SFCM=0x0b;
87 1 while(SFST&0x04); //等待操作完
88 1 }
89
90 /************************ 载入中断0初值 **************************************************/
91 void initial_value_0()
92 {
93 1 TH0 = (time_s/256) ; /* 载入H初值 */
94 1 TL0 = (time_s%256) ; /* 载入L初值 */
95 1 }
96
97 /********************** 5S计时 ***********************************************************/
98 uchar time5s(bit little15_flag,uchar time_5s)
99 {
100 1 if(little15_flag == 1) /* 进入差值在15度内 */
101 1 time_5s++ ; /* 控温15度5s累加 */
102 1 else
103 1 time_5s = 0 ;
104 1 return(time_5s) ;
105 1 }
106
107 /********************* 加热时间秒计数器 **************************************************/
108 uchar heat_time_s(uchar road_second,uchar road_time)
109 {
110 1 if(road_time > 0)
111 1 road_second++ ;
112 1 else
113 1 road_second = 0 ;
114 1 return(road_second) ;
C51 COMPILER V7.07 TEMP_1 06/15/2005 10:44:55 PAGE 3
115 1 }
116
117 /********************** 到1S时减加热时间 *************************************************/
118 uchar heat_time(uchar road_second,uchar road_time)
119 {
120 1 if(road_time > 0)
121 1 {
122 2 if(road_second >= 20) /* ROAD_SECOND 秒计时器 */
123 2 road_time-- ;
124 2 }
125 1
126 1 return(road_time) ;
127 1 }
128
129 /*********************** 加温时间1s时间到 ********************************************************/
130 uchar heat_time_ss(uchar road_second)
131 {
132 1 if(road_second >= 20 )
133 1 road_second = 0 ;
134 1 return(road_second) ;
135 1 }
136
137 /********************** 在差15度(根据是否有加热时间)判断是否加热 *************************/
138 bit temp_little15(uchar road_time,bit heat_open)
139 {
140 1 bit temp_heat ;
141 1
142 1 if((road_time > 0)&&(heat_open == 0))
143 1 temp_heat = 0 ; /* j加热 */
144 1 else
145 1 temp_heat = 1 ;
146 1 return(temp_heat) ;
147 1 }
148
149 /*************************** 发送温度数据子程序 ******************************************/
150 void send_temp(uint temp_data,uchar road_data) /* temp_data为温度数据,road_data为路数数据 */
151 {
152 1 uchar a,send_dat ;
153 1
154 1 SBUF = road_data ; /* 先发送段数据F0,F1,F2,F3 */
155 1 while(send_flag == 0) ; /* 等待发送完毕,在串行中断里置位 */
156 1 send_flag = 0 ; /* 发送标志位 */
157 1
158 1 for(a = 0;a < 2;a++) /* 连续发送两次温度数据 */
159 1 {
160 2 send_dat = ((temp_data/1000)%10) ; /* 取温度千位数 */
161 2 send_dat <<= 4 ; /* 放在高位 */
162 2 send_dat = (send_dat |((temp_data/100)%10)&0x0f) ; /* 取温度千位和百位数 */
163 2 SBUF = send_dat ; /* 发送数据 */
164 2 while(send_flag == 0) ;
165 2 send_flag = 0 ;
166 2
167 2 send_dat = ((temp_data/10)%10) ; /* 取温度十位数 */
168 2 send_dat <<= 4 ;
169 2 send_dat = (send_dat |((temp_data%10)&0x0f)) ; /* 取温度十位数和个位数 */
170 2 SBUF = send_dat ;
171 2 while(send_flag == 0) ;
172 2 send_flag = 0 ;
173 2 }
174 1 /* 发送结束标志位 */
175 1 SBUF = 0xff ;
176 1 while(send_flag == 0) ;
C51 COMPILER V7.07 TEMP_1 06/15/2005 10:44:55 PAGE 4
177 1 send_flag = 0 ;
178 1 }
179
180 /**************************** 发送控温数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -