松翰单片机 sn8f5702程序例程Word格式.docx
- 文档编号:22775239
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:17
- 大小:17.78KB
松翰单片机 sn8f5702程序例程Word格式.docx
《松翰单片机 sn8f5702程序例程Word格式.docx》由会员分享,可在线阅读,更多相关《松翰单片机 sn8f5702程序例程Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
//自动手动标志位
bitShouDong_Out_Flag;
//手动输出标志位
bitIAP_Save_Flag;
bitNTC_Error_Flag;
//传感器错误
bitNTC_OK_Flag;
u8codeISP_ROM[32]_at_0X0200;
//******************************************************************
#defineADC_GLOBAL
..\inc\config.h"
/*****************************************************************/
#defineAD_DATA_CNT250
constu16codeTEMP_AD_DATA[AD_DATA_CNT+1]=
{
3138,//0
3100,//1
3061,//2
3022,//3
2982,//4
2941,//5
2899,//6
2857,//7
2815,//8
2771,//9
2728,//10
2684,//11
2639,//12
2595,//13
2550,//14
2504,//15
2459,//16
2413,//17
2367,//18
2321,//19
2276,//20
2230,//21
2184,//22
2139,//23
2093,//24
2048,//25
2003,//26
1959,//27
1914,//28
1870,//29
1827,//30
1784,//31
1741,//32
1699,//33
1658,//34
1617,//35
1577,//36
1537,//37
1498,//38
1459,//39
1421,//40
1384,//41
1348,//42
1312,//43
1277,//44
1243,//45
1209,//46
1176,//47
1144,//48
1112,//49
1082,//50
1052,//51
1022,//52
994,//53
966,//54
938,//55
912,//56
886,//57
861,//58
836,//59
812,//60
789,//61
766,//62
744,//63
723,//64
702,//65
682,//66
662,//67
643,//68
624,//69
606,//70
589,//71
572,//72
555,//73
539,//74
524,//75
509,//76
494,//77
480,//78
466,//79
453,//80
440,//81
427,//82
415,//83
403,//84
392,//85
381,//86
370,//87
360,//88
349,//89
340,//90
330,//91
321,//92
312,//93
303,//94
295,//95
287,//96
279,//97
271,//98
264,//99
};
voidAD_fun(void)//
{
staticu8AD_Sum_Cnt=0,AD_ID=0;
staticu16AD_Sum=0;
staticu8Temp_Change_Cnt=0;
u8i;
AD_Sum+=Get_ADC(AD_ID);
AD_Sum_Cnt++;
if(AD_Sum_Cnt>
=8)
{
AD_Sum_Cnt=0;
AD_Sum>
>
=3;
if
(1)
{
if(!
AD_ID)
{
if(AD_Sum<
40||AD_Sum>
4050)
{
NTC_Error_Flag=1;
}
else
NTC_Error_Flag=0;
}
AD_ID=1;
}
}
AD_Sum=0;
}
}
u16Get_ADC(ucharn)
u16dat;
//
dat=0;
if(!
n)
ADM=_1000_0000b;
//AIN0通道
elseif(n==1)
ADM=_1000_0110b;
//AIN6通道
elseif(n==2)
ADM=_1000_0111b;
//AIN7通道
elseif(n==3)
ADM=_1000_1000b;
//AIN8通道
_nop_();
ADM|=_0100_0000b;
//开始转换
while(!
(ADM&
_0010_0000b));
//转换中
ADM&
=_1101_1111b;
dat=ADB;
dat<
<
=4;
dat+=(ADR&
0x0f);
returndat;
}
voidSYSIspStart(unsignedintpageAddress)
ISP(pageAddress,ISP_RAM);
/***************************************************************
硬件初始化函数:
硬件初始化输入输出定时器开关AD初始化
****************************************************************/
voidInitCPU(void)//单片机初始化
EAL=0;
//关总中断
CLKSEL=_0000_0101b;
//内部32MRCFhosc/4分频
CLKCMD=0x69;
//时钟开关启动
CKCON=_0011_0001b;
//------------------------------I/O口输出--------------------------
//---------------P0---------------
P0M=_1111_1111b;
//P07=BUZZP06=COM6P05=COM5P04=COM4
P0UR=_0000_0000b;
//P03=COM3P02=COM2P01=COM1P00=LED1
P0=_0000_0000b;
//---------------P1---------------
//P1W=_0000_1000b;
P1M=_0011_1110b;
//P17=ADC7P16=ADC6P15=LED2P14=?
P1UR=_0000_0000b;
//P13=?
P12=?
P11=?
P10=ADC0_温度
P1=_0000_0000b;
//---------------P2---------------
P2M=_1111_1101b;
//P27=?
P26=?
P25=?
P24=?
P2UR=_0000_0000b;
//P23=?
P22=?
P21=ADC6P20=REY_OUT
P2=_0000_0000b;
//------------------------------INT--------------------------------
//PEDGE|=0x03;
//EX0G电平变换触发,双沿
//EX0=1;
//INT0isrenable
//PEDGE|=0x04;
//EX1G=0x01:
INT1Risingedgetrigger
//EX1=1;
//INT1isrenable
//PEDGE|=0x30;
//EX1G=0x11:
Bothrisingandfallingedgetrigger(Levelchangetrigger).
//IEN4|=0x40;
//INT2isrenable(EX2)
//====================PWM1设置======================
//PW1M=_1010_0000b;
//PW1CH=_0001_0000b;
//PW1YH=0;
//PW1YL=26;
//PW1DH=0;
//PW1DL=7;
//PW1A=5;
//PW1B=PW1D;
//------------------------------T0--------------------------------
TMOD=_0110_0110b;
//T0T18位自动装载
TH0=131;
//Initialvalues
TL0=131;
TCON0=_0010_0011b;
//T0=Fhsoc/32.T1=Fhsoc/16
ET0=1;
//Timer0isrenable
TR0=1;
//enableTimer0Runcontrol
//------------------------------T1--------------------------------
TH1=6;
//Initialvalues
TL1=6;
ET1=0;
//Timer1isrenable
TR1=0;
//enableTimer1Runcontrol
IP0=_0000_1000b;
IP1=_0000_1000b;
//----------------------AD配置--------------------------------------
ADM=_1000_0000b;
//AIN3通道
ADR=_0101_0000b;
//[ADR.5ADR.4]00=Fhosc/16,01=Fhosc/8,10=Fhosc/1,11=Fhosc/2
VREFH=_0000_0011b;
//参考电压VDD
P1CON=_1100_0001b;
P2CON=_0000_0010b;
//------------------------------------------------------------------
EAL=1;
//开总中断
voidRam_init(void)
NTC_OK_Flag=0;
//NTC测温OK后才继电器开始工作
WenDu_Up=30;
WenDu_Down=20;
WenDu_HJ=25;
Temp_ChaZhi_ID=0;
//0显示环境温度,1显示差值闪烁
_clrwdt();
for(i=0;
i<
20;
i++)
ISP_RAM[i]=ISP_ROM[i];
if(ISP_RAM[0]==0x55)
if(WenDu_Up>
99||WenDu_Down>
99||WenDu_Cha>
18)
ISP_RAM[0]=0x55;
ISP_RAM[1]=30;
ISP_RAM[2]=20;
ISP_RAM[3]=9;
_clrwdt();
SYSIspStart(0X0200);
else
ISP_RAM[0]=0x55;
ISP_RAM[1]=30;
ISP_RAM[2]=20;
ISP_RAM[3]=9;
_clrwdt();
SYSIspStart(0X0200);
}
//*****************************************************************//
//主函数//
voidmain(void)
InitCPU();
i=200;
while(i)
i--;
Ram_init();
while
(1)
if(TimeFlag)
TimeFlag=0;
Time_Fun();
//基准时间函数
_nop_();
//时间走时函数//
voidWork_Fun(void)
voidTime_Fun(void)
staticu8Time_4ms_Cnt=0,Time_10ms_Cnt=0,Time_100ms_Cnt=0,Time_250ms_Cnt=0;
staticu8Buzz_Cnt=0;
//***************充放电判断*********************
LedDisplay();
Time_4ms_Cnt++;
if(Time_4ms_Cnt>
=2)
Time_4ms_Cnt=0;
AD_fun();
Time_10ms_Cnt++;
if(Time_10ms_Cnt>
=5)
Time_10ms_Cnt=0;
KeyDataProcess();
Time_100ms_Cnt++;
if(Time_100ms_Cnt>
=50)
Work_Fun();
Time_100ms_Cnt=0;
//中断函数//
voidTimer0_ISR(void)interruptISRTimer0//Vector0x0B
staticu8Time2MS=0;
Time2MS++;
if(Time2MS>
=16)//2MS中断函数
Time2MS=0;
TimeFlag=1;
if(Buzz_Flag)
BUZZ=!
BUZZ;
BUZZ=0;
//***************************************
voidTimer1_ISR(void)interruptISRTimer1//Vector0x1B
;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 松翰单片机 sn8f5702程序例程 单片机 sn8f5702 程序 例程