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

合集下载

松翰单片机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;}。

汇编语言的编程步骤与调试方法

汇编语言的编程步骤与调试方法

汇编语言的编程步骤与调试方法汇编语言是一种底层的程序设计语言,直接操作计算机硬件。

在编写汇编语言程序时,需要经过一系列的编程步骤和调试方法,以确保程序的正确性和可靠性。

下面是关于汇编语言的编程步骤和调试方法的一些详细介绍。

一、编程步骤:1.定义程序目标:明确程序的功能、输入和输出。

2.设计算法和逻辑:将目标转化为汇编语言指令,设计算法和逻辑流程。

3.选择寄存器和指令:根据算法和逻辑需求,选择合适的寄存器和指令。

4.编写指令:根据算法和逻辑需求,使用正确的指令来编写汇编语言程序。

5.汇编编译:使用汇编编译器将汇编代码翻译成机器代码。

6.汇编连接:使用链接程序将机器代码和其他必要的文件(如库文件)连接成可执行文件。

7.调试和测试:进行调试和测试,确保程序的正确性和可靠性。

8.优化和改进:根据测试结果,对程序进行优化和改进。

二、调试方法:1.插入调试指令:在程序中插入一些特定的调试指令,可以输出一些关键的变量或标志位,以便观察程序的执行路径和结果。

2.单步执行:逐条执行程序代码,并观察每条指令的执行结果和影响,以及寄存器和存储器的变化情况。

3.观察寄存器和存储器:利用调试器观察程序执行过程中的寄存器和存储器的变化情况,以确定代码逻辑是否正确。

4.打印和日志输出:通过在程序中插入打印和日志输出的语句,可以观察关键变量和代码的执行情况,以帮助调试。

5.内存和寄存器状态检查:检查程序执行过程中的内存和寄存器状态,特别是对一些关键变量和标志位进行监视,以便发现问题所在。

6.脱机调试:将程序转储至仿真器或虚拟机,并在其中进行无风险的调试,以排查错误。

三、汇编程序调试常见问题及解决方法:1.程序崩溃或死循环:检查程序中循环和分支语句的逻辑判断条件是否正确,以及循环内的寄存器和内存操作是否正确。

2.内存访问错误:查看程序访问的内存地址和存储器的范围是否正确,并检查程序中的指针操作是否正确。

3.寄存器使用错误:检查程序中使用的寄存器是否正确选择和使用,尤其是在多个函数调用的情况下,需要注意寄存器的保存和恢复。

Sonix_松翰指令用户指南

Sonix_松翰指令用户指南
数据传送指令.......................................................................................................................................................6 MOV—存储器读/写指令 ..............................................................................................................................6 B0MOV—存储器 BANK0 读/写指令 ............................................................................................................6 XCH—累加器与存储器的数据交换 ..............................................................................................................7 B0XCH—累加器与存储器(BANK0)的数据交换 ......................................................................................7 MOVC—从 ROM 中读取数据 ......................................................................................................................7

SN 单片机汇编软件 V138 中文汉化版

SN 单片机汇编软件 V138 中文汉化版

SN 仿真器汇编软件V138 简体中文汉化版本台湾松翰的 8 位单片机 SN 仿真器汇编软件 V138 已经发布,该版本支持芯片型号如下:支持最新芯片 :SN8F25E27, SN8F25E27L, SN8F25E28, SN8F25E28L, SN8F26E67, SN8F26E67L, SN8F26E68, SN8F26E68L,SN8P2623, SN8P2723, SN8P2929, SN8FMD25A, SN8FMD24A, SN8FMD24AL, SN8FMD25A, SN8FMD25AL, SN8P25234,支持仿真全部真实功能的下列芯片列表: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, SN8F25E27, SN8F25E27L, SN8F25E28,SN8F25E28L, SN8F26E67, SN8F26E67L, SN8F26E68, SN8F26E68L, SN8P2623, SN8P2723, SN8P2929,SN8FMD25A, SN8FMD24A, SN8FMD24AL, SN8FMD25A, SN8FMD25AL, SN8P25234,提示:a. M2IDE V1.00 或更新的版本仅支持SN8ICE_2K.b. SN8IDE V1.99L ~ V1.99Z 仅支持 SN8ICE_1K(旧名称是 S8KD-2 ICE).c. 停止支持 Writer V3.0 烧写器.由于软件的菜单,对话框,提示语句....全部为英文,因为英文底子差,感觉使用不方便,于是又抽时间给汉化了.主要是对 8 位单片机普通应用部分的菜单,对话框,提示... 进行汉化.部分语音应用之处忽略了而没有汉化.有一些受软件内部保护的地方不够水平也没有汉化.汉化后的主界面:汉化后的菜单:汉化后的对话框:汉化后的提示语句:欢迎爱好使用中文软件界面的朋友下载使用!不足之处,欢迎指正!请下载: HH_M2Asm138.rar (去掉文件名的前面"HH_"字符,覆盖原英文同名文件即可!-----覆盖前请备份英文软件! 以便快速恢复.)。

