⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 temp1.c

📁 绝对原创
💻 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 + -