ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:17.78KB ,
资源ID:9639225      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9639225.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(松翰单片机 sn8f5702程序例程.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、松翰单片机 sn8f5702程序例程 #include #include SN8F5702.h#include / for _nop_ void InitCPU(void); /单片机初始化 void Ram_init(void); /全局变量赋值 void Time_Fun(void); /基准走时函数 void SYSIspStart(unsigned int pageAddress);/-字节全局变量- u8 idata ISP_RAM32 ; / IRAM 0xE0 to 0xFF#define WenDu_Up ISP_RAM1#define WenDu_Down ISP_RAM2#

2、define WenDu_Cha ISP_RAM3/ 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_Shou

3、Dong_Flag;/自动手动标志位 bit ShouDong_Out_Flag;/手动输出标志位 bit IAP_Save_Flag;/存储标志位 bit NTC_Error_Flag;/传感器错误 bit NTC_OK_Flag;/传感器错误u8 code ISP_ROM32 _at_ 0X0200;/*#define ADC_GLOBAL#include .incconfig.h/*/#define AD_DATA_CNT 250const u16 code TEMP_AD_DATAAD_DATA_CNT+1= 3138 , / 0 3100 , / 1 3061 , / 2 3022

4、, / 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

5、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 9

6、66 , / 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

7、, / 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 ; void AD_fun(void) / static u8 AD_Sum_Cnt = 0,AD_ID=0; static u16 AD_Sum = 0; static u8 Temp_C

8、hange_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_Sum4050) 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 = _10

9、00_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(unsi

10、gned 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=COM4 P0UR = _0000_0000b; /P0

11、3=COM3 P02=COM2 P01=COM1 P00=LED1 P0 = _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_OUT P

12、2 = _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 (EX

13、2)/=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 values TL0 = 131; TCON0 = _0010_0011b; / T0 = Fhsoc/32. T1 = Fhsoc/16 ET0 = 1; / Timer 0 isr enable TR0 = 1;

14、/ enable Timer 0 Run control/-T1- TH1 = 6; / Initial values TL1 = 6; ET1 = 0; / Timer 1 isr enable TR1 = 0; / enable Timer 1 Run control IP0 = _0000_1000b; IP1 = _0000_1000b;/-AD配置- /-AD配置- ADM = _1000_0000b; /AIN3通道 ADR = _0101_0000b;/ ADR.5 ADR.400 = Fhosc/16, 01 = Fhosc/8, 10 = Fhosc/1, 11 = Fhos

15、c/2 VREFH = _0000_0011b; /参考电压VDD P1CON = _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;i99|WenDu_Down99|WenDu_Cha18) ISP_RAM0=0x55; ISP_RAM1=30

16、; ISP_RAM2=20; ISP_RAM3=9; _clrwdt(); SYSIspStart(0X0200); else ISP_RAM0=0x55; ISP_RAM1=30; ISP_RAM2=20; ISP_RAM3=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();

17、 /基准时间函数 _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

18、+; 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; else BUZZ=0;/* void Timer1_ISR(void) interrupt ISRTimer1 / Vector 0x1B ;

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

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