购物车0种商品
IC邮购网-IC电子元件采购商城
单片机多任务-DS18B20
(2011/10/23 9:08:00)
近来感觉自己单片机方面学得太浅了,尤其在多个任务的时候,系统实时性低,响应速度慢。看了网上关于这方面的书,觉得自己思路不是很清晰,望前辈点拨

网友评论:有这样的想法很不错,然后去网上找相关资料先自己琢磨一下,然后在碰到某一方面的问题再去解决。

网友评论:在LED显示屏过程中的时候,需要刷新速度达到100HZ,对于51单片机来说,huangqi412说的方法实现还是有一定的差距的

网友评论:在读温度和读时间的过程中,屏会出现比较抖动。

网友评论:不错。。 学习了

网友评论:

很简单的事:一共才2个任务:

任务1、DS18B20邮购DS18B20
任务2、DS1302邮购DS1302

RTOS节拍设定为 1 / 16秒,每节拍中断ISR内刷新显示屏;没个抖动的。

2个任务代码LZ你已经写好了,独立出来,搭个积木就行了。

网友评论:好的编程思想只能改善你的程序运行效率,再好的思想也不能让CPU变快,当软件满足不了需求,只能用硬件来弥补了。

网友评论:用硬件??换mcu吗?

网友评论:18B20只有一根信号线,对读写时序要求比较严格,如果读到一半跑去中断里刷屏可能会读失败,所以网上的18B20例程都要求读的时候关中断,你可以测试一下,在刷屏中断里改写完数据马上出来,中断里不要做任何延时,如果这样都读失败,只能换单片机或者超频了。

网友评论:《MSP430系列单片机系统工程设计与实践 》《时间触发嵌入式》

网友评论:看来我真的得换mcu了

网友评论:33楼真是误导LZ。35楼即使换了飞快的MCU,33楼的问题还是存在,——18B20的读写时序是外设特征时间,与MCU速率无关!

一个18B20读写时间(不是转换时间)需要50ms(或者1/16 秒)或者100ms (丢失一次显示刷新,不至于闪烁吧)吗?

如果这个时间必须是原子性的,必须严格时序到100us 误差之内(可能么?又是需要50ms慢速等待,又是需要100us精度。)那就只好用2个CPU 啦。

书上现成的例子,没那么复杂。



网友评论:楼上还自称前辈, 懂不懂技术啊?
关闭中断是为了不干扰 18B20 读写, 与 100ms 有什么关系? 这样的系统, 而且还是 8051, 还推荐什么 rtos, 到底做过技术没有?

7 楼已经说了: '状态机','MCU软件设计','事件驱动', 这才是技术要点。 使用定时中断, 中断里去做各种操作, 用状态机方式划分分时复用的操作状态。 记住“分时“ 二字!

网友评论:

哈,前辈与c+++年龄相当,是机械专业的。所以不可能对MCU有多么深入的研究。只能利用工具进行控制器开发。

RTOS是一种工具,是给菜鸟用的,菜鸟借助RTOS,就能完成高手相当的作品(系统)。

正如一台高级数码相机,咱前辈老人拿在手里是“傻瓜”相机,但是拍出照片来胜似专业摄影师。——因为相机里面有一个高级OS帮我。

再如:现在市场上有电脑克隆出来的世界名画,经专家甚至借助机器扫描鉴定,无法辨出真伪。——像我们这样没有天才细胞的菜鸟,是去学电脑克隆软件操作,还是学绘画技术用画笔模拟克隆毕加索?!

前辈和LZ属于菜鸟前者,知道利用天才大师做的先进工具,最终2天时间就能完成克隆毕加索大师级作品;而37楼水平虽高,利用自己一辈子磨练的8级工匠手工技术,一会儿学吴冠中,一会儿又改学毕加索,画了半辈子,还是不伦不类。——英雄一生,壮志未酬,半辈子过去,已经不可能再有所发展,被信息时代淘汰了。

状态机、事件驱动,这都什么年代的技术?说80年代不算早吧。——早就都包含在RTOS设计思想里了。现在还有人学?新华书店里这样书都不好找啦,满眼都是嵌入式RTOS。

哈,咱也敬佩37楼,80年代的精英;不过比较起来,现代技术:前辈我是利用工具进行设计,37楼是自己制造工具,然后自己设计。显而易见,当然c+++水平高,他有完全的资格说“这论坛上能让我正眼相看的人还没出现……”;可惜最后,我们都站到了巨人的肩膀上,而那些从不肯向别人学习的人,还在巨人的脚下制造工具……。
一个人一辈子只有100年,再有才能也完不成巨人的一只脚。
这就是差别——眼光。