单片机的软件开发工具与环境介绍

单片机的软件开发工具与环境介绍

单片机的软件开发工具与环境介绍单片机是指集成在单个芯片上的微型计算机系统。

它具备较小的体积、低功耗、低成本以及较强的功能等特点,被广泛应用于各个领域。

在单片机的开发过程中,选择合适的软件开发工具和环境非常关键。

本文将介绍几种常用的单片机软件开发工具与环境。

一、Keil μVisionKeil μVision是一款由Keil Software公司推出的嵌入式系统开发工具。

它是一套集成开发环境(IDE),包含了编译器、调试器、仿真器等功能模块,可以实现单片机程序的编写、编译以及调试。

KeilμVision支持多种芯片系列,如STMicroelectronics的STM32系列、NXP的LPC系列等。

其可视化界面友好,功能强大,被广泛应用于单片机软件开发领域。

二、IAR Embedded WorkbenchIAR Embedded Workbench是由IAR Systems推出的单片机开发工具。

它提供了完整的软件开发流程,包括编写、编译、调试和优化等环节。

IAR Embedded Workbench支持多种单片机系列,如Texas Instruments的MSP430系列、Renesas的RL78系列等。

该工具具有较高的代码生成效率和卓越的调试功能,可以帮助开发者提高开发效率和代码质量。

三、MPLAB X IDEMPLAB X IDE是由Microchip公司开发的一款集成开发环境。

它主要用于开发与Microchip单片机相关的应用程序。

MPLAB X IDE支持多种编程语言,如C、C++以及汇编语言。

该工具提供了丰富的调试功能和模拟器功能,并能够与硬件调试器(如PICkit)结合使用,使得开发者可以更加方便地进行单片机程序的开发和调试。

四、Arduino IDEArduino IDE是一款面向Arduino单片机的开发工具。

Arduino是一种开源的电子原型平台,广泛应用于各个领域的快速原型开发。

汇编语言程序开发工具

汇编语言程序开发工具
2013年8月11日5时4分 DSP原理及应用 7
第4章 汇编语言程序开发工具
2. ’C54x的开发工具
(1)代码生成工具:
助记符指令—代数式指令翻译器:用来将包含 助记符指令的汇编语言源文件转换成包含代数式指令 的汇编语言源文件。 建库实用程序:用来建立用户自己使用的、并 用C/C++语言编写的支持运行的库函数。 十六进制转换程序:可以很方便地将COFF目标 文件转换成TI、Intel、Motorola等公司的目标文件 格式。
2013年8月11日5时4分 DSP原理及应用 3
第4章 汇编语言程序开发工具
4.1 TMS320C54x软件开发过程
1. ’C54x应用软件开发流程
’C54x应用软件的开发可在TI公司提供的开发环境中进行, 用户可以用C/C++语言或汇编语言编写源文件,经C编译器、 汇编器生成COFF格式的目标文件,再用链接器进行链接,生 成在’C54x上可执行的目标代码,然后利用调试工具对可执 行的目标代码进行仿真和调试。 当调试完成后,通过Hex代码转换工具,将调试后的可执 行目标代码转换成EPROM编程器能接受的代码,并将该代码固 化到EPROM中或加载到用户的应用系统中,以便DSP目标系统 脱离计算机单独运行。
目标文件
目标存储器
.bss
RAM
E2PROM
.data
.text
ROM
2013年8月11日5时4分
DSP原理及应用
23
第4章 汇编语言程序开发工具
4.3.2 汇编器对段的处理 汇编器对段的处理是通过段伪指令来区别各个段 的,并将段名相同的语句汇编在一起。
汇编器有5条伪指令可识别汇编语言程序的各个 部分: ● .bss ——定义未初始化段 ● .usect ——定义未初始化段 ● .text ——定义已初始化段 ● .data ——定义已初始化段 ● .sect ——定义已初始化段

