// for _nop_ void InitCPU(void); //单片机初始化 void Ram_in" />
当前位置:文档之家› 松翰单片机 SN8F5702程序例程

松翰单片机 SN8F5702程序例程

#include <stdio.h>#include "SN8F5702.h"#include <intrins.h> // for _nop_void InitCPU(void); //单片机初始化void Ram_init(void); //全局变量赋值void Time_Fun(void); //基准走时函数void SYSIspStart(unsigned int pageAddress);//----------------------字节全局变量-------------------------------u8 idata ISP_RAM[32] ; // IRAM 0xE0 to 0xFF#define WenDu_Up ISP_RAM[1]#define WenDu_Down ISP_RAM[2]#define WenDu_Cha ISP_RAM[3]// u8 WenDu_Up;// u8 WenDu_Down;u8 WenDu_HJ;u8 ADC_WenDu_HJ;u8 AD_key;u8 Time_500ms_Cnt;u8 Temp_ChaZhi_ID;//0显示环境温度,1显示差值闪烁u8 SS_500Ms_Cnt;//500ms闪烁标志位u8 IAP_Save_Cnt;//存储标志位//--------------------位全局变量-----------------------------------bit TimeFlag ;//定时标记bit Buzz_Flag ;//蜂鸣器标志位bit SS_500Ms_Flag ;//500ms闪烁标志位bit ZiDong_ShouDong_Flag;//自动手动标志位bit ShouDong_Out_Flag;//手动输出标志位bit IAP_Save_Flag;//存储标志位bit NTC_Error_Flag;//传感器错误bit NTC_OK_Flag;//传感器错误u8 code ISP_ROM[32] _at_ 0X0200;//****************************************************************** #define ADC_GLOBAL#include "..\inc\config.h"/*****************************************************************/ #define AD_DATA_CNT 250const u16 code TEMP_AD_DATA[AD_DATA_CNT+1]={3138 , // 03100 , // 13061 , // 22982 , // 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 , // 461144 , // 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 , // 90330 , // 91321 , // 92312 , // 93303 , // 94295 , // 95287 , // 96279 , // 97271 , // 98264 , // 99};void AD_fun(void) //{static u8 AD_Sum_Cnt = 0,AD_ID=0;static u16 AD_Sum = 0;static u8 Temp_Change_Cnt=0;u8 i;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;}}u16 Get_ADC( uchar n){u16 dat;//dat = 0;if(!n){ADM = _1000_0000b;//AIN0通道}else if(n==1){ADM = _1000_0110b;//AIN6通道}else if(n==2){ADM = _1000_0111b;//AIN7通道}else if(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_();return dat;}void SYSIspStart(unsigned int pageAddress){ISP(pageAddress, ISP_RAM);}/***************************************************************硬件初始化函数: 硬件初始化输入输出定时器开关AD初始化****************************************************************/void InitCPU(void) //单片机初始化{EAL=0; //关总中断CLKSEL = _0000_0101b;//内部32MRC Fhosc/4 分频CLKCMD = 0x69;//时钟开关启动CKCON = _0011_0001b;//------------------------------I/O口输出--------------------------//---------------P0---------------P0M=_1111_1111b; //P07=BUZZ P06=COM6 P05=COM5 P04=COM4P0UR = _0000_0000b; //P03=COM3 P02=COM2 P01=COM1 P00=LED1P0 = _0000_0000b;//---------------P1---------------// P1W = _0000_1000b;P1M=_0011_1110b; //P17=ADC7 P16=ADC6 P15=LED2 P14=?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=ADC6 P20=REY_OUTP2 = _0000_0000b;//------------------------------INT--------------------------------// PEDGE |= 0x03; // EX0G 电平变换触发,双沿// EX0 = 1; // INT0 isr enable// PEDGE |= 0x04; // EX1G = 0x01 : INT1 Rising edge trigger// EX1 = 1; // INT1 isr enable//// PEDGE |= 0x30; // EX1G = 0x11 : Both rising and falling edge trigger (Level change trigger).// IEN4 |= 0x40; // INT2 isr enable (EX2)//====================PWM1设置======================// PW1M = _1010_0000b;// PW1CH = _0001_0000b;// PW1YH = 0;// PW1YL = 26;// PW1DH = 0;// PW1DL = 7;// PW1A = 5;// PW1B = PW1D;//------------------------------T0--------------------------------TMOD = _0110_0110b; // T0 T1 8位自动装载TH0 = 131; // Initial valuesTL0 = 131;TCON0 = _0010_0011b; // T0 = Fhsoc/32. T1 = Fhsoc/16ET0 = 1; // Timer 0 isr enableTR0 = 1; // enable Timer 0 Run control//------------------------------T1--------------------------------TH1 = 6; // Initial valuesTL1 = 6;ET1 = 0; // Timer 1 isr enableTR1 = 0; // enable Timer 1 Run controlIP0 = _0000_1000b;IP1 = _0000_1000b;//----------------------AD配置--------------------------------------//----------------------AD配置--------------------------------------ADM = _1000_0000b; //AIN3通道ADR = _0101_0000b;// [ADR.5 ADR.4]00 = Fhosc/16, 01 = Fhosc/8, 10 = Fhosc/1, 11 = Fhosc/2VREFH = _0000_0011b; //参考电压VDDP1CON = _1100_0001b;P2CON = _0000_0010b;//------------------------------------------------------------------EAL=1; //开总中断}void Ram_init(void){u8 i;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_();}//*****************************************************************// // 主函数////*****************************************************************// void main(void){u8 i;InitCPU();i=200;while(i){i --;_clrwdt();Ram_init();while(1){if(TimeFlag){TimeFlag=0;Time_Fun(); //基准时间函数}_clrwdt();_nop_();}}//*****************************************************************//// 时间走时函数////*****************************************************************//void Work_Fun(void){}//*****************************************************************//// 时间走时函数////*****************************************************************//void Time_Fun(void){static u8 Time_4ms_Cnt = 0,Time_10ms_Cnt = 0,Time_100ms_Cnt = 0,Time_250ms_Cnt = 0;static u8 Buzz_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;}}//*****************************************************************// // 中断函数// //*****************************************************************// void Timer0_ISR(void) interrupt ISRTimer0 // Vector @ 0x0B{static u8 Time2MS = 0;Time2MS ++;if(Time2MS >= 16) //2MS中断函数{Time2MS = 0;TimeFlag = 1;}if(Buzz_Flag)BUZZ=!BUZZ;elseBUZZ=0;//***************************************}void Timer1_ISR(void) interrupt ISRTimer1 // Vector @ 0x1B{;}。

相关主题