关于51内核的N76E003单片机
资料
官方开发板硬件资料下载
官网BSP及例程下载(支持 KEIL 及 IAR)
N76E003_datasheet
疑问
疑问一
我想实现一个管脚中断,然后在用官方给的头文件时发现一个问题:发生管脚中断的端口配置。
其datasheet相关内容如下:
我不知道是我自己考虑错了,还是官方的头文件出现了问题,暂且先在这里记录一下。我觉得这里应该修改为如下定义才更准确:
疑问二
我真的无力吐槽了,今天又TM被这个SB单片机坑了一笔!
从官网下载的例程运行结果根本就是错误的,我是真他妈不知道这种例程怎么好意思往官网上放。
吐槽完了说一下我需要实现的功能:
我想往片上Flash or E2PROM
里存储一些掉电也可以保存的数据,然后我就找到了官方的IAP_Dataflash_EEPROM
,发现例程里有如下代码:
UINT8 datatemp;
UINT16 system16highsite;Write_DATAFLASH_BYTE (0x3802,0x34);
Write_DATAFLASH_BYTE (FLASH_H_LOW,0xaa); // FLASH_H_LOW = 0x4703
Write_DATAFLASH_BYTE (FLASH_H_HIGH,0x66); // FLASH_H_LOW = 0x4704datatemp = Read_APROM_BYTE(0x3802);
system16highsite = ((Read_APROM_BYTE(FLASH_H_HIGH)<<8)+Read_APROM_BYTE(FLASH_H_LOW));
这个代码意图很明显:往指定地址写数据,并且读回,然而。。。读回的数据只有datatemp
是正确的,system16highsite
的值一直是零。。。
然后我将代码修改如下:
Write_DATAFLASH_BYTE (0x3800,0x34);
Write_DATAFLASH_BYTE (0x3801,0x55);
Write_DATAFLASH_BYTE (0x3802,0x56);
Write_DATAFLASH_BYTE (0x3803,0xaa);
Write_DATAFLASH_BYTE (0x3804,0x66);datatemp = Read_APROM_BYTE(0x3800);
printf("datatemp[0x%bx]\n", datatemp);
datatemp = Read_APROM_BYTE(0x3801);
printf("datatemp[0x%bx]\n", datatemp);
datatemp = Read_APROM_BYTE(0x3802);
printf("datatemp[0x%bx]\n", datatemp);
datatemp = Read_APROM_BYTE(0x3803);
printf("datatemp[0x%bx]\n", datatemp);
datatemp = Read_APROM_BYTE(0x3804);
printf("datatemp[0x%bx]\n\n", datatemp);
通过这种方式写入后读回,结果都是正确的。。。那问题就出在地址0x4700
上了,既然这个地址不能用,为何定义这个地址?如果能用,又为何例程结果是错误的?CAO
顺便我的Flash读写测试工程上传一下。
总结
虽然很多很多年都没再接触过51单片机了,但是现在看起来感觉还是比较简单了。
既然已经研究了大半天,就记录一下吧,说不定啥时候又得用上呢。。。
N76E003的管脚中断和外部中断:
管脚中断:可以随意配置任一管脚产生(datasheet说的)中断,但是一个程序中最多配置8个中断;而且所有管脚触发的中断都是通过中断号7
处理的,也就是说这些中断源共用一个中断;
外部中断:指定的管脚才可以配置为外部中断源,从上面的管脚图可以看到,外部中断0 INT0
只能由P30
触发,而外部中断1 INT1
只能由P17
触发。
中断处理函数
// 首先就是关于中断函数,比如下面这个。其实它的函数名怎么取都没有关系,重点是 "interrupt 0",
// 这个"interrupt 0"就指定了这是0号中断触发中断服务函数。
void EXT_INT0(void) interrupt 0
{ cnt_int0++;
}
寄存器配置
// 以下定义了 P00 作为管脚中断触发源,上升沿触发
Enable_INT_Port0; // set P0 as interrupt port
Enable_BIT0_RasingEdge_Trig; // set Px0 as interrupt pin// 那上面的功能到底是怎么实现的呢?
// 可以F12看看其定义:
#define Enable_INT_Port0 PICON &= 0xFC;
#define Enable_BIT2_RasingEdge_Trig PICON|=0x10;PINEN&=0xFB;PIPEN|=0x04// 然后,直接在datasheet中搜索寄存器名,查看每个bit的功能
关于51内核的N76E003单片机相关推荐
- 51内核单片机实现Bootloader跳转到用户程序,要求两个程序都要支持中断
Flash空间规划 本文使用的单片机为笙科的A9129F6,Flash大小为64KB,SRAM大小为8KB. Flash空间规划如下. 起始地址 结束地址 用途 0x0000 0x3fff Bootl ...
- 【CC2530授课笔记】① 点亮一颗LED灯及实现流水灯(51内核单片机)
实验套件介绍 如图所示是我们的CC2530实验套件,从图上可以看出,板子中间有四个LED,分别是:LED3,LED4,LED1,LED2 课堂任务 ①通过编程控制LED3点亮 ②通过编程控制LED3闪 ...
- n76e003引脚图_老司机带你入门新塘N76E003单片机
出品 21ic中国电子网 一路向北lm 网站:bbs.21ic.com 第一个问题,究竟要玩哪一个芯? 今年真是变幻莫测的一年,芯片的真是流水账的价格,一天一个样,翻翻自己的抽屉,一堆的板卡,不知玩弄 ...
- n76e003引脚图_新手如何入门新塘N76E003单片机
本帖最后由 一路向北lm 于 2020-12-22 16:19 编辑 1.gif (4.53 KB, 下载次数: 2) 2020-12-22 11:18 上传 第一个问题,究竟要玩哪一个芯? 今年真是 ...
- 新手如何入门新塘N76E003单片机
第一个问题,究竟要玩哪一个芯? 今年真是变幻莫测的一年,芯片的真是流水账的价格,一天一个样,翻翻自己的抽屉,一堆的板卡,不知玩弄哪一个,一直想玩弄一下新塘的片子,可惜论坛没怎么做过新塘的开发板评测活动 ...
- 通过串口烧录N76E003 单片机(ISP)
一.N76E003烧录模式介绍 Flash存储器支持硬件编程和应用编程(IAP).如果产品在研发阶段或产品需要更新软固件时,硬件编程就显得不太方便,采用在系统编程(ISP)方式,可使这一过程变得方便. ...
- 新塘系列linux_老司机带你入门新塘N76E003单片机
第二个问题,这颗芯开发环境如何搭建? 张三说IAR好用,李四说Keil 好用 pack包多,王五说我就喜欢捣鼓,用VScode有些芯片也可以用----..,开发IDE云里雾里,最好上手还是keil C ...
- [应用方案]如何入门新塘N76E003单片机
第一个问题,究竟要玩哪一个芯? 今年真是变幻莫测的一年,芯片的真是流水账的价格,一天一个样,翻翻自己的抽屉,一堆的板卡,不知玩弄哪一个,一直想玩弄一下新塘的片子,可惜论坛没怎么做过新塘的开发板评测活动 ...
- STM32单片机VCAP电容太小引起内核电压波动导致单片机异常复位
问题:现象1:上位机记录的角度从-90.3°变为0,现象2:有时甚至不回复数据 在线调试发现单片机死机,使用软件RST复位之后查看RCC_CSR寄存器发现并不是程序里的看门狗复位排除是软件看门狗复位引 ...
最新文章
- NodeJS学习之网络操作
- Vue Router路由及路由重定向
- VS2017 Pro未能找到路径“……\bin\roslyn\csc.exe”的解决方案
- java 泛型编程_java 泛型编程简介
- java mb单位转换_字节、kb、mb等单位,是怎样换算的?
- SVG—最简单的SVG动画
- matlab函数grid,Matlab基本函数-grid、box函数
- Linux文件夹的介绍
- Unity日常Bug
- Arduino Mega/Uno制作宏定义键盘(不需刷firmware!!)
- 数据分析——房源分析项目
- 程序员就是这样聊天把女朋友聊没的。。。
- MeeGo开发者(二):MeeGo架构
- 高空作业安全绳穿戴识别检测算法 YOLOv3
- 共享充电宝PCBA方案开发设计
- 数据结构与算法:二叉树专题
- 阿里云服务器不能使用sendmail发送邮件?
- telerik学习记录-RadButton(上)
- Ubuntu基础-终端打开软件
- Android中保存图片到本地功能实现