松翰(SONIX)烧录器作业指导书

松翰(SONIX)烧录器作业指导书

松翰(SONIX)烧录器作业指导书
文件名称六芯片读取及烧录2.所选择程序读取正常后,将烧录器连接机台进行芯片烧录,注意事项1.取对应转接板插入所烧写程序,注意丝印上所印有型号,如C020配备2501B转接板,使用错误将无法烧录。

2.对所选择程序必须截图存档,方便每日程序点检及日后异常追溯。

4.将烧录器连接机台后,注意LED灯显示,黄色为烧录中,绿色为烧录完成,红色为不良.
作成部门
③编写/日期
②审核/日期
①批准/日期修订次数修订日期审核日期文件编号:XDD/SMT-0001
版本:A.1
松翰(SONIX)烧录器作业指导书第 3 页共 3 页
1 点击“读取OTP”按钮,会将芯片中的信息读出(如果芯片有加密则只能读出部分数
据),并显示在信息框中.
3.程序选取正确后必须读取1PCS芯片,点检芯片是否正确,并如实填写<烧录点检表>.。

单片机的编程语言选择与开发工具推荐

单片机的编程语言选择与开发工具推荐

单片机的编程语言选择与开发工具推荐随着科技的不断发展,单片机已经成为了现代电子产品中不可或缺的核心部件。

单片机的编程语言选择和开发工具的使用对于开发者来说至关重要。

本文将简要介绍几种常见的单片机编程语言,并推荐一些优秀的开发工具供开发者选择。

一、单片机编程语言选择1. C语言C语言是目前最常用的单片机编程语言之一。

它具有良好的可移植性、强大的数据处理能力和丰富的编程库。

C语言使用简单且易于学习,适合初学者入门。

许多著名的单片机制造商都提供了针对C语言的开发工具和库。

2. C++C++语言在C语言的基础上进行了扩展,为单片机编程提供了更多的功能和特性。

C++语言支持面向对象的编程,使得程序结构更加清晰,代码更易于维护。

然而,由于C++语言对内存的使用较为复杂,对于资源有限的单片机来说,需要仔细调试和优化。

3. PythonPython语言在近年来在单片机编程领域中日益流行。

Python语言具有清晰简洁的语法,易于学习和使用。

它支持丰富的库和模块,使得开发人员能够快速实现各种功能。

然而,由于Python解释器的消耗较大,对于对资源要求严格的嵌入式系统来说,需要权衡性能和效率。

二、单片机开发工具推荐1. Keil MDKKeil MDK是一款功能强大、易于使用的开发工具。

它支持多种单片机架构,包括ARM Cortex-M系列和8位STC系列等。

Keil MDK具有直观的用户界面、强大的调试功能和稳定的编译器,可以帮助开发者高效地进行单片机程序开发。

2. MPLAB X IDEMPLAB X IDE是Microchip公司推出的一款开源免费的集成开发环境。

它支持多种编程语言和单片机系列,包括PIC和dsPIC等。

MPLAB X IDE具有友好的用户界面和丰富的功能,包括源代码编辑、调试、仿真等,非常适合微控制器的开发。

3. Arduino IDEArduino IDE是一款适用于Arduino系列单片机的开发工具。

汇编语言程序的开发工具共38页

汇编语言程序的开发工具共38页
汇编语言程序的开发工具
1、纪律是管理关系的形式。——阿法 纳西耶 ຫໍສະໝຸດ 2、改革如果不讲纪律,就难以成功。
3、道德行为训练,不是通过语言影响 ,而是 让儿童 练习良 好道德 行为, 克服懒 惰、轻 率、不 守纪律 、颓废 等不良 行为。 4、学校没有纪律便如磨房里没有水。 ——夸 美纽斯
5、教导儿童服从真理、服从集体,养 成儿童 自觉的 纪律性 ,这是 儿童道 德教育 最重要 的部分 。—— 陈鹤琴
55、 为 中 华 之 崛起而 读书。 ——周 恩来
谢谢!
51、 天 下 之 事 常成 于困约 ,而败 于奢靡 。——陆 游 52、 生 命 不 等 于是呼 吸,生 命是活 动。——卢 梭
53、 伟 大 的 事 业,需 要决心 ,能力 ,组织 和责任 感。 ——易 卜 生 54、 唯 书 籍 不 朽。——乔 特

