📄 temp1.c
字号:
/*****************************************************************************************/
/*****************************************************************************************/
/* 接于SST51单片机89E564RD */
/* SO-P1.6 ; CS-P1.5 ; SCK-P1.7 */
/* MAX6675测四路K型热电偶 */
/* MAX6675测温转换时间一般0.17S,最大0.22S */
/* 用继电器选通各路热电偶 */
/* 通信协议:不发送小数点位,用四舍五入取小数位.共10位温度数据 */
/* 先发送告知是哪段温度,F0为第一段,F1为第二段,F2,F3 */
/* 送温度数据为BCD码,先送高位,后送低位,共送2个字节,连续发两次 */
/* 连续发两次温度数据,最后以FF结束(共发六个字节)波特率9600(11.0592M) */
/* E0,E1,E2,E3为加热信息,00为不加热,11为加热,22为断线标志,连续发两次标志位数据 */
/* 修改平均温度*/
/* 修改FLASH */
/* 2005.6.21 */
/*****************************************************************************************/
#include<stdio.h>
#include <SST89x5x4.H>
#include<intrins.h>
#define time_s (65536 - 57000) /* 定时转换时间为55MSx4=0.20S */
#define max_temp 40 // 设置与实际最大温度 差
#define min_temp 5 // 设置与实际最小温度差
#define max_sec 30 // 最大时间秒钟检测加温
#define min_sec 3 // 最小时间秒钟检测加温
#define typ_temp 15 // 出厂值,原程序的值得
#define typ_sec 5 // 出厂值,原程序的值得
#define address_15c 0x00 // 修改flash 时送的地址
#define address_5s 0x01
#define address_temp 0x02
#define address_minus 0x03
#define uchar unsigned char //
#define uint unsigned int //
sbit SO = P1^6 ; /* 数据输入 */
sbit CS = P1^5 ; /* 从机选择 */
sbit SCK = P1^7 ; /* 时钟输出 */
sbit temp_heat1 = P2^4 ; /* 第一路加温输出,LED灯指示 */
sbit temp_heat2 = P2^3 ;
sbit temp_heat3 = P2^2 ;
sbit temp_heat4 = P2^1 ;
sbit work_led = P2^0 ; /* 程序运行指示灯,大约1S一次 */
sbit HC_A = P3^2 ; /* 第一路热电藕继电器控制口 */
sbit HC_B = P3^3 ; // 等于1闭合
sbit HC_C = P3^4 ;
sbit HC_D = P3^5 ;
bit heat1_open,heat2_open,heat3_open,heat4_open ; /* 热电偶断开标志 */
bit send_flag ; /* 正在发送,接受标志 */
bit little15_flag1,little15_flag2,little15_flag3,little15_flag4 ; /* 相差15度标志 */
bit flash_flag ; // 修改FLASH标志,在收到D2数据时修改
uint road1_tempdat=0,road2_tempdat=0,road3_tempdat=0,road4_tempdat=0 ; /* 四路平均温度存储器 */
uint site_temp1=0,site_temp2=0,site_temp3=0,site_temp4=0 ; /* 设置温度 */
uint new_temp1=0,new_temp2=0,new_temp3=0,new_temp4=0 ; /* 每次读取的瞬间温度 */
uchar temp1_5s=0,road1_time=0,temp2_5s=0,road2_time=0,temp3_5s=0,road3_time=0,temp4_5s=0,road4_time=0; /* 差15度时,5S计数器和每路加热时间 */
uchar read_time=0 ; /* 读温度数据时* */
uchar road_15c=0,road_5s=0,road_t1=0,road_t2=0; // 修改几度开始测温,几秒开始控温
uchar code road_15c_dat _at_ 0xff00 ; /* 存储第一路温度在与设置温度差15时,开始控制加温 */
uchar code road_5s_dat _at_ 0xff01; /* 存储第一路温度以5S一个周期控制温度 */
uchar code road_temp_dat _at_ 0xff02 ; /* 第一路温差 */
uchar code road_temp_minus _at_ 0xff03 ; /* 温差加减为0时,加温,为1时减温 */
/*****************************************************************************************/
/************************** 测温函数定义 ***************************************************/
/*****************************************************************************************/
/************************ 字节编程 ********************************************************/
void UnlockMcu(uchar SFA_L,uchar wirte_dat)
{
SFCF|=0x40 ; //启动IAP
SFAH=0xff ; //高8位地址
SFAL=SFA_L ; //低8位地址
SFDT=wirte_dat ; //数据0x55
SFCM=0x0e ; //写
while(SFST&0x04) ; //等待操作完
}
/************************* FLASH扇区擦除 128字节********************************************************/
void sector_erase(uint SFA)
{
SFCF|=0x40; //启动IAP
SFAH=(uchar)(SFA>>8); //高8位地址
SFAL=(uchar)SFA; //低8位地址
SFCM=0x0b;
while(SFST&0x04); //等待操作完
}
/************************* FLASH写数据 *******************************************************/
void wirte_data(uchar dat_15c,uchar dat_5s,uchar dat_temp,uchar dat_minus)
{
///* 写入相差几度时进行控
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -