单片机编程小问题汇总

分享到:

1、指向code区数组的指针也要加 code 关键字声明。

比如 unsigned char code arr[30]; 数组,要用指针指向它,要把指针也声明成 unsigned charcode*p;

后来使用发现其它很多地方使用是不需要这样声明的,只要 unsigned char *p;就行了,但是清楚地记得那次确实是要加 code 关键字声明才可以的。

2、在51里面,位变量貌似是有限的。

如果要用一个布尔型作为标识变量,为了节省控件可以用 bit 型变量,但是在DRS1000项目中遇到过一次用 bit 型变量出错,改为 unsigned char 型就OK了,那时定义的变量已经很多了,可能是把可以用bit寻址的存储区都用光了吧。

 
3、用机械开关触发INT中断时:

由于机械开关会震动,产生的电压会有毛刺,这些毛刺会多次触发中断。会造成多次触发的因素有两点:

(1 )开关按下时的震动。第一次低电平到来时会进入中断处理程序,之后就算这些震动在中断处理程序执行的过程中产生,即使进入中断处理程序后关掉了总中断,这些毛刺仍然会使中断标志位置位,会在结束中断处理程序结束后再次马上触发中断处理程序。

(2 )开关释放时的震动。在第一次高电平到来时会退出中断处理程序,之后的毛刺会再次进入中断处理程序。

解决办法:

在中断处理程序的最后加一段低电平等待代码,等待低电平结束再延时5ms(为了消除开关释放时毛刺的干扰),5ms延时结束后再清除中断标志位(在中断处理程序执行的过程中可能已经再次触发了中断标志位)。代码如下:

void int0() interrupt 0

{

/*Do something*/

while(rollRA==0);//等待低电平结束

delay5(1);//等待按键释放的毛刺结束

IE0=0; //清除中断标志位,以防再次进入中断

}

4、对于15系列单片机,在使用串口时必须要指定AUXR寄存器的值,否则程序无法正常运行。

这个情况遇到过很多次,15系列单片机只要使用到串口就一定要知名AUXR寄存器的值,不像12系列那样可以把这个寄存器忽略。

在使用15系列单片机时养成了一个习惯:main 函数的第一句让 AUXR=0; ,后面串口在根据需要对其进行初始化。

 

更多Atmel及科技资讯请关注:  
Atmel中文官网:https://www.atmel.com/zh/cn/
Atmel技术论坛:https://atmel.eefocus.com/
Atmel中文博客:https://blog.sina.com.cn/u/2253031744
Atmel新浪微博:https://www.weibo.com/atmelcn

 

继续阅读
Microchip推出两大全新单片机系列

Microchip 8位MCU产品部副总裁Steve Drehobl表示:“新一代Arduino开发板选用ATmega4809器件,不仅加强了两家公司的合作关系,还为Arduino平台带来了CIP和智能模拟的优势”。

这六大问题,还在阻碍AI的进一步发展……

2,人工智能(AI)产业似乎火了,消费者需求巨大,投资者兴趣浓厚。事实上,2017年前5个月投资于AI初创企业的风险投资超过95亿美元,而2014年全年仅为32亿美元。AI的发展有无数令人兴奋的期待,包括医疗、农业和其他技术领域的应用,但AI产业还没有成为高速列车。

MIT新研究:让机器人基于自基本运动能力来自主学习

机器人很擅长做规定好的任务。然而有些时候,将这些信息输入系统要要比让机器人执行任务复杂得多。这也是机器人适合做简单、重复性劳动的原因之一。

人工智能发展中,算法偏见需重视

人们都曾看过电影里机器控制了世界而人类被毁灭的场景。好在这些电影只是娱乐性的,现实世界是不会发生的。然而,一个更应该关注的问题是:算法偏见。

Microchip推出新款megaAVR单片机,结合特有耐辐射性能与低成本开发特性

为空间应用开发耐辐射系统不但需要很长的交期,而且成本非常高,因为系统必须具备极高的可靠性才能在恶劣的环境下长年工作。今天,NewSpace和其他重要的航空航天应用都要求加速开发,降低成本。为满足这些需求,Microchip Technology Inc.(美国微芯科技公司)推出了一种新型单片机(MCU),该器件结合了特有的耐辐射性能以及现有商用(COTS)器件的低成本开发特性。

©2019 Microchip Corporation
facebook google plus twitter linkedin youku weibo rss