松翰 SN8 C Studio 使用教程(一步一步完整教程)

松翰 SN8 C Studio 使用教程(一步一步完整教程)

松翰 SN8 C Studio 使用教程(一步一步完整教程)1.到松翰官网下载SN8 C Studio软件,并安装。

2.安装后,点击打开
3.新建工程,建立你自己的工程项目
4. 新建工程,选择1,然后再选择你的芯片系列,先选择你工程的放置地址,然后再写工程名称。

5.在工程里面添加你的.C文件和.H头文件
6.设置工程配置
7.选择芯片
8.工程项目配置
9.编译程序,直到程序编辑完成,并且没有错误(警告一般没有关系)
10.程序仿真(需要你有自己的仿真器,并且和电脑连接好)仿真界面的退出运行复位。

1为变量实时查看,查看的时候需要暂停程序。

2为芯片里面寄存器查看。

松翰单片机中文开发教程

松翰单片机中文开发教程
$"只限於#
巨 集 :



第一章
組合語言
一 般 檔 案 架構 指令
節 區 定 義 程 式 資料 常數節區的位 址設定 ! 資 料 定 義 程式資料定義: 程式資料定義: 程式資料定義: 暫存器資料定義: 包 含 另 一 個檔案: !
!
!

: 數字表示法: 運算元: 輔助指令與虛指令: 程式的啟始與結束: 使用者自定標題: 變數表示法: 文字巨集

ห้องสมุดไป่ตู้ % %
執行外部程式執行外部程式執行外部程式執行外部程式位元運算函式位元運算函式位元運算函式位元運算函式第二章第二章與組譯程式與組譯程式第二章第二章與組譯程式與組譯程式新版新版簡述簡述新版新版簡述簡述規格

巨 集 命 令 運算子 & '
!
!"只限於# !


24C02操作--松瀚汇编源码

24C02操作--松瀚汇编源码

