STC89C52RC单片机额外篇 | 04 - 认识头文件<intrins.h>与_nop_函数

关于intrins.h头文件的介绍 在单片机中应用最多的当然就是移位函数,利用移位函数可以更简便的实现流水灯等效果。 移位函数 移位函数名 左移 _crol_(移位对象,位数) ; 右移 _cror_(移位对象,位数); 函数原型 unsigned char _crol_(unsigned char val,unsigned char n); . unsigned char _cror_(unsigned char val,unsigned char n); 我们用常用这个移位来实现一个流水灯的效果,实现代码如下` 阅读详情

1 <intrins.h>头文件

头文件<intrins.h>在我们51单片机日常开发中经常使用,特别是_nop_()函数,以下是<intrins.h>的内容:

/*--------------------------------------------------------------------------
INTRINS.H

Intrinsic functions for C51.
Copyright (c) 1988-2010 Keil Elektronik GmbH and ARM Germany GmbH
All rights reserved.
--------------------------------------------------------------------------*/

#ifndef __INTRINS_H__
#define __INTRINS_H__

#pragma SAVE

#if defined (__CX2__)
#pragma FUNCTIONS(STATIC)
/* intrinsic functions are reentrant, but need static attribute */
#endif

extern void          _nop_     (void);
extern bit           _testbit_ (bit);
extern unsigned char _cror_    (unsigned char, unsigned char);
extern unsigned int  _iror_    (unsigned int,  unsigned char);
extern unsigned long _lror_    (unsigned long, unsigned char);
extern unsigned char _crol_    (unsigned char, unsigned char);
extern unsigned int  _irol_    (unsigned int,  unsigned char);
extern unsigned long _lrol_    (unsigned long, unsigned char);
extern unsigned char _chkfloat_(float);
#if defined (__CX2__)
extern int           abs       (int);
#endif
#if !defined (__CX2__)
extern void          _push_    (unsigned char _sfr);
extern void          _pop_     (unsigned char _sfr);
#endif

#pragma RESTORE

#endif


从Intrinsic functions for C51.翻译过来看,里面的函数都是C51的内在函数。当然我们是看不了函数的原型,它们都是以接口的形式展现给大家,就像大家在编写C程序调用头文件<stdio.h>的时候一样,我们只能可以看到<stdio.h>有哪些函数可以给我们用,但是看不到这些函数的具体实现,如printf函数。

下面给个表格大家了解各个函数使用:

接口函数作用
_nop_();空操作指令:延时一个机器周期,相当于直接执行NOP指令
_testbit_(bit);_testbit_产生一个JBC 指令,该函数测试一个位,当置位时返回1,否则返回0。如果该位置为1,则将该位复位为0。8051 的JBC 指令即用作此目的。_testbit_只能用于可直接寻址的位;在表达式中使用是不允许的
ret = _cror_(var, n);无符号字符型循环右移函函数:var是需要位移的变量,n是循环右移的位数,ret是移动指定位数后的结果
ret = _iror_(var, n);无符号整数循环右移函函数:var是需要位移的变量,n是循环右移的位数,ret是移动指定位数后的结果
ret = _lror_ (var, n);无符号长整数循环右移函函数:var是需要位移的变量,n是循环右移的位数,ret是移动指定位数后的结果
ret = _crol_ (var, n);无符号字符型循环左移函函数:var是需要位移的变量,n是循环右移的位数,ret是移动指定位数后的结果
ret = _irol_(var, n);无符号整数循环左移函函数:var是需要位移的变量,n是循环右移的位数,ret是移动指定位数后的结果
ret = _lrol_ (var, n);无符号长整数循环左移函函数:var是需要位移的变量,n是循环右移的位数,ret是移动指定位数后的结果

一般我们一般用得比较多的是_nop_、_cror_与_crol_ 函数!下面我讲解一下_nop_函数。

2 _nop_函数

_nop_函数对应51单片机汇编语言中NOP指令,它是在51单片机中用的延时函数,表示执行一条没有什么意义的指令,延时一个指令周期,有的指令周期是两个或两个以上的机械周期,但是_nop_();指令需要的只是一个机械周期也就是12个时钟周期(震荡周期)。

这里有个小知识:

51单片机中,1个机械周期 = 12个时钟周期 = 12 * (1 / f)。(f 为晶振频率)。

如果只用的是12MHZ的晶振,那么 一个机械周期就是1us;也就是说:

_nop_(); 延迟时间为 1us。可以较为精确得控制延迟时间。

NOP指令的作用:

  • 通过NOP指令的填充(NOP指令一个字节),使指令按字对齐,从而减少取指令时的内存访问次数(一般用来内存地址偶数对齐,比如有一条指令,占3字节,这时候使用NOP指令,CPU就可以从第4个字节处读取指令)。
  • 通过NOP指令产生一定的延迟。
  • I/O传输时,也会用一下NOP指令,等待缓冲区清空,总线恢复。
  • 清除由上一个算术逻辑指令设置的标志位。
STC89C52RC单片机额外篇 04 - 认识头文件<intrins 【代码】STC89C52RC单片机额外篇 04 - 认识头文件<intrins。 阅读详情

相关推荐

51单片机综合项目实战:从Proteus仿真到Keil编程的完整指南

单片机作为嵌入式系统的核心,通过GPIO、定时器、中断等基础外设实现对硬件的精准控制。其工作原理基于处理器执行存储在存储器中的指令,驱动外围电路。掌握单片机开发对于理解底层硬件交互、培养系统级思维具有重要价值,广泛应用于智能家居、工业控制等领域。本文以51单片机为例,结合Proteus电路仿真和Keil C51编程,深入讲解如何通过模块化设计实现一个集成实时时钟、温度监测和秒表功能的综合系统。项目中涉及的LCD1602驱动和DS18B20单总线通信是嵌入式开发中的常见技术难点,文章提供了清晰的时序分析和代码

weixin_30888413的博客 407

<intrins.h>头文件,#pragma的作用解释

文件开头包含了版权信息和一些注释。接下来是条件编译的预处理指令,用于根据编译器类型进行功能的定义和属性的设置。然后定义了一系列的函数原型,包括_nop__testbit__cror__iror__lror__crol__irol__lrol__chkfloat_,以及在特定条件下的abs_illop__push__pop_函数。最后,使用#pragma指令进行保存和恢复一些编译器设置。

weixin_51624736的博客 5828

Keil uVision2 C51实战指南:从工程搭建到调试技巧

嵌入式开发中,单片机是硬件控制的核心载体,而C语言则是驱动这些芯片的主要工具。无论8051还是ARM内核,开发者都需要依靠编译器将高级语言翻译成机器可执行的指令,这一过程涉及工程管理、内存分配、代码优化等多个环节。在低成本控制领域,8051架构凭借简单的指令集和成熟的供应链,至今仍被大量应用于家电控制、电动自行车、温控器等场景,而Keil C51编译器已成为该领域事实上的行业标准。它深度优化了8051的内存模型与外设访问,生成的机器码高效可靠,同时其IDE从uVision2到uVision5保持了一致的操作

weixin_30268071的博客 523

_nop_()函数(嵌入式)

嵌入式中我们点亮第一个LED时,_nop_()函数解读

weixin_43463134的博客 7081

单片机C语言项目实战:intrins.h内部函数应用实例

单片机C语言编程是嵌入式系统开发中的核心技能之一。本章将探讨单片机的工作原理、C语言在单片机编程中的关键作用,以及为什么C语言是开发者的首选编程语言。内部函数,又称内建函数,是一类特殊的函数,它们在编译器内部实现,可以直接映射到特定的机器指令,而不需要通过正常的函数调用机制。这意味着内部函数的调用可以省去函数调用的开销,比如参数压栈、返回地址存储等,从而达到更高的执行效率。

weixin_36238982的博客 1541

stc89c52rc系列通用头文件(SDCC环境)

专用指南搭配头文件, Linux 环境下的头文件定义, 编译文件以及转换bin文件等, 详情请关注Linux环境下搭建STC单片机平台的指南。

单片机延时不准?_nop_()与C51延时函数的原理和排错实战

在单片机开发中,延时操作看似简单却极易出错,尤其驱动I2C、DS18B20等时序敏感外设时,一个不准确的延时就会导致通信失败。_nop_()作为Keil C51中对应NOP指令的内建函数,其背后涉及时钟周期、机器周期与指令周期的精细关系。实际工程中,编译器优化、12T/6T/1T内核模式差异以及中断干扰,都会让延时时间严重偏离理论值。理解这些底层原理后,开发者才能正确使用NOP短延时、定时器长延时以及volatile关键字,并结合示波器实测和反汇编核对来定位问题。本文基于实测数据,系统梳理C51延时函数的误

weixin_34195364的博客 382

intrins.h头文件介绍

intrins.h头文件介绍与说明

51单片机开发环境搭建指南:Keil C51与STC-ISP配置详解

嵌入式系统开发通常从微控制器编程开始,其核心在于将高级语言代码转换为机器指令并写入硬件。这一过程依赖于编译器与烧录工具的协同工作,它们构成了开发环境的基础。Keil C51作为经典的集成开发环境,负责C语言代码的编辑、编译与调试,生成可执行的HEX文件。而STC-ISP作为专用的下载工具,则通过串口通信协议将程序烧录至单片机存储器,实现软件与硬件的连接。在环境搭建中,驱动安装、芯片型号匹配及冷启动流程是关键环节,直接影响开发效率与成功率。本文聚焦51单片机开发,详细解析Keil C51的安装、授权配置与工程

chutisun0039的博客 341

通达信股本变迁文件(gbbq)解密方法

近年来A股市场跌宕起伏真特么精彩,本人愚钝,被整爆仓,损失惨重 痛定思痛,认为交易这种对纪律要求极高,且必须完全排除情绪影响的勾当,还是应该交给程序来干 数据哪里来呢?当然是拿来主义。。。问券商的交易软件要呗 到处查资料,得知通达信的权息文件数据齐全,不仅含有除权除息数据,还含有限售解禁、增发、可转债上市等股本变化数据 ——这对于某些对成交量变化敏感的交易模型是非常重要的

不甘碌碌老,结庐铸宝刀 2万+

7系列ZYNQ硬件调试:Vitis无法识别ARM DAP的排查与解决

本文详细分析了Xilinx 7系列ZYNQ芯片在Vitis开发环境中无法识别ARM DAP的常见问题及解决方案。从硬件设计检查(电源系统、时钟电路)、JTAG连接诊断到软件环境排查,提供了全面的调试指南。特别针对ARM DAP初始化失败的情况,给出了实用的排查步骤和预防措施,帮助开发者快速定位和解决类似问题。

weixin_33737134的博客 513

【51单片机系列】单片机开发用到的intrins.h文件

单片机开发中intrins.h文件内容简单介绍

sinat_41752325的博客 1万+

用友U8自定义按钮开发:从基础配置到实战业务集成

本文详细介绍了用友U8自定义按钮开发的完整流程,从基础配置到实战业务集成。通过实际案例演示如何在U8系统中添加和替换功能按钮,包括数据库配置、SQL脚本编写和VB组件开发等关键技术点,帮助企业用户实现业务场景的深度定制。

weixin_29698641的博客 254

单片机中,intrins.h头文件中各函数详解:空指令_nop_(),移位函数_crol_、_cror_

** intrins.h ** 在 C51单片机编程中,我们经常使用到 nop():延时一个机器周期。如果晶振是12M,则延时1 us,该空函数在头文件intrins.h中 头文件 INTRINS.H 中的函数使用很方便 。 内部函数 描述 crol 字符循环左移 cror 字符循环右移 irol 整数循环左移 iror 整数循环右移 lrol 长整数循环左移 lror 长整数循环右移 nop 空操作 8051 NOP 指令 testbit 测试并清零位 相当于8051汇编中的 JBC 指令 函数名:

liuxianfei0810的博客 1万+

物联网技术(AIR780E cat1-4G模块+小程序+腾讯云MQTT)驱动的智能井盖系统设计(连载01)

终端设备采用AIR780E模块作为主控器,电子模块有三轴加速度传感器、可燃气体传感器,AIR780E模块(4G模块)通过MQTT通信协议进行数据打包上传至EMQX服务器,在EMQX服务器中,用户可以自行订阅主题和发布主题,小程序通过MQTT通信协议订阅EMQX服务器的主题,服务器通过接收到硬件发布的数据,转发到微信小程序。

leida_3669的博客 2214

深入解析docx4j:从Word到PDF的高保真转换实战

本文深入解析了如何使用纯Java开源库docx4j实现Word到PDF的高保真转换。针对中文环境,重点讲解了字体映射原理、Linux服务器字体部署方案,并提供了完整的代码示例和配置方法。同时,文章涵盖了表格、图片处理、性能优化及生产环境部署指南,帮助Java开发者构建稳定、可控的文档转换服务。

weixin_29237635的博客 670

内部函数intrins.h应用

根据上述声明,可知该函数的参数是两个无符号字符型变量val和n,并且返回值也是无符号字符型变量。它的功能是将变量val的二进制位循环左移n位。使用“_crol_()”函数时,必须在源程序的开始处使用命令“include”将声明“_crol_()”函数的头文件“intrins.h”包含进来。来实现,_crol_(15, 2)的返回值是0011 1100B=0x3c=3×16+12=60。

公众号:风景邮递Yuan的博客 3504

openssl+SM2开发实例一(含源码)

是中国国家密码管理局(CNCA)颁布的椭圆曲线密码算法标准,属于非对称加密算法。它基于椭圆曲线离散对数问题,提供了安全可靠的数字签名、密钥交换和公钥加密等功能。SM2被设计为适用于各种场景下的密码学应用,包括数字证书、数据加密、数字签名、身份认证等。SM2是一种非对称加密算法,意味着它使用两个密钥:公钥和私钥。公钥用于加密数据和验证签名,而私钥用于解密数据和生成签名。SM2基于椭圆曲线密码学(Elliptic Curve Cryptography,ECC),使用椭圆曲线上的点运算来实现加密和签名操作。

N阶二进制的博客 7986

单片机中_nop_()函数

在单片机中,通常需要延时函数,经常用到_nop_()函数,NOP指令是单片机指令中的空操作,常用于延时子程序,如果要求比较精确的延时,对循环次数作微调,以得到更加精确的较长时间的延时。12MHz晶振的机器周期为1us。在机器周期为1us的情况下,用法为你要延时几秒,就需要你需要延时的微秒数减去4us得到的需要的nop的个数。因为调用函数需要消耗一个指令周期,该指令消耗2个周期(2us),函数执行完毕之后需要返回主函数,需要一个返回指令,该指令消耗2个周期(2us)。

ligreenjian的博客 6647

杰理AC695N系列芯片红外遥控按键使用教程

本文介绍了杰理AC695N芯片红外按键功能的配置和使用方法。主要内容包括:硬件连接说明(红外接收头接线至GPIO口)、软件配置(使能红外功能并设置接收引脚)、按键映射表修改(原始键值到逻辑按键的转换)以及按键扫描参数调整(消抖、长按时间等)。重点展示了三级映射机制,指导如何根据实际遥控器键值修改映射关系,实现不同模式下(蓝牙/音乐/FM)的自定义按键功能。最后提供了调试方法,可通过串口打印查看遥控器原始键值。

qq_42014563的博客 1462

【ESP32接入国产大模型之豆包】

🥳🥳🥳现在,我们在本教程中,您学习了如何使用ESP32接入语言大模型之豆包。🛹🛹🛹从而实现对外部世界进行感知,充分认识这个有机与无机的环境,后期会持续分享esp32跑freertos实用案列🥳🥳🥳科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。🤣🤣🤣如果你有任何问题,可以通过q group(945348278)加入鹏鹏小分队,期待与你思维的碰撞😘😘😘。

vor234的博客 1万+

C51单片机(STC89 C52RC)#笔记1

初识C51单片机#1

2301_79706774的博客 1231

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

关于_nop_()函数简单说明

当使用_nop_()函数(可理解为软件延时)时,必须在开头添加头文件#include<intrins.h> _nop_()函数相当于一个空操作(可以理解为NOP空操作指令),而_nop_()函数的空操作产生的时间与晶振有关: 晶振属性 延长时间 6M 2us 12M 1us 24M 0.5us 比如,STC89Cxx系列的100us延时参考程序(晶振为12M)如下: //100us void Delay100us() //@.

唐攀的博客 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C语言中调用nop();解决办法

keil学习

zongzi的博客 3701

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: 模拟电路实验 06 - | 测量放大器的设计
下一篇: 信号与系统实验 03 - | 离散系统的Simulink仿真
嵌入式逍遥
嵌入式逍遥 领域专家: 嵌入式与硬件开发技术领域 领域专家: 嵌入式与硬件开发技术领域
博客等级 码龄9年 7万+粉丝 237原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式逍遥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值