松翰单片机 SN8F5702程序例程

合集下载

SN 8 位单片机 M2IDEV137 简体中文汇编程序

SN 8 位单片机 M2IDEV137 简体中文汇编程序

SONiX 8 位单片机 M2IDE_V137 简体中文汇编主程序这里提供一份 SC_M2Asm137.exe 简体中文汉化文件,可以解压缩后覆盖原来安装目录下的同名文件,成为简体中文界面.(记得部分原英文文件,同时把本文件前面的"SC_"去掉.)汉化主要针对大部分 8 位单片机的菜单,对话框等. 语音芯片部分没有进行汉化.喜欢使用中文界面的朋友可下载: SC_M2Asm137.rarSONiX 8 位单片机开发工具说明:SONiX IDE M2IDE_V137 <M2IDE_V137.exe>SONiX IDE for SN8ICE 2K, SN8ICE 2K Plus, SN8ICE 2K PlusII, 嵌入式 ICE编译与调试 M2Asm137 <M2Asm137.exe>编译与调试为 SN8P2XXX, SN8FXXXX 家族<A> 支持芯片型号:支持最新型号 :完全支持下列芯片的全部功能的仿真调试:SN8P2501A, SN8P2602A, SN8P2604, SN8P2606, SN8P2608, SN8P270XA, SN8P2711, SN8P2714,SN8P27142, SN8P27143, SN8P2715, SN8P2308, SN8P26042, SN8P2612, SN8P2613, SN8P2624,SN8P2603A, SN8P2611, SN8P2622, SN8P2501B, SN8P2602B, SN8PC13, SN8P2201, SN8P2202,SN8P2203, SN8P2204, SN8A2617, SN8P2604A, SN8P2614, SN8P2808, SN8P2212, SN8P2213,SN8P22121, SN8P26L32, SN8P26L321, SN8P26L34, SN8P2722, SN8P2807, SN8P2234, SN8P2236,SN8P2238, SN8P2711A, SN8P26L38, SN8PC20, SN8P26042A, SN8P22021, SN8P26L31, SN8P2522,SN8P2732, SN8P2733, SN8P2734, SN8P2735, SN8P2754, SN8P2755, SN8P2758, SN8F2251,SN8F2253, SN8F2255, SN8F22511, SN8F22521, SN8F22531, SN8F2251B, SN8F2253B, SN8F2255B,SN8F22511B, SN8F22521B, SN8F22531B, SN8F22721, SN8F2271, SN8F2277, SN8F22711, SN8F2271B,SN8F2277B, SN8F22711B, SN8F22721B, SN8F2288, SN8P2267, SN8PC21, SN8P2233, SN8P2242,SN8P22421, SN8P2521, SN8P26L37, SN8P2708B, SN8F27E62, SN8F27E62L, SN8F27E64, SN8F27E64L,SN8F27E65, SN8F27E65L, SN8P2742, SN8P2743, SN8P2318, SN8P2501B1, SN8P2501C, SN8P2602C,SN8P2712, SN8P2523, SN8P2241, SN8P2317, SN8P2602C1, SN8P2711A1, SN8F27E93, SN8F27E93L,SN8F27E94, SN8F27E94L, SN8P25231, SN8PC22, SN8F26E61, SN8F26E61L, SN8F27E61, SN8F27E61L,SN8F26E611, SN8F26E611L,SN8F27E611, SN8F27E611L,SN8P2267B, SN8P2839, SN8P2947, SN8PC2014,SN8PC2016, SN8P2704B, SN8P2524, SN8P27411, SN8P2267C, SZK671, SN8P2949, SN8P2711A2,SN8P27122, SN8P2511, SN8FMD24, SN8FMD24L, SN8FMD25, SN8FMD25L, SN8F26E64, SN8F26E64L,SN8F26E65, SN8F26E65L, SN8F25E24, SN8F25E24L, SN8F25E25, SN8F25E25L, SN8FMD21, SN8FMD21L,SN8FMD22, SN8FMD22L, SN8FMD23, SN8FMD23L, SN8P2711B提示:a. M2IDE V1.00 或更新版本仅仅支持 SN8ICE_2K.b. SN8IDE V1.99L ~ V1.99Z 仅仅支持 SN8ICE_1K(又叫 S8KD-2 ICE).c. 不再支持烧写器 V3.0 软件.SN8P2711 提示:a. 当设置 EVHENB=1, P4.0 在仿真时仍然是 ADC 输入功能, 但是实际芯片是外部参考电压输入.b. P0.0 当在 TC0 事件计数器输入模式时具有唤醒功能, 但在实际芯片时不是.c. P0.1 当在 TC1 事件计数器输入模式时具有唤醒功能, 但在实际芯片时不是.d. TC0 事件计数器在绿色模式没有唤醒功能,但在实际芯片时有唤醒功能.。