24C02操作--松瀚汇编源码;; P_CLKIIC EQU P1.2; P_DATIIC EQU P1.3; PM_DATIIC EQU P1M.3; EE_ADDR DS 1 ;地址寄存器; TMP3_IIC DS 1; TMP2_IIC DS 1; TMP1_IIC DS 1; DATA_TEMP DS 1 ;数据缓存; R_DATA DS 1 ;读数据寄存器; W_DATA DS 1 ;写数据寄存器;*************************************************;功能:读出⼀认定地址的数据;INPUT: EE_ADDR_H , EE_ADDR_L --> EE_ADDR;OUTPUT: R_DATA;影响参数:DATA_TEMP ,TMP1_IIC ,TMP2_IIC ,TMP3_IIC,TMP4_IIC;======================================READ_EEPROM:MOV A,#200MOV TMP2_IIC,AREAD_EEPROM_LOOP0:;------------B0BSET PM_DATIIC ;SET OUT MODELCALL STAR_CONDITIONMOV A,#10100000BB0MOV DATA_TEMP,ACALL SEND_DATA_ADD ;写模式,写⼊⾼3位地址B0BCLR PM_DATIIC ;IN MODELB0BSET P_CLKIICB0BTS1 P_DATIICJMP READ_EEPROM_LOOP1DECMS TMP2_IICJMP READ_EEPROM_LOOP0BSET F_ERRIICREAD_EEPROM_LOOP1:B0BCLR P_CLKIICB0BSET PM_DATIIC ;OUT MODEMOV A,EE_ADDRMOV DATA_TEMP,ACALL SEND_DATA_ADD ;写⼊低8位地址B0BCLR PM_DATIIC ;IN MODELB0BSET P_CLKIICMOV A,#200MOV TMP2_IIC,AREAD_EEPROM_LOOP2:B0BTS1 P_DATIICJMP READ_EEPROM_LOOP3DECMS TMP2_IICJMP READ_EEPROM_LOOP2BSET F_ERRIICREAD_EEPROM_LOOP3:B0BCLR P_CLKIICB0BSET PM_DATIIC ;OUT MODELCALL STAR_CONDITIONMOV A,#10100001BMOV DATA_TEMP,ACALL SEND_DATA_ADD ;读出数据B0BCLR PM_DATIIC ;IN MODELB0BSET P_CLKIICMOV A,#200MOV TMP2_IIC,AREAD_EEPROM_LOOP4:B0BTS1 P_DATIICJMP READ_EEPROM_LOOP5DECMS TMP2_IICJMP READ_EEPROM_LOOP4BSET F_ERRIICREAD_EEPROM_LOOP5:B0BCLR P_CLKIICCALL OUT_DATA_XB0BSET PM_DATIIC ;OUT MODELCALL STOP_CONDITIONB0BCLR PM_DATIIC ;IN MODEL;-------------MOV A,DATA_TEMPMOV R_DATA,A ;8.28RET;************************************************************************;功能:定⼊⼀指定地址的数据;INPUT: EE_ADDR_H , EE_ADDR_L ,W_DATA;OUTPUT: F_EER ,24写⼊有错;影响参数:DATA_TEMP ,TMP1_IIC ,TMP2_IIC ,TMP3_IIC;=================================================== WRITE_EEPROM:;先读出,与写⼊相同则不写 --> 如果读出的数与要写的数⼀致则不⽤再写 CALL READ_EEPROM ;MOV A,R_DATAXOR A,W_DATABTS0 FZRET;=================================MOV A,#3 ;如果写数据失败则重复写最多写3次MOV TMP3_IIC,A;------------WRITE_EEPROM00:B0BSET PM_DATIIC ;SET P1.3 OUT MODELCALL STAR_CONDITIONMOV A,#10100000B ;写⼊⾼3位地址MOV DATA_TEMP,ACALL SEND_DATA_ADD ;DEVICE_ADDRESSB0BCLR PM_DATIIC ;IN MODELB0BSET P_CLKIICMOV A,#200MOV TMP2_IIC,AWRITE_EEPROM_LOOP0:B0BTS1 P_DATIICJMP WRITE_EEPROM_LOOP1DECMS TMP2_IICJMP WRITE_EEPROM_LOOP0BSET F_ERRIICWRITE_EEPROM_LOOP1:B0BCLR P_CLKIICB0BSET PM_DATIIC ;OUTMOV A,EE_ADDRMOV DATA_TEMP,ACALL SEND_DATA_ADD ;写⼊低8位地址B0BCLR PM_DATIIC ;IN MODELB0BSET P_CLKIICMOV A,#200MOV TMP2_IIC,AWRITE_EEPROM_LOOP2:B0BTS1 P_DATIICJMP WRITE_EEPROM_LOOP3DECMS TMP2_IICJMP WRITE_EEPROM_LOOP2BSET F_ERRIICWRITE_EEPROM_LOOP3:B0BCLR P_CLKIICB0BSET PM_DATIIC ;OUTMOV A,W_DATAMOV DATA_TEMP,ACALL SEND_DATA_ADD ;写⼊的数据B0BCLR P_DATIIC;B0BCLR PM_DATIIC ;IN MODELB0BSET P_CLKIICMOV A,#200MOV TMP2_IIC,AWRITE_EEPROM_LOOP4:B0BTS1 P_DATIICJMP WRITE_EEPROM_LOOP5DECMS TMP2_IICJMP WRITE_EEPROM_LOOP4BSET F_ERRIICWRITE_EEPROM_LOOP5:B0BCLR P_CLKIICB0BSET PM_DATIIC ;OUTB0BSET P_DATIICJMP $+1B0BCLR P_DATIICCALL STOP_CONDITIONCALL STOP_CONDITIONB0BCLR PM_DATIIC ;IN MODEL;---------------;读出⽐较是否与定⼊的⼀致CALL READ_EEPROMMOV A,R_DATACMPRS A,W_DATARETDECMS TMP3_IICJMP WRITE_EEPROM00BSET F_EEPOM_WRET;----------------OUT_DATA_X:CLR DATA_TEMPMOV A,#8HMOV TMP1_IIC,AOUT_LOOP1:B0BCLR PFLAG.2B0BTS0 P_DATIICB0BSET PFLAG.2;=========================== JMP $+1JMP $+1B0BSET P_CLKIICJMP $+1JMP $+1B0BCLR P_CLKIIC;========================== RLCM DATA_TEMPDECMS TMP1_IICJMP OUT_LOOP1RET;----------------SEND_DATA_ADD: ;MOV A,#8HMOV TMP1_IIC,ASEND_LOOP1:RLCM DATA_TEMPB0BCLR P_DATIICB0BTS0 PFLAG.2B0BSET P_DATIIC;=========================== JMP $+1JMP $+1B0BSET P_CLKIICJMP $+1JMP $+1B0BCLR P_CLKIIC;========================== DECMS TMP1_IICJMP SEND_LOOP1RLCM DATA_TEMPRET;---------POSITIVE_EDGE: ;起始信号JMP $+1JMP $+1B0BSET P_CLKIICJMP $+1JMP $+1B0BCLR P_CLKIICRET;----------STAR_CONDITION: ;结束信号B0BSET P_CLKIICB0BSET P_DATIICJMP $+1JMP $+1B0BCLR P_DATIICJMP $+1JMP $+1B0BCLR P_CLKIICRET;------------STOP_CONDITION: ;B0BCLR P_DATIICB0BSET P_CLKIICJMP $+1JMP $+1B0BSET P_DATIICJMP $+1JMP $+1B0BCLR P_CLKIICB0BCLR P_DATIICRET。