网友评论:楼上刘钱贝好像是那个被称作论坛败类的wxj5952的马甲吧? 想单挑人家 highgear, 结果逃之夭夭了, 是你吧?
就你那点水平, 还巨人肩膀, 脸皮真厚。

网友评论:

C+++看不懂中文?38楼咱刘某人今年54岁,是一个机械专业的真正的单片机超级菜鸟,这句话说了800遍了,咱承认自己愿意跪拜这论坛上任何人为老师,论水平是根本谈不上啦。C+++还在这娘们似地唠叨自己水平如何比俺老刘高?

看起来,C+++这种highgear的马甲之类的水平也就敢和我老刘这样机械专业的超级菜鸟相提并论,并以此为快啦?——“哼!就这水平,还敢和咱 highgear比?咱一个‘授之于渔’教材贴就够你喝一壶的。”——啊?俺刘前辈水平论坛第一差,咱 highgear 大师怎么说也是老二呀。就那么喜欢和论坛第一差比较谁的水平高?

这种冷漠老师笔下的精神病人,被1952一个帖子赶出论坛,3年忧郁成心病了。看着谁都像1952,都赶着追杀。典型的精神病状。结果如今连个wxj 的名字都写不好了,更象是病入膏肓了。早就建议你看心理医生,可是任何精神病人都不会承认自己有病,就像醉鬼总是“我没醉,我还能喝……”一样。
所长如今还是爱和小辈水平比较——总喜欢“授人与渔”先把自己放在大师的位置到这边来教育菜鸟以满足精神需要?“没有100贴我就不开讲……”——大师犯什么毛病呢,到底想不想讲。那边自己开的帖子100多贴了,怎么还不开讲,又跑这边菜鸟群里混来了?

老刘今天选你为菜鸟帮主,以后就再也不用担心和手下哪个菜鸟比较谁的水平高啦?



网友评论:哈哈,老刘
不得不说,我同意你的思想和眼光
但你可能没想想,使用工具和制造工具其实是两个不太相关的阶层
如果都像你这么想和做,那没人去做底层开发了
就像你很会用电脑,但从不知怎么装系统甚至不会组装电脑,
哪天你电脑坏了,你老婆给你买了台新的回家,
在没有别人帮助前,打死你也不会装起来,你电脑玩得再好,
你也只能干瞪眼,顶多把电源线接起来跳跳绳,练练身子骨

你的想法没有错,但人家在这里讨论的是制造工具,你却劝大家去使用工具,跑题了
我要是猜得没错的话,其实你不是不想学怎么制造工具,而你已经没时间了,54了,还能蹦几年?

网友评论:

41楼还是没理解眼光:咱老刘学用RTOS花了2个多月时间。如今比单位上那些自控专业学单片机的优势多了:“物以稀为贵”;就咱老刘一个人会。等你们高手底层工具开发?20年都等过去了,猴年的事。国家都撤资啦。还等?还吹,——开发底层工具?会用就了不起了。知道WindowsAPI 有多少服务例程可以调用?几千个?还是上万个……这还真得问问所长。你来开发底层工具?你开发一个 51_RTOS_ API我试用看看。

还请问41楼,中国20年,哪位做出了一个可以像uC/OS等等那样有广泛影响的RTOS ?您手里用的是不是德国人的keil IDE ?还是你自己做的、可以推广使用的什么工具?41楼这么雄心——制造工具,请问你制造过那些可供咱菜鸟使用的工具,也许您一生有规划,立志做出咱中国的51上能用的RTOS(虽然有国人已经做过,难用,不能推广。)还没做出来的事,先别忽悠。

2、电脑?咱家里的3台电脑2台是咱老刘自己DIY的,(2台笔记本不会装,实话实说,买的二手)——连小学生都知道怎么组装电脑;别太小看咱菜鸟。
但是老刘说的眼光:这么大中国,有没有一台自己品牌的,从里到外全部自己生产的电脑?!这么信息匮乏的人,以为中国芯片技术很先进?还真的有自己的N 核处理器?STC算中国货?联想PC离了外国的IC芯片,什么也做不出来。

很先进怎么钓鱼岛上日本就敢绑架中国船长?欺负你他有的短距离有翼机你没有啊,你用直升机和日本对阵?——还是别在这充老大的好。

哈哈,老刘是学习使用芯片的总工,电脑硬盘坏了,换一个装上就行,开玩笑,这么大中国有自己品牌的硬盘吗?guomz 该不会是研究如何制造硬盘或者芯片之类的高级人才吧(比喻,中国20年没有自己的OS,就指望41楼了。)。那可真了不起,中国的希望就寄托在你身上了。

