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; ,后面串口在根据需要对其进行初始化。
华为为什么要做鸿蒙系统 华为早有考虑
HTC Vive VR的展望与未来
当IBM Talent与AI结合,企业将擦出怎样火花?
电销机器人怎么样?
最具人气的10大编程语言是那些
单片机编程中四种常见问题汇总
华为芯片新目标6000万 华为手机市场份额持续提升
英飞凌致力于设定基于科学的目标
为了让魅蓝note5尽快用上flyme6,他们也是拼了老命了
安全光栅如何进行调试
将Web技术与现场总线技术结合实现网络储油罐群远程监控系统的设计
善睐物联:消费级4G路由器的应用场景
使用电路在线维修测试仪之前的电路板处理
在电磁产品的应用中,防水隔菌透气膜有什么作用
赫联电子新增供应商RAF Electronic Hardware
无缝高清矩阵切换器有哪些主要的应用场景?
ADSP-21371 SHARC EZ-KIT Lite E
高压发生器作用
基于模拟输出模块和信号处理的PLC工业系统的设计
服务器数据恢复-RAID5热备盘同步失败的服务器数据恢复案例