松翰C语言编程指导C+Program+Guide

松翰C语言编程指导C+Program+Guide

如何用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 的效率得到了很大的提升,其编译效率逐渐的逼近汇编。

第五部分汇编语言程序开发工具

第五部分汇编语言程序开发工具

第五部分汇编语言程序开发工具汇编语言程序开发工具是一种用于编写和调试汇编语言程序的软件工具。

它提供了一系列功能和功能集,使程序员能够更加高效和准确地编写和测试他们的汇编语言代码。

第五部分汇编语言程序开发工具是这些工具中的一种,它具有特定的特点和优势,适用于特定的开发需求。

从技术角度来看,第五部分汇编语言程序开发工具主要包括以下几个方面的特性。

首先,它提供了一个集成开发环境(IDE),方便程序员在一个统一的界面中进行编辑、编译和调试汇编语言程序。

这样,程序员可以通过拖放文件、快捷键和自动补全等功能更方便地进行开发工作。

第二,第五部分汇编语言程序开发工具通常具有强大的调试功能,能够帮助程序员快速定位和修复程序中的错误。

这些调试功能可能包括断点调试、单步执行、变量监视和内存查看等,使程序员能够深入分析程序的执行过程,找到问题所在并进行修复。

第三,第五部分汇编语言程序开发工具通常与底层硬件和操作系统紧密集成,可以直接访问硬件资源和操作系统接口。

这使得程序员能够更加直接地操作和优化硬件资源,提高程序的性能和效率。

除了这些技术特性外,第五部分汇编语言程序开发工具还有一些其他的优势和应用场景。

例如,在嵌入式系统开发中,汇编语言常常被用于编写底层驱动程序和操作系统内核。

第五部分汇编语言程序开发工具可以帮助程序员更好地理解和控制底层硬件,从而更好地完成这些任务。

此外,在一些对性能要求非常高的场景中,如图形渲染、音视频编码等,汇编语言的优化能力常常能够发挥重要作用。

第五部分汇编语言程序开发工具可以提供一系列的优化功能和指令集,帮助程序员更好地进行性能优化。

综上所述,第五部分汇编语言程序开发工具是一种用于编写和调试汇编语言程序的软件工具,它具有一系列的特性和优势,可以帮助程序员更高效、准确地开发和测试他们的汇编语言代码。

无论是在嵌入式系统开发,还是在对性能要求较高的场景中,第五部分汇编语言程序开发工具都有着重要的应用价值。

松翰单片机 SN8F5702程序例程

松翰单片机 SN8F5702程序例程
//====================PWM1设置======================
//PW1M = _1010_0000b;
//PW1CH = _0001_0000b;
//PW1YH = 0;
//PW1YL = 26;
//PW1DH = 0;
//PW1DL = 7;
//PW1A = 5;
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
}
}
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通道
264 ,//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);

松瀚SN8P2711学习笔记

松瀚SN8P2711学习笔记

松瀚SN8P2711学习笔记一、系统时钟SN8P2711是具有高速时钟和低速时钟的微控制器,高速时钟由外部振荡电路或内置16MHZ高速RC振荡电路(IHRC 16MHZ)提供,外部高速时钟又分为晶振和RC振荡及外部时钟输入。

1、外部高速:晶振一般高速为12M,中速为4M,低速为32K。

RC振荡一般小于10M,电容一般为50P-100P,通过改变R来改变频率。