底层开发?OS早把底层硬件隐藏管理了。还等你底层开发?你不会用OS是你自己的问题,和时代的发展没有关系。和别人学习用OS的人也没有关系,你愿意自己底层开发,也是你个人意愿,和LZ或者老刘或者别人玩RTOS没有关系。“最使人厌恶的2种人之一,就是总把自己的意愿强加于人……”这不是我说的,是书上写的……

这么了不起的工作的人,不可能在这浪费时间吧。 想了个组装电脑的例子,还牛头不对马嘴,小孩子玩的技术,正栽在老刘的强项上。知道中关村什么叫芯片级维修?也不过是换芯片而已,你以为谁会修芯片呢(底层高手)。——没到奔3 ?老刘早就功成名退,隐居山水之间,自由自在了,41楼不是每天还要朝九晚五地蹦跶,给老板卖命?

送你一篇文章,一个人最大的幸福或者成功是什么?





网友评论:21IC上一砖头能砸到三位大师,俺这等无名小辈只会画鸡蛋~

网友评论:ocon给正在南宁受苦受难的兄弟们指点一下啊……

网友评论:我借刘总的ID发帖,感慨而已:

41楼举这个例子太差了,我从不学修电脑,有那时间学些有益于自我目标的内容还来不及呢。一个人一生只要做好一件事就不得了,——这是刘总给我们讲的道理。

我家电脑出故障我不好意思叫刘总,刘总的时间是什么价值,我们心里清楚。楼下就有电脑维修部,一个电话就上门来了,付10元上门费。零件费用另算,全市有一个统一标准配件价格表,年轻大学生老板从不在服务上赚黑钱。
如今,好多大学毕业生找不到工作,都是凭自己本事开业;我们这一片,开得最多的就是电脑维修部,配件商店什么的,老板都是刚毕业的大学生,快把中关村搬来了。都是同龄人,我自己有工作,我愿意借机会给他们钱,而且不愿显得“抠门”。 刘总说了:“你难道会为了省10块钱,而去花时间学习修理电脑?—— 一年甚至几年都不会出故障的东西,那你是不是还想为了自己家省钱去学习修理电冰箱,电视机,洗衣机?你穷呀你!”
所以,什么样的人才能站到巨人的肩膀上?41楼,你一生什么都会,但是你会的东西很多人都会,你不愿意利用别人已经研究过的东西来节约时间,不愿意花钱买时间,愿意自己花时间重新研究,自己做省钱?——大多数人就是这么把生命浪费了吧。

有一个故事,其实谁都知道:但是谁都做不到,做到了就是“必成大器”之人。我现在就做得到了。当然是受刘总影响。——别骂我奴性。“所谓师傅,就是在我迷惑的路途中,能够点起一盏。”高中老师对我的影响也是一样。父母做不到的。

一个人想在墙上挂一幅画,先要钉一个木楔子,找来了木材,要做成楔子,需要有工具,于是去借凿子、锯子,凿子太慢,又去找砂轮磨……,等什么工具都准备好了,木头楔子也做好了,2星期过去了。结果发现墙不是砖结构,是钢筋水泥的,木楔子根本打不进去;打孔机可不好借,怎么办……。几个星期过去,“我要干什么来着?”——早把最初目标忘了。
大多数人生不过如此吧。

其实这件事很简单:打个电话给服务公司,马上来人帮你打孔,支付服务费20元而已,半小时连木楔子都帮你钉好了。自己一天工资200,舍不得给别人专业服务公司20元?什么事都学来自己做?看着别人失业是吗?那么人一生除了消耗几吨粮食、资源之外,还干了些什么?这就是41楼和眼光之间的差别。一个人为了糊口去做这个,学那个,你什么都会,结果都是为了老板,为了别人的意愿,---自己的自由或者人生目标在哪里?
—— 什么人能够站到巨人的肩膀上,有个朋友的格言很简单:站得高,看得远。——如何能站得高,这个朋友领悟到了。不是说说那么简单的。

有人恼羞成怒不高兴了,要跳起来犯病骂人了。没关系,老师早就教过我了:甘于卑下,你必成大器。

别连带我朋友、老师一块骂就行了。

网友评论:突然心血来潮翻了下旧贴,大家共赏

网友评论:系统来个tick,其他的等待都用多少个tick来实现。