松翰单片机SONIXSN8P2511程序模板

松翰单片机SONIXSN8P2511程序模板

松翰单片机SONIXSN8P2511程序模板#define MAIN_GLOBAL#include "..\inc\config.h"#include "..\inc\SN8P2501B.h"//************************************************************* ***//// 主函数 //// 功能: 调用各个主函数 ////************************************************************* ***//void main(void){InitCPU();Ram_init();while(1){if(TimeFlag){TEST = !TEST;TimeFlag=0;Time_Fun();}_clrwdt();}}//************************************************************* ***//// 继电器输出 //// 功能: 工作输出 ////************************************************************* ***//void Work_Fun(void){;}//************************************************************* ***//// 硬件初始化 //// 功能: 硬件初始化输入输出定时器开关 AD初始化 ////************************************************************* ***//void InitCPU(void) //单片机初始化{FGIE=0; //关总中断//------------------------------I/O口输出--------------------------//---------------P0---------------FP00M=0;//// FP01M=1;//// FP02M = 0;// FP03M = 0;// FP04M=0;//P0UR = _0000_0001b;//---------------P1---------------FP10M=0;//// FP11M=0;//FP12M=1;// 输出FP13M=0;// 按键// FP14M=1;//// FP16M=1;//// FP15M=1;//// FP17M=1;//P1UR = _0000_1001b;//---------------P2---------------FP20M=0;//FP21M=0;//FP22M=0;//FP23M=0;//FP24M=0;//FP25M=0;//// FP26M=0;//// FP27M=1;//P2UR = _0011_1111b;//---------------P5---------------// FP50M=1;//// FP51M=1;//// FP52M=1;//// FP53M=0;//FP54M=1;//// P5UR = _0000_0000b;//------------------------------T0--------------------------------FT0ENB = 0;FT0IEN = 0;FT0IRQ = 0;T0M = 0X60;//时钟为FCPU/4T0C=7; //T0 间隔250uSFT0ENB = 1;FT0IEN = 1;FGIE=1; //开总中断}//************************************************************* ***//// 变量初始化函数 //// 功能: 对程序中的变量进行赋初值 ////************************************************************* ***//void Ram_init(void){_nop();_nop();Move_Key = 0x70;// Open_FLAG = 1;}//************************************************************* ***//// 走时函数 //// 功能: 对程序中计时功能进行计数和赋值 ////************************************************************* ***//void Time_Fun(void){static uchar Time_5ms_Cnt = 0,Time_10ms_Cnt =0,Time_200ms_Cnt = 0,Time_1S_Cnt = 0;static uchar Leave_Out_ID = 0,Leave_Out_Time_Cnt = 0,YiWei_ID = 0,Leave_Out_Cnt = 5;static uchar Move_IN_Cnt = 0;uchar tmp1;if(Leave_Data_Out_Flag){if(!Leave_Out_ID){Leave_Out_Time_Cnt ++;LEAVE_DATA_OUT_ON();if(Leave_Out_Time_Cnt > 8){Leave_Out_Time_Cnt = 0;Leave_Out_ID = 1;}}else if(Leave_Out_ID == 1){Leave_Out_Time_Cnt ++;LEAVE_DATA_OUT_OFF();if(Leave_Out_Time_Cnt > 5){Leave_Out_Time_Cnt = 0;Leave_Out_ID = 2;}}else if(Leave_Out_ID == 2){if(!Leave_Out_Time_Cnt){tmp1 = Leave_ID;tmp1 |= Move_Key;tmp1 >>= YiWei_ID;tmp1 &= 1;if(tmp1)Leave_Out_Time_Cnt = 0;elseLeave_Out_Time_Cnt = 2; YiWei_ID ++;if(YiWei_ID >= 9){Leave_Out_ID = 0;YiWei_ID = 0;Leave_Out_Time_Cnt = 0; Leave_Data_Out_Flag = 0;}}if(Leave_Data_Out_Flag){Leave_Out_Time_Cnt ++;if(Leave_Out_Time_Cnt <= 4) LEAVE_DATA_OUT_ON();else if(Leave_Out_Time_Cnt < 6) LEAVE_DATA_OUT_OFF();elseLeave_Out_Time_Cnt = 0;}}}Time_5ms_Cnt ++;if(Time_5ms_Cnt >= 5) //接收5ms去扫描{Time_5ms_Cnt = 0;if(MOVE_IN) //倾倒了{Move_IN_Cnt ++;if(Move_IN_Cnt >= 10){Move_IN_Cnt = 15;Move_Key = 0x80;Leave_ID = 0;}}else{if(!K8_IN)Leave_ID = 8;else if(!K7_IN)Leave_ID = 7;else if(!K6_IN)Leave_ID = 6;else if(!K5_IN)Leave_ID = 5;else if(!K4_IN)Leave_ID = 4;else if(!K3_IN)Leave_ID = 3;else if(!K2_IN)Leave_ID = 2;else if(!K1_IN)Leave_ID = 1;Move_IN_Cnt = 0;Move_Key = 0x70;}}Time_10ms_Cnt ++;if(Time_10ms_Cnt >= 10) //发送10MS去扫描{Time_10ms_Cnt = 0;}Time_200ms_Cnt ++;if(Time_200ms_Cnt >= 200){Time_200ms_Cnt = 0;if(!Leave_Data_Out_Flag){Leave_Out_Cnt ++;if(Leave_Out_Cnt >= 10){Leave_Out_Cnt = 0;Leave_Data_Out_Flag = 1;}}}}__interrupt isr1(void) //TC0定时器中断入口{static uchar Time1MS = 0;if(FT0IRQ) //TC0 //定时0.125ms{T0C=6; //T0 间隔250uSTime1MS ++;if(Time1MS >= 4) //1MS中断函数{Time1MS = 0;TimeFlag = 1;}}FT0IRQ = 0;}。