外部时钟输入作为系统时钟信号,由编译选项HIGH-CLK中的RC选项来选择,外部时钟输入,信号由XIN脚输入,XOUT作为普通IO口。

2、内部高速内部高速16MHZRC振荡器由编译选项IHRC-16M来控制,在高速模式下,指令周期FCPU=FOSC/N, N=1-16,N由FCPU编译选项来选择。

在低速模式下,指令周期FCPU=FOSC/4。

3、内部低速时钟3V单片机内部低速时钟为16KHZ,5V单片机内部低速时钟为32KHZ。

内部低速时钟可作为低速模式的系统时钟,也是看门狗定时器的时钟。

4、OSCM寄存器是一个振荡器控制寄存器,控制着振荡器的状态和系统模式STPHX: 外部高速振荡器控制位0=运行,1=停止,但内部低速RC仍运行。

CLKMD: 系统高低速模式控制位0=普通模式,系统为高速时钟1=低速模式,系统为内部低速时钟CPUM[1:0]: CPU运行模式控制位00:普通模式01:睡眠(省电)模式10:绿色模式11:保留5、系统模式之间的转换:(1)、普通模式转低速模式FCLKMD=1;//设置系统时钟为内部低速时钟FSTPHX=1; // 停止外部高速时钟以省电(2)、低速模式转普通模式若外部高速仍运行,FCLKMD=0; //设置回普通模式即可若外部高速已停止,FSTPHX=0; //先启动外部高速DELAY(20); //再延时20毫秒FCLKMD=0; //设置回普通模式(3)、普通或低速模式进入睡眠(省电)模式FCPUM0=1;FCPUM1=0; //(此句有时可省略)(4)、进入绿色模式并使能TC0的唤醒功能FTC0IEN=0; FTC0ENB; //关定时器0及其中断功能TCOM=0X20; //定时器0选择内部时钟FCPU/64;TC0C=0X74; //TC0初值10毫秒FTC0IRQ=0; //清中断请求FTC0GN=1; //使能唤醒FTC0ENB=1; //开始计数FCPUM0=0;FCPUM1=1; //进入绿色模式6、唤醒睡眠(省电)模式的唤醒是通过外部触发(P0口的电平转换)实现。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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
7.2.3 变量
EQU
语法:
VARIABLE EQU VALUE or BIT
说明:固定变量声明后不能被修改。
Example:
通常,符号“;”和“//”均可表示注释声明,连续的文字说明写在符号“;”或“//”后面。 Example:
; This is an example of demo code. // This is an example of demo code. 另外,使用符号/*….*/可以框住一行或多行注释。 Example:
Example 1:
<STRING> CLRA TEXTEQU <MOV A,#0>
Example 2:
TEXT MACRO CLRALU TEXTEQU CLRA
SONiX TECHNOLOGY CO., LTD
Page70
Example 3: Example 4:
SN8 C Studio User’s Manual
START
;A = 0X35 ;A = 0X6B ;A = 0X71
下面章节将介绍标号,操作助记符,操作数和注释的书写限制和规则。接下来详细介绍 这四部分。
7.1.1 标号
首先,标号必须以字母a~z,@,或下划线为开头; 除了最后一个字符的其他字符可以是a~z,@,下划线或0~9; 标号的最后一个字符必须为冒号“:”; 标号的长度没有限制但不可以重复命名。
此命令必须定义在汇编程序的最前面,且只能定义一次。
Example:
Chip sn8p2708a
Syntax:
ENDP
说明:强制结束程序,且位于此命令后的程序将不会被编译。
Example:
Endp
7.2.2 用户定义标题
Syntax: TITLE
descritpion statment
说明:TITLE后面为标题的说明部分。
SN8 C Studio User’s Manual
第二部分 开发语言和开发工具
7. Assembler
7.1 SN8 汇编语言
一般而言,汇编的指令包含四部分,它们之间用空格或TAB键隔开。如下所示: 标号 操作助记符 操作码 注释
Example:
START:
MOV ADD DAA JMP
A,#0X35 A,#36H
7.1.6 数值表达式
SONiX TECHNOLOGY CO., LTD
Page67
SN8 C Studio User’s Manual
数值的表示方法有十进制、十六进制、二进制几种,但不管哪一种表示方法,第一个数 字必须是0~9。
Example:
255 0xFF 0FFh 11111111b.
;Decimal expression. ;Hexadecimal expression. ;Hexadecimal expression ;Binary Expression
SONiX TECHNOLOGY CO., LTD
Page65
SN8 C Studio User’s Manual
7.1.2 操作数
如果有两个操作数,应该用符号‘,’将它们隔开。
Example: or
MOV MOV
A , #43h A, #’C’
// block the Operand by ‘ ‘
Example : ORG
B0MOV X, #DATA1$H
B0MOV Y, #DATA1$M
B0MOV Z, #DARA1$L
MOVC