网友评论:楼上姓刘的是不是有病啊? 一个54岁的人怎么跟个愤青似的, 像个老娘们一样喋喋不休。别把c+++扯到你和highgear的恩怨里, 有病啊你!
挂一幅画还要打个电话给服务公司帮你, 还必成大器, 有这样成大器的吗? 这就是你所谓的站到巨人的肩膀上?

网友评论:好像他们都该 多核心的CPU了吧。还多线程的吧?

我们用的 MCU/DSP 何时 能 普及 两核心、四核心的呢?

否则,现在或许可以搞多个MCU/DSP协同工作的方案了。


而且。。。

网友评论:一幅画挂了几个星期没挂起来, 最后让服务公司帮忙, 我笑喷了。

8051的堆栈太小, 只支持到256, 如果把任务堆栈放到内部ram里, 会挤占任务的ram, 放到外部ram里, 又失去了push pop指令的性能, 更恼火的是8051的movx效率低下, 用外部ram任务转换耗时可以达到毫秒级。8051上玩玩os可以, lz的情况使用os还不如不用。

网友评论:呵呵正所谓你不过桥不要难住别人过桥啊,MCU中大部分任务是平等的,所以不要出现霸道者就好了。一个个轮流来,好比大家排队吃饭,要讲究次序,但是如果别人个子大,硬要插队,你也没有办法,这就是优先级高的优势。
mcu编程想都可以用日常生活来诠释

网友评论:1- wire 总线虽然规定了每个比特的严格时序,但并未规定两个比特的时间(只规定1us以上),可以无限长,可以将每个比特开始到结束之间的代码划为临界代码,关中断时间缩为120us 左右

网友评论:楼上的方法很有价值。

网友评论:结贴后发现大家这么热心,我真感动,但问题依旧,我正努力搞定它

网友评论:用定时中断来处理就是多任务了,很实时。

网友评论:我用了定时中断,每5ms就发一次数据,然后1秒中刷一次屏,1.5s采时间,我感觉这屏显示的效果不太好。

网友评论:定时中断50ms 刷屏才不会闪烁。
忘了,好像书上说LED是5ms刷屏。我再看看。也同时请教LZ。

网友评论:淡定。

网友评论:刘公这么大岁数了怎么还这么大火气? 要淡定, 淡定。45楼冷漠老弟的那个巨人肩膀的例子实在是太......., 完全成了笑话了。

LED闪烁是因动态显示造成, 所以需要50ms 以下刷屏周期, 5ms 估计是多个led 动态显示中一个 LED 的点亮时间。 静态led屏幕不需要快速刷屏, 看样子楼主用的是静态显示。

网友评论:一篇帖子引发的口水战

网友评论:试试1ms

网友评论:有意思

网友评论:

支持59楼highgear帮主的说法;不过老帮主修炼这么多年,还是没有巨人讲的清楚具体。

巨人的书上写得一清二楚,菜鸟学生只用了一天就站到了巨人的肩膀上,实在不用自己苦苦修炼半辈子还概念模糊讲不清楚:
我们上小学时就知道,电影原理是以每秒24帧影像刷新频率;因此根据人类眼睛的响应特性,50HZ~20HZ(20ms~50ms)的多路LED模块刷新频率可以无闪烁地工作。如果有N个LED模块,则每个LED将被激活1 / N时间,即:

每个LED应被点亮 T = 1/N ( 20ms ~ 50 ms )

所以,所谓 5ms 的点亮时间不过是具体指系统中只有4个LED模块需要刷新(N=4)而已。如果系统中超过8个LED模块,5ms点亮时间就要担心闪烁了。——LED个数N越少,显示越亮越稳定;N越多,亮度越暗。如若同样的N数,希望亮度增大,那必然要使点亮时间增大,扫描频率降低,越接近闪烁频率。 所以系统中动态扫描LED个数一般不会太多, 除非使用专用LED扫描模块。(还与LED亮度特性有关,例如选高亮度LED。)

每个LED点亮时间根据上面公式和显示效果调整:
1、如果LED闪烁,说明延迟(点亮一个LED)时间过长或者扫描频率不够快(低于20HZ);
2、如果亮度很低,是扫描过快(超过50HZ);
3、如果感觉有重影,是中间切换过程没处理好;应该是:先关闭显示,然后送数据,然后再开显示。
4、如果亮度不均匀,是因为每个LED点亮的时间片不一样。

下面是一个实际应用的3个LED动态扫描例子。N=3,得到刷新频率6ms;因此设定时间中断节拍为6ms。



网友评论:

