3054|1

280

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

1小时c语言入门[4] [复制链接]

(八)//以上的文字写于2005年5月,由于时间关系,一直未能将此完成,最近闲着无聊又接着写了些文字,以下写于2006年6月5日!
    在这里我想对上面一点,作个简单的说明,如果你是刚学单片机,那么你写的代码是VERY GOOD的,但是如果把上面的代码应用于产品的话,那么我可以告诉你,上面所写的按键识别代码全部是垃圾代码,^_^,这下傻了吧,呵呵。为什么?我的按键不是可以正常工作吗?
    请看这里:
if(P1_0 == 0)
{
Delay(10);//问题就在这里,你让CPU在这里空转?
    if(P1_0 == 0)
{
//...add your code here.
}
}
进入第1个if判断语句后,就进入了Delay(10);再看Delay函数,完全让CPU执行(;空语句),所以在做大的产品或者代码时,这个是非常耗费单片机内部资源的。有什么办法吗?呵呵,那是肯定的。
    解决方法大致有如下2种:
1.将延时函数放在中断中,在中断里查询延时的标志位。/*不仅仅用于键盘识别,亦可以用于其他的延时代码,见EX1*/
2.直接在中断中查询按键的标志位.//见EX2。
     
EX1:
unsigned char Delaytime;

void Delay(unsigned char Delaytime)//
{
while(Delaytime !=0 );//等在这里,直到Delaytime为0。
}

void Timer0_interrupt(void) interrupt 1 using 2
{
if(Delaytime != )
Delaytime--;

//...add your other code here
}

Delay函数具体延时多长时间,就要看你设定的T0定时器中断和Delaytime的乘积,比如你的定时器中断为50MS,Delaytime为20的话,那么50MS*20=1S。

EX2:
#define Press_key = P2 ^ 7;//定义按键的I/O

void P_key(void)
{
char new_value,old_value;

new_value = Press_key;

if(new_value && !old_value)//识别按键。
{
Turn_On_LEd( );
//...add your other code here.
}
old_value = new_value;
}

void Timer0_interrupt(void) interrupt 1 using 2
{
P_key();

// ...add your other code
}

当然在实际过程当中,并不是如此简单简洁的,还希望大家能够举一反三哦... ^_^。


(九)

写了这么多了,大家也看了这么多了,感觉怎么样?大家也觉得不难吧。其实51也就那么简单,真的很希望大家看完这篇文字以后,很自信的说,51单片机也已经入门。这是对我写怎么多文字最好的回答。时隔13个月之久再来继续写这些东西,没有以前的激_情和热情,所以就草草了事结尾,希望大家不要在背地里骂我哦,^_^。当然以上讲的只是最简单的一些东西,单片机的功能非常之强大,只要你能想得到,就一定可以用单片机来实现的。
当然单片机和外部其他的芯片还有很多,比如数字温度传感器DS18B20,实时时钟芯片DS1302,还有比如访问AT24CXX的EEPROM存储器等,更多的电路,还要靠大家在平时的学习过程当中,慢慢掌握。
此帖出自单片机论坛

最新回复

这个也要顶,还是沙发……  详情 回复 发表于 2010-3-29 00:00
点赞 关注
 

回复
举报

75

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
这个也要顶,还是沙发……
此帖出自单片机论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表