0X123456
Data1 DW
7890H
// X = 0X12 // Y = 0X34 // Z = 0X56 // ACC = 0X90,R = 0X78
最后,符号$还可以用来将表的14~17位定义为高位元(注:这一表示方法2系芯片不支 持)。
<123456> S1, 4, 2 S1, 3
VALUE SIZESTR <STRING>
// s2 equivalent to “45” // s3 equivalent to“3456”
SONiX TECHNOLOGY CO., LTD
Page71
SN8 C Studio User’s Manual
7.1.5 芯片保留字
每款SONIX 8_bit 系列MCU母体都拥有自己的系统寄存器,且已经在汇编程序中定义 为芯片的保留字。例如,H/L寄存器不需要声明就可直接在程序中使用,对应位也一样。 如果程序中用到位寄存器,则应在寄存器名前加前缀“F”。例如将“GIE”置为1,正确代 码为“b0bset FGIE”。可以参阅相关的数据手册了解详细的系统寄存器名称和芯片资料。
VALUE VALUE VALUE
SIZESTR SIZESTR SIZESTR
TEXT MACRO % VARIABLE % (ARITHMETIC)
说 明 : 执 行 SIZESTR 命 令 可 以 从 STRING 得 到 字 符 串 的 长 度 。 字 符 串 的 格 式 请 参 考 TEXTEQU。
TEXTEQU Syntax:
STRING STRING STRING STRING
TEXTEQU TEXTEQU TEXTEQU TEXTEQU
<STRING> TEXT MACRO % VARIABLE % (ARITHMETIC)
说明:文本宏能再次被更改,一般用于字符串的替换。符号“%”后的变量或算术表达式 的值将被转换为字符串。Catstr、substr、sizestr和instr可以用来表示以上四种不同的字 符串。
/* this is an example of demo code*/.
7.1.4 系统操作数
系统默认一部分操作数供用户方便使用。但也有一些操作数不被默认,这取决于所选芯 片。确定这些默认操作数是否存在,可以在程序中判断默认常量@??_existas为1或0来检 查系统是否提供这些操作数。另外,可以通过检查@p?_bits设定操作数的有效值来确定 引脚数量。
<=
= less than or equal to
==
= is equal
!=
= is not equal
&
= and
^
= xor
|
= or
&& = logical and
括号 正的 负的 位逻辑反 逻辑非 乘 除 取模(取余) 加 减 左移 右移 大于 小于 大于等于 小于等于 等于 不等于 位逻辑与 位逻辑异或 位逻辑或 逻辑与
说明:执行SUBSTR命令从STRING中抽取一个子字符串。Start为要取的字符的开始位 置(原字符串的第一个字母为位置1)。Length表示要抽取出字符串的长度。如果省略 长度,则一直取到字符串的最后一位。字符串的格式请参考TEXTEQU。
Example:
SIZESTR Syntax:
S1 TEXTEQU S2 SUBSTR S3 SUBSTR
SONiX TECHNOLOGY CO., LTD
Page68
||
= logical or
逻辑或
SN8 C Studio User’s Manual
7.2 伪指令
这里列举了交叉编译器进行编译产生项目代码时的风格样式的伪指令,根据不同的功能 按以下分类介绍:
7.2.1 程序开始和结束
Syntax: CHIP SN8XXXX 说明:选择所用IC型号。用户可以通过菜单[option]->[chip info]了解当前所用的芯片。
Example:
INSTR Syntax:
V1 SIZESTR <123456>
// v1 Equivalent to 6
VALUE VALUE VALUE VALUE
INSTR INSTR INSTR INSTR
START, <STRING>, <SUBSTRING> START, TEXT MACRO, <SUBSTRING> START, % VARIABLE, <SUBSTRING> START, % (ARITHMETIC), <SUBSTRING>
相关文档
最新文档