sbit led1=P2^1; //定义第一只数码管的控制线
sbit led2=P2^0; //定义第二只数码管的控制线
sbit led3=P2^2; //定义第三只数码管的控制线
sbit K0=P3^2;
#define dig1 led1=0;led2=1;led3=1; //只点亮第一只数码管
#define dig2 led1=1;led2=0;led3=1;//只点亮第二只数码管
#define dig3 led1=1;led2=1;led3=0;//只点亮第三只数码管
#define show P0//定义P0口为所显示段码的控制
uchar number[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};//数码0~9
uchar one; //个位
uchar ten; //十位
uchar hundred;//百位
void delay_ms(unsigned int time) //延时1毫秒程序,n是形式参数
{
unsigned int i,j;
for(i=time;i>0;i--)//i不断减1,一直到i>0条件不成立为止
for(j=112;j>0;j--)//j不断减1,一直到j>0条件不成立为止
{;}
}
void T0_init(void)
{
TMOD=0x01;//选择工作方式1
TL0=0x66; //每6ms中断一次
TH0=0xea;
TF0=0; //中断标志位清零
ET0=1; //允许定时器0中断
EA=1; //允许总中断
TR0=1; //启动定时器
}
void main(void)
{
uchar i,j,k;
T0_init(); //定时器0初始化
i=0; //控制个位数码
j=0; //控制十位数码
k=0; //控制百位数码
one=number[0]; //上电时三位数码管都显示为000
ten=number[0];
hundred=number[0];
while(1)
{
if(K0==0)//判断是否有按键被下
{
delay_ms(20);//延时消抖
if(K0==0)//确认有按键被下
{
while(K0==0);//等待按下松开
i++;//个位递增
one=number

网友评论:呵呵,这样看来,是前辈误解了,我说的是一个80*16的一个LED屏点阵,你理解成数码管了。

网友评论:刘前辈?有点意思啊~怎么看都不像54岁的人啊~跟我年纪差不多吧~我刚毕业的~

网友评论:
我写的是我自己的实验板实验程序,还是卖家提供的现成的对应实验板程序,板上只有3个LED,所以按照原理公式取6ms或者7ms.——原理性程序而已。

LED点阵屏,我的概念是市场上有卖现成的,专业公司做的,是智能的嵌入式产品,(以前看朋友用89C51做过,不是很简单)。RS232对外接口,串行送入显示数据、位置、固定、移动……等参数,自动实现。例如公交车上的LED点阵屏。
朋友本来规划自己成立公司专业做LED点阵显示屏,陪他参加了2次竞标,才知道别人做得比他好多了。——结果2年白干了,除了积累了经验。

所以LED点阵屏应该是系统中一个RS232智能外设,整个系统是一个单片机主从通信系统。




网友评论:回66楼liuyu: 详见45楼帖子,我也刚毕业,给刘老板打工而已。
如今工作不好找,公司招一名单片机开发,一下收到十几份简历,还得感激刘老板招收我。否则可能现在还在人才市场晃悠呢。

网友评论:嗯,我还是能看得出来,你的水平还有很大的提高空间的

网友评论:
回66楼liuyu: 详见45楼帖子,我也刚毕业,给刘老板打工而已。
如今工作不好找,公司招一名单片机开发,一下收到十几份简历,还得感激刘老板招收我。否则可能现在还在人才市场晃悠呢。 ...
刘前辈 发表于 2010-10-19 19:34
现在这么感恩图报的人真是很少了啊

网友评论:

同感,现在的人都是互相算计;像我长辈那样一生没讲过一句假话的人,已经没有了。
那么知道滴水之恩,涌泉相报的人,可能也成稀缺资源了。我在其中。

看我的签名。



网友评论:只能说明现在的教材以及单片机书籍,

实在是不负责任,

充满了:
DELAY(N);//延时N ms

网友评论:单片机软件分时的本质是:

任务拆分,

任务分段处理,

别没事还站着茅坑不拉屎.

仅此而已

网友评论:看着LZ的标题就觉得好笑,

还思想????

这是自发行为,

哪里谈的着思想?

网友评论:至于吗,不过是个简单的TMR应用,至于扯到什么系统多任务上去吗,都是让满天的UCOS,LINUX给整的

网友评论:看来UCOS,LINUX害我不浅啊

网友评论:忒高瞻远瞩了也不行啊

网友评论:是啊,脚踏实地慢慢来是对的

浏览:(869)| 评论( 0 )
博文评论

  • 昵 称:
  • 内 容:10~250个字符
  • 验证码: 验证码看不清楚?请点击刷新验证码
  •                      
  • 博文分类

    热点博文

    最新博文

    最新评论

    IC电子元件查询
    IC邮购网电子元件品质保障