松翰SN 汇编语言与开发工具

松翰SN 汇编语言与开发工具

Example:
B0MOV 0x80, #3
// RAM[0x80] = #3
另外,符号$表示编译器当前运行程序地址(PC值)。
Example:
JMP $ JMP $+1
// To represent unlimited loop // Equivalent to two NOPs
符号$还可以用来获取标号地址的高、中、低字节。
为了避免使用太多不同的标号,以下符号可以用来表示不同的标号名称: 首先,使用符号“@@:”作为临时标号名,可以从前面和后面对它进行访问。 其次,使用“@B”指向前面离它最近的“@@:”标号;使用“@F”指向下一个(离它最近的) “@@:”标号。
Example:
JMP @@:
… JMP
@F
… @B
; jump to the next @@ ; jump to the previous@@
7.1.7 算术运算符
用户可使用+、-、*、/、%、&、|、^、~、()等符号进行算术运算。
Example:
2+3–4 1 2 + 3 * 4 14
以下按优先级顺序列出这些符号的数学涵义。
()
= sub-expression
+
= plus
-
= minus
~
= not
!
= logical not
*
= multiplication
Example:
TITLE
This is a demo code.
SONiX TECHNOLOGY CO., LTD
Page69
SN8 C Studio User’s Manual

如何用C来完成SN8系列芯片的程序设计

如何用C来完成SN8系列芯片的程序设计

如何用C来完成SN8系列芯片的程序设计松翰易爱华松翰科技(深圳)有限公司SONIX TECHNOLOGY CO.,LTD.内容概览一、C 与Assembly简述二、SN8 C studio 的安装与使用2.1SN8 C studio 的安装2.2SN8 C studio应用实例三、数据类型与运算3.1专有数据类型3.2常量与变量3.3数据的存储类型与存储结构四、程序流程控制4.1顺序结构4.2分支判断结构4.3循环控制结构五、函数5.1函数的定义5.2函数参数传递与返回值5.3函数参数与全局变量六、结构体、联合在SN8 C程序中的应用6.1结构体6.2联合七、中断7.1中断函数的定义7.2中断过程的分析7.3中断函数的结构八、位操作8.1位的定义8.2位的运算8.3位比较在程序流程控制中的应用九、内嵌汇编9.1如何内嵌汇编9.2内嵌汇编时变量的传递十、程序结构10.1主函数与子函数10.2构建可复用文件10.3构建具有实用性的程序一、C 与Assembly 简述Assembly (汇编)的历史已经有半个多世纪了,从计算机的发明那天开始,汇编就注定要与其结缘,它作为第一种真正意义上的编程语言,在计算机的发展过程中具有无可替代的地位。

汇编具有与机器语言一一对应的高效率,就是由于汇编的高效率,和其紧贴硬件的特性,使其在半个世纪之后的今天依然是目前开发单片机程序的主流工具之一。

但是由于编写汇编代码的工作量和难度都比较高,并且要求程序员对硬件必须有较深刻的了解,其入门就相对较难。

而汇编的写法各异,不同的程序员编写的代码有着巨大的差异,这就带来了学习的难度,可读性差也成为了其推广的瓶颈,程序的维护更加艰难。

随着程序复杂性的增加,开发团队的形成,应用而生的高级语言就逐渐取代了其位置。

C 就是高级语言中针对硬件操作最优秀的一种,C 也是基于汇编的,其相互关系如图所示。

