松翰单片机 sn8f5702程序例程.docx
- 文档编号:9639225
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:17
- 大小:17.78KB
松翰单片机 sn8f5702程序例程.docx
《松翰单片机 sn8f5702程序例程.docx》由会员分享,可在线阅读,更多相关《松翰单片机 sn8f5702程序例程.docx(17页珍藏版)》请在冰豆网上搜索。
松翰单片机sn8f5702程序例程
#include
#include"SN8F5702.h"
#include
voidInitCPU(void);//单片机初始化
voidRam_init(void);//全局变量赋值
voidTime_Fun(void);//基准走时函数
voidSYSIspStart(unsignedintpageAddress);
//----------------------字节全局变量-------------------------------
u8idataISP_RAM[32];//IRAM0xE0to0xFF
#defineWenDu_UpISP_RAM[1]
#defineWenDu_DownISP_RAM[2]
#defineWenDu_ChaISP_RAM[3]
//u8WenDu_Up;
//u8WenDu_Down;
u8WenDu_HJ;
u8ADC_WenDu_HJ;
u8AD_key;
u8Time_500ms_Cnt;
u8Temp_ChaZhi_ID;//0显示环境温度,1显示差值闪烁
u8SS_500Ms_Cnt;//500ms闪烁标志位
u8IAP_Save_Cnt;//存储标志位
//--------------------位全局变量-----------------------------------
bitTimeFlag;//定时标记
bitBuzz_Flag;//蜂鸣器标志位
bitSS_500Ms_Flag;//500ms闪烁标志位
bitZiDong_ShouDong_Flag;//自动手动标志位
bitShouDong_Out_Flag;//手动输出标志位
bitIAP_Save_Flag;//存储标志位
bitNTC_Error_Flag;//传感器错误
bitNTC_OK_Flag;//传感器错误
u8codeISP_ROM[32]_at_0X0200;
//******************************************************************
#defineADC_GLOBAL
#include"..\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_();
_nop_();
ADM|=_0100_0000b;//开始转换
while(!
(ADM&_0010_0000b));//转换中
_nop_();
_nop_();
ADM&=_1101_1111b;
dat=ADB;
dat<<=4;
dat+=(ADR&0x0f);
_nop_();
_nop_();
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配置--------------------------------------
//----------------------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)
{
u8i;
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];
}
_nop_();
_nop_();
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);
}
_nop_();
_nop_();
}
//*****************************************************************//
//主函数//
//*****************************************************************//
voidmain(void)
{
u8i;
InitCPU();
i=200;
while(i)
{
i--;
_clrwdt();
}
Ram_init();
while
(1)
{
if(TimeFlag)
{
TimeFlag=0;
Time_Fun();//基准时间函数
}
_clrwdt();
_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;
else
BUZZ=0;
//***************************************
}
voidTimer1_ISR(void)interruptISRTimer1//Vector0x1B
{
;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 松翰单片机 sn8f5702程序例程 单片机 sn8f5702 程序 例程