松翰单片机 SN8F5702程序例程.docx

上传人:b****6 文档编号:7069138 上传时间:2023-01-16 格式:DOCX 页数:14 大小:17.83KB
下载 相关 举报
松翰单片机 SN8F5702程序例程.docx_第1页
第1页 / 共14页
松翰单片机 SN8F5702程序例程.docx_第2页
第2页 / 共14页
松翰单片机 SN8F5702程序例程.docx_第3页
第3页 / 共14页
松翰单片机 SN8F5702程序例程.docx_第4页
第4页 / 共14页
松翰单片机 SN8F5702程序例程.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

松翰单片机 SN8F5702程序例程.docx

《松翰单片机 SN8F5702程序例程.docx》由会员分享,可在线阅读,更多相关《松翰单片机 SN8F5702程序例程.docx(14页珍藏版)》请在冰豆网上搜索。

松翰单片机 SN8F5702程序例程.docx

松翰单片机SN8F5702程序例程

#include

#include"SN8F5702.h"

#include//for_nop_

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//Vector@0x0B

{

staticu8Time2MS=0;

Time2MS++;

if(Time2MS>=16)//2MS中断函数

{

Time2MS=0;

TimeFlag=1;

}

if(Buzz_Flag)

BUZZ=!

BUZZ;

else

BUZZ=0;

//***************************************

}

voidTimer1_ISR(void)interruptISRTimer1//Vector@0x1B

{

;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1