随着人们不断的对C 进行改善,使C 的效率得到了很大的提升,其编译效率逐渐的逼近汇编。

课题_松翰SN8P2602B开发参考代码

课题_松翰SN8P2602B开发参考代码

本章选择了一些简单的C语言程序例题,这些程序的结构简单,编程技巧不多,题目虽然简单,但是非常适合入门单片机的学习者学习MSP430单片机的C 语言编程。

如下列出了C语言例题运行的MSP430F149实验板硬件资源环境,熟悉这些硬件资源,对于理解程序非常重要。

(1)数码管:左侧数码管与P5口相连,a~g,h对应P5.0~P5.7右侧数码管与P4口相连,a~g,h对应P4.0~P4.7(2)发光二极管8 个发光二极管与P3 口连接(3)按钮:左侧8个按钮与P2口相连,引脚号标在按钮上方右侧8个按钮与P1口相连,引脚号标在按钮上方(4)P2.3引脚还是模拟比较器输入(5)P6.0,P6.1引脚连接模拟量电位器,用于模拟量实验9.1 通过C 语言编程例入门MSP430C 语言编程如下例子都在MSP430F149实验板上通过验证。

例1:使与P3口的P3.0引脚连接的发光二极管闪烁。

#include <msp430x14x.h> //声明库void main(void) //主函数{unsigned int i; //变量声明WDTCTL=WDTPW+WDTHOLD; //关掉看门狗P3DIR |=BIT0; //设置P3.0为输出,这里BIT0=0x0001while(1) //无限次while循环{for (i=0;i<20000;i++) //for语句,i为循环变量,i每次循环加1,当i<20000时,//循环延时P3OUT=0x00; 使P3.0输出低电平,发光二极管亮,(低电平使发光二极管亮)for (i=0;i<20000;i++) //再次循环延时P3OUT=0x01; 使P3.0输出高电平,发光二极管灭,(高电平使发光二极管灭)}}例2:8个发光二极管1、3、5、7与2、4、6、8交替发光的例子#include <msp430x14x.h>void main(void){unsigned int i;WDTCTL=WDTPW+WDTHOLD;P3DIR=0XFF; //设置P3口为输出while(1){for (i=0;i<20000;i++)P3OUT=0X55; //使发光二极管1、3、5、7 灭,2、4、6、8亮for (i=0;i<20000;i++)P3OUT=0XAA;//使发光二极管1、3、5、7亮,2、4、6、8灭}}例3:定时器控制的发光二极管闪烁。

松翰sn8p2700系列单片机的原理及应用

松翰sn8p2700系列单片机的原理及应用

松翰sn8p2700系列单片机的原理及应用1. 简介单片机(Microcontroller Unit,简称MCU),是一种集成了微处理器核心、存储器和外设功能模块的集成电路芯片。

松翰sn8p2700系列单片机是松翰科技推出的一款高性能、低功耗的单片机产品。

本文将介绍松翰sn8p2700系列单片机的基本原理及其在实际应用中的一些典型案例。

2. 特点和功能松翰sn8p2700系列单片机具有以下特点和功能:•高性能:采用高性能的RISC架构,运行速度快,反应迅速。

•低功耗:通过优化电路设计和功耗管理策略,实现低功耗运行,延长电池使用寿命。

•多功能IO口:具有丰富的IO口资源,可以连接各种外设和传感器模块。

•大容量存储器:具有较大的Flash存储器和RAM存储器,可满足复杂的应用需求。

•丰富的外设:内置多个通用定时器、串行通信接口、模拟电路等外设模块,可方便地连接各种外部设备。

•多种封装尺寸:提供多种封装尺寸,适用于不同应用场景。

3. 基本原理松翰sn8p2700系列单片机的基本工作原理如下:•输入与输出:单片机通过GPIO口(General Purpose Input/Output)与外部设备进行数据交互。

通过对GPIO口的配置,可以实现输入和输出功能。

•处理器核心:单片机的处理器核心采用RISC架构,具有高性能和低功耗的特点。

它包括中央处理器(Central Processing Unit,简称CPU)、寄存器和运算单元等组成部分。

•存储器:单片机具有Flash存储器和RAM存储器。

Flash存储器用于存储程序代码和常量数据,RAM存储器用于存储变量和临时数据。

•时钟和定时器:单片机内部有时钟和定时器模块,用于产生时序信号和定时计时功能。

时钟信号用于同步各个模块的工作,定时器用于定时触发某些事件。

•外设接口:单片机通过串口、SPI(Serial Peripheral Interface)等接口与外部设备进行通信。

松翰单片机SN程序

松翰单片机SN程序

