关于51内核的N76E003单片机

资料

  1. 官方开发板硬件资料下载
    在这里插入图片描述

  2. 官网BSP及例程下载(支持 KEIL 及 IAR)
    在这里插入图片描述

  3. 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 = 0x4704

datatemp = 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的功能
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值