#define MAIN_GLOBAL#include "..\inc\config.h"//*****************************************************************// // 主函数////*****************************************************************// void main(void){InitCPU();Ram_init();LED1_LEAVE_OFF();LED2_LEAVE_OFF();FGIE = 1;//开启中断while(1){_clrwdt();_nop();if(TimeFlag){TimeFlag=0;Time_Fun(); //基准时间函数}// Red_Fun();}}//*****************************************************************// // 继电器负载输出函数////*****************************************************************// void Work_scan(void){static uchar CaiDeng_Cnt = 0;if(Open_Flag && !Error_Flag){MOTOR2_ON();//同步电机if(Heat_Leave == 1){if(Fan_ON_Flag && !YanShi_Cnt)YanShi_Cnt = 4;else if(!Fan_ON_Flag){FENG_MOTOR1_ON();//风机Fan_ON_Flag = 1;}if(YanShi_Cnt >= 4){HEAT1_ON();Heat1_ON_Flag = 1;}HEAT2_OFF();Heat2_ON_Flag = 0;}else if(Heat_Leave == 2){if(Fan_ON_Flag && !YanShi_Cnt)YanShi_Cnt = 4;else if(!Fan_ON_Flag){FENG_MOTOR1_ON();//风机Fan_ON_Flag = 1;}if(YanShi_Cnt >= 4){HEAT1_ON();Heat1_ON_Flag = 1;}if(YanShi_Cnt >= 8){HEAT2_ON();Heat2_ON_Flag = 1;}}else{if(YanShi_Cnt >= 60){Fan_ON_Flag = 0;FENG_MOTOR1_OFF();}HEAT1_OFF();Heat1_ON_Flag = 0;HEAT2_OFF();Heat2_ON_Flag = 0;}if(CaiDeng_Leave == 1){LED_RED = 1;LED_GREEN = 0;LED_BLUE = 0;}else if(CaiDeng_Leave == 2){LED_RED = 0;LED_GREEN = 1;LED_BLUE = 0;}else if(CaiDeng_Leave == 3){LED_RED = 0;LED_GREEN = 0;LED_BLUE = 1;}else if(CaiDeng_Leave == 4){LED_RED = 1;LED_GREEN = 1;LED_BLUE = 1;}else if(CaiDeng_Leave == 5){if(!CaiDeng_Cnt){LED_RED = 1;LED_GREEN = 0;LED_BLUE = 0;}else if(CaiDeng_Cnt == 30){LED_RED = 0;LED_GREEN = 1;LED_BLUE = 0;}else if(CaiDeng_Cnt == 60){LED_RED = 0;LED_GREEN = 0;LED_BLUE = 1;}else if(CaiDeng_Cnt == 90){LED_RED = 1;LED_GREEN = 1;LED_BLUE = 1;}CaiDeng_Cnt ;if(CaiDeng_Cnt >= 120){CaiDeng_Cnt = 0;}}else{LED_RED = 0;LED_GREEN = 0;LED_BLUE = 0;}}else{MOTOR2_OFF();//同步电机HEAT1_OFF();//加热器1Heat1_ON_Flag = 0;HEAT2_OFF();//加热器2Heat2_ON_Flag = 0;LED1_LEAVE_OFF();//2档灯LED2_LEAVE_OFF();//1档灯LED_HUOYAN_OFF();//火焰LED_RED = 0;LED_GREEN = 0;LED_BLUE = 0;if(YanShi_Cnt >= 60 || Error_Flag){Fan_ON_Flag = 0;FENG_MOTOR1_OFF();//关闭风机}}}/***************************************************************** 红外输入判断函数__MAIN_EXTERN uchar Red_In_Cnt;//按键值__MAIN_EXTERN uchar Red_Data;//按键值__MAIN_EXTERN uchar Old_Red_Data;//按键值__MAIN_EXTERN uchar Red_ID;*****************************************************************/ void Red_Fun(void){// static uchar Red_Data_Bit_Cnt = 0;// TEST = !TEST;// if(Red_In_Cnt >= 100)// {// Red_ID = 0;// Red_Data = 0;// Red_Data_Bit_Cnt = 0;// Red_In_Cnt = 0;// }// if(!Red_ID)// {// if(RED_IN)// {// if(Red_In_Cnt >= 60&&Red_In_Cnt <= 84)// {// Red_ID = 1;// }// Red_In_Cnt = 0;// }// }// else if(Red_ID == 1)// {// if(!RED_IN)// {// if(Red_In_Cnt >= 26&&Red_In_Cnt <= 46)// {// Red_ID = 2;// }// else// Red_ID = 0;// Red_In_Cnt = 0;// }// }// else if(Red_ID == 2)// {// if(RED_IN)// Red_ID = 3;// Red_In_Cnt = 0;// }// if(Red_ID == 3)// {// if(!RED_IN)// {// if(Red_In_Cnt>=3)// {// Red_Data <<= 1;// if(Red_In_Cnt >=10)// Red_Data |= 1;// Red_Data_Bit_Cnt ;// if(Red_Data_Bit_Cnt == 8)// {// if(Red_Data != _0100_0000b) // {// Red_ID = 0;// Red_Data_Bit_Cnt = 0; // }// Red_Data = 0;// }// if(Red_Data_Bit_Cnt == 24)// {// Red_Down_Flag = 1;// Old_Red_Data = Red_Data; // Red_ID = 0;// Red_Data_Bit_Cnt = 0;// Red_Data = 0;// }// Red_In_Cnt = 0;// }// }// }}//*****************************************************************// // 时基走时函数////*****************************************************************// void Time_Fun(void){static uchar Time5MS_Cnt = 0,Time10MS_Cnt = 0,Time100MS_Cnt = 0,Time500MS_Cnt = 0;static uchar T10S_Cnt = 0,T30min_Cnt;static uchar Buzz_ON_Cnt = 0,Error_Cnt = 0,PingDao_Cnt = 0;Time5MS_Cnt ;if(Time5MS_Cnt >= 5) //5MS时间基准{Time5MS_Cnt = 0;// AD_fun();}Time10MS_Cnt ;if(Time10MS_Cnt >= 10) //10MS时间基准{Time10MS_Cnt = 0;KeyFun();// LedDisplay();if(Buzz_Flag){Buzz_ON_Cnt ;if(Buzz_ON_Cnt >= 15){Buzz_ON_Cnt=0;Buzz_Flag = 0;}}}Time100MS_Cnt ;if(Time100MS_Cnt >= 100)//100MS时间基准{Time100MS_Cnt = 0;Time500MS_Cnt ;if(Time500MS_Cnt >= 5){Time500MS_Cnt = 0;if(YanShi_Cnt <70){YanShi_Cnt ;}if(SanSuo_Time){SanSuo_Time --;}elseSanSuo_Flag = 0;if(YuYue_Time){T10S_Cnt ;if(T10S_Cnt >= 20)//10S{T10S_Cnt = 0;T30min_Cnt ;if(T30min_Cnt >= 180)//180=30分钟{T30min_Cnt = 0;YuYue_Time --;if(!YuYue_Time){Open_Flag = 0;Buzz_Flag = 1;Heat_Leave = 0;YanShi_Cnt = 0;HuoYan_Leave = 3;YuYue_Time = 0;}}}}}Work_scan();// if(!PINGDAO_IN)// {// PingDao_Cnt ;// if(PingDao_Cnt >= 10)// {// Error_Flag = 1;// Open_Flag = 0;// }// }if(Error_Flag){if(Error_Cnt <= 100)Error_Cnt ;if(Error_Cnt == 10||Error_Cnt == 20||Error_Cnt == 30){Buzz_Flag = 1;}}}}/*****************************************************************按键处理//--------------------按键值-----------------------------------#define RED_KEY_ON_OFF _1101_1000b #define RED_KEY_HEATER1 _0010_1000b#define RED_KEY_FLAME_UP _0110_1000b#define RED_KEY_TIME_0011_0000b#define RED_KEY_HEATER2 _0000_1000b #define RED_KEY_FLAME_DOWN _0100_1000b#define KEY_ON_OFF 1#define KEY_HEATER1 6#define KEY_FLAME_UP 5#define KEY_TIME 4#define KEY_HEATER2 3#define KEY_COLDURS 2*****************************************************************/ void KeyFun(void) //单片机初始化{static uchar Key_Cnt = 0;if(!Error_Flag){Scan_Key();if(Red_Down_Flag)//红外按键赋值{Red_Down_Flag = 0;switch(Old_Red_Data){case RED_KEY_ON_OFF:{Key_Data = KEY_ON_OFF;}break;case RED_KEY_HEATER1:{Key_Data = KEY_HEATER1;}break;case RED_KEY_FLAME_UP:{Key_Data = KEY_FLAME_UP;}break;case RED_KEY_TIME:{Key_Data = KEY_HEATER_OFF;}break;case RED_KEY_HEATER2:{Key_Data = KEY_HEATER2;}break;case RED_KEY_FLAME_DOWN:{Key_Data = KEY_COLDURS;}break;default:break;}Old_Red_Data = 0;}switch(Key_Data){case KEY_ON_OFF://开机按键{Buzz_Flag = 1;YanShi_Cnt = 0;if(!Open_Flag){Heat_Leave = 0;HuoYan_Leave = 3;CaiDeng_Leave = 0;YuYue_Time = 0;Open_Flag = 1;}else{Open_Flag = 0;}}break;case KEY_HEATER1://1档{if(Open_Flag){if(Heat_Leave != 1 ){Buzz_Flag = 1;YanShi_Cnt = 0;Heat_Leave = 1;LED1_LEAVE_ON();LED2_LEAVE_OFF();}}}break;case KEY_HEATER2://2档{if(Open_Flag){if(Heat_Leave != 2){Buzz_Flag = 1;if(!Heat_Leave){YanShi_Cnt = 0;}Heat_Leave = 2;LED2_LEAVE_ON();LED1_LEAVE_OFF();}}}break;case KEY_HEATER_OFF://加热关闭按键{if(Open_Flag){if(Heat_Leave){Buzz_Flag = 1;Heat_Leave = 0;YanShi_Cnt = 0;LED1_LEAVE_OFF();LED2_LEAVE_OFF();}}}break;case KEY_FLAME_UP://火焰 -{if(Open_Flag){Buzz_Flag = 1;HuoYan_Leave ;if(HuoYan_Leave >= 4)HuoYan_Leave = 1;}}break;case KEY_COLDURS://彩灯{if(Open_Flag){Buzz_Flag = 1;HuoYan_Leave = 2;CaiDeng_Leave ;if(CaiDeng_Leave >= 6)CaiDeng_Leave = 0;}}break;default:break;}Key_Data = 0;}}/*****************************************************************按键扫描*****************************************************************/void Scan_Key(void){static uchar Scan_Key_ID = 0;static uchar Key1_Out_Cnt = 0,Key2_Out_Cnt = 0,Key4_Out_Cnt = 0;static ucharScan_Key_data,Key1_Old_data,Key2_Old_data,Key4_Old_data;uchar i,Tmp;Scan_Key_ID ;if(Scan_Key_ID >= 3)Scan_Key_ID = 0;if(!Scan_Key_ID){KEY1_OUT();KEY2_IN();KEY3_IN();KEY4_IN();KEY1 = 0;for(i=0;i<50;i ){_nop();}Tmp = P0;Scan_Key_data = Tmp | _1011_1011b;if(Scan_Key_data==Key1_Old_data&&Scan_Key_data!=_1111_1111b){Key1_Out_Cnt ;if(Key1_Out_Cnt >= 50)Key1_Out_Cnt = 40;if(Key1_Out_Cnt == 3){if(Key1_Old_data == _1111_1011b)Key_Data = 1;else if(Key1_Old_data == _1011_1111b)Key_Data = 2;}}else{Key1_Old_data=Scan_Key_data;Key1_Out_Cnt = 0;}KEY1 = 1;}else if(Scan_Key_ID==1){KEY1_IN();KEY2_OUT();KEY3_IN();KEY4_IN();KEY2 = 0;for(i=0;i<50;i ){_nop();}Tmp = P0;Scan_Key_data = Tmp | _1010_1111b;if(Scan_Key_data==Key2_Old_data&&Scan_Key_data!=_1111_1111b) {Key2_Out_Cnt ;if(Key2_Out_Cnt >= 50)Key2_Out_Cnt = 40;if(Key2_Out_Cnt == 3){if(Key2_Old_data == _1110_1111b)Key_Data = 3;else if(Key2_Old_data == _1011_1111b)Key_Data = 4;}}else{Key2_Old_data=Scan_Key_data;Key2_Out_Cnt = 0;}KEY2 = 1;}else if(Scan_Key_ID==2){KEY1_IN();KEY2_IN();KEY3_IN();KEY4_OUT();KEY4 = 0;for(i=0;i<50;i ){_nop();}Tmp = P0;Scan_Key_data = Tmp | _1011_1101b;if(Scan_Key_data==Key4_Old_data&&Scan_Key_data!=_1111_1111b){Key4_Out_Cnt ;if(Key4_Out_Cnt >= 50)Key4_Out_Cnt = 40;if(Key4_Out_Cnt == 3){if(Key4_Old_data == _1111_1101b)Key_Data = 5;else if(Key4_Old_data == _1011_1111b)Key_Data = 6;}}else{Key4_Old_data=Scan_Key_data;Key4_Out_Cnt = 0;}KEY4 = 1;}}//*****************************************************************//// 硬件初始化////*****************************************************************// void InitCPU(void) //单片机初始化{FGIE=0; //关总中断//------------------------------P0-----------------FP00M=1;//红灯FP01M=1;//按键FP02M=1;//按键// FP03M=1;//FP04M=1;//按键FP05M=1;//蜂鸣器FP06M=0;//FP07M=1;//LED1档火焰P0UR =_0101_0110b;//P0 = 0;//------------------------------P4-----------------FP40M=1;//蓝灯FP41M=1;//温保开关FP42M=1;//同步电机FP43M=1;//火焰FP44M=1;//绿灯P4UR =0;//P4 = 0;//------------------------------P5-----------------FP50M=1;//LED2档火焰FP51M=0;//红外输入FP52M=1;//加热2FP53M=1;//加热1FP54M=1;//风机P5UR =0;//P5 = 0;//------------------------------T0--------------------------------// TC0M = 0X60;// T0C=6; //T0 间隔为16M,250uS// FALOAD0 = 1;// FTC0IEN=1; //允许响应T0 中断// FTC0IRQ=0; //T0 中断请求标志清零// FTC0ENB=1; //开启T0运行//------------------------------TC0--------------------------------TC0M = 0X64;//4分频TC0C=131; //T0 间隔为16M,250uSTC0R=131;FALOAD0 = 1;FTC0IEN=1; //允许响应T0 中断FTC0IRQ=0; //T0 中断请求标志清零FTC0ENB=1; //开启T0运行//-----------------------ADC---------------------------------------P4CON = _0001_0000b; //P41 P44为AD--纯模拟输入ADR = _0100_0000b;//时钟为FCPU/1 //4M时,转换时间为16uSFGIE=1; //开总中断}//*****************************************************************// // 变量初始化函数////*****************************************************************// void Ram_init(void){Buzz_Flag = 1;HuoYan_Leave = 3;Key_Data = 0;Error_Flag = 0;}/*****************************************************************中断函数*****************************************************************/__interrupt isr(void) //中断入口{static uchar Time1MS = 0;static uchar HuoYan_Cnt = 0,HuoYan_Leave_Data;static uchar WenBao_Cnt = 0,WenBao_ID = 0;static uchar Red_Data_Bit_Cnt = 0;if(FTC0IRQ) //TC0 //定时0.25ms{if(WenBao_Pin == WenBao_Pin_Flag){WenBao_Cnt ;}else{WenBao_Pin_Flag = WenBao_Pin;if(WenBao_Cnt >= 40&&WenBao_Cnt <= 120){WenBao_ID ;if(WenBao_ID >= 100){Error_Flag = 1;Open_Flag = 0;}}WenBao_Cnt = 0;}Red_In_Cnt ;if(Red_In_Cnt >= 100){Red_ID = 0;Red_Data = 0;Red_Data_Bit_Cnt = 0;Red_In_Cnt = 0;}if(!Red_ID){if(RED_IN){if(Red_In_Cnt >= 60&&Red_In_Cnt <= 84){Red_ID = 1;}Red_In_Cnt = 0;}}else if(Red_ID == 1){if(!RED_IN){if(Red_In_Cnt >= 26&&Red_In_Cnt <= 46){Red_ID = 2;}elseRed_ID = 0;Red_In_Cnt = 0;}}else if(Red_ID == 2){if(RED_IN)Red_ID = 3;Red_In_Cnt = 0;}else if(Red_ID == 3){if(!RED_IN){if(Red_In_Cnt>=3){Red_Data <<= 1;if(Red_In_Cnt >=8)Red_Data |= 1;Red_Data_Bit_Cnt ;if(Red_Data_Bit_Cnt == 8){if(Red_Data != _0100_0000b){Red_ID = 0;Red_Data_Bit_Cnt = 0;}Red_Data = 0;}if(Red_Data_Bit_Cnt == 24){Red_Down_Flag = 1;Old_Red_Data = Red_Data;Red_ID = 0;Red_Data_Bit_Cnt = 0;Red_Data = 0;}}Red_In_Cnt = 0;}}if(Buzz_Flag)BUZZ = !BUZZ;elseBUZZ_OFF();Time1MS ;if(Time1MS >= 8) //1MS中断函数{Time1MS = 0;TimeFlag = 1;}if(Open_Flag){HuoYan_Cnt ;if(HuoYan_Cnt >= 12){HuoYan_Leave_Data = HuoYan_Leave*4;HuoYan_Cnt = 0;}if(HuoYan_Cnt >= HuoYan_Leave_Data){LED_HUOYAN_OFF();}elseLED_HUOYAN_ON();}}//--------------------------------------------------INTRQ = 0;//-------------------------------------------------- }。

Sonix_松翰指令用户指南

Sonix_松翰指令用户指南
数据传送指令.......................................................................................................................................................6 MOV—存储器读/写指令 ..............................................................................................................................6 B0MOV—存储器 BANK0 读/写指令 ............................................................................................................6 XCH—累加器与存储器的数据交换 ..............................................................................................................7 B0XCH—累加器与存储器(BANK0)的数据交换 ......................................................................................7 MOVC—从 ROM 中读取数据 ......................................................................................................................7
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#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{;}。

相关文档
最新文档