fan_xj
发表于 2014-4-24 13:44
谢谢分享
igoonline
发表于 2014-4-24 19:25
MARK
电子宜宾
发表于 2014-4-24 23:31
确实是个哥,不错哈 顶你
jianhong_wu
发表于 2014-4-25 00:06
tanyuxin 发表于 2014-4-23 11:25 static/image/common/back.gif
坚鸿哥:你简直就是我们这些懂一点硬件,但是苦于在软件那方面难以入门,只是停留在让灯亮灭水平的人的偶像 ...
"不要怕误导我们,我们不怕误导,怕的是没有老师指导。"有你这句话,我备受鼓舞,知己呀。
jianhong_wu
发表于 2014-4-25 00:08
woairgzn 发表于 2014-4-23 22:01 static/image/common/back.gif
好,好。高手就别喷啦,可以绕道。咱刚入门的新手喜欢这样的。
感谢感谢。不单单是新手,其实很多老手也喜欢。
jianhong_wu
发表于 2014-4-25 00:11
tgz_58 发表于 2014-4-23 13:56 static/image/common/back.gif
新来的菜鸟,“ucKeyLock1=0; //按键触发后自锁的变量标志”。
问为何在“else if(ucKeyLock1==0)//有按键 ...
其实热心网友“abbccc308”已经回复你了。要明白它的意思,首先你要明白C语言语法中
if(条件)
{}
else(条件)
{}
它们是一个组合,不能拆开来看。它们二者只选其一。
jianhong_wu
发表于 2014-4-25 10:45
本帖最后由 jianhong_wu 于 2014-4-26 10:18 编辑
第四十三节:通过串口用计数延时方式发送一串数据。
开场白:
上一节讲了通过串口用delay延时方式发送一串数据,这种方式要求发送一串数据的时候一气呵成,期间不能执行其它任务,由于delay(400)这个时间还不算很长,所以可以应用在很多简单任务的系统中。但是在某些任务量很多的系统中,实时运行的主任务不允许被长时间和经常性地中断,这个时候就需要用计数延时来替代delay延时。本节要教会大家两个知识点:
第一个:用计数延时方式发送一串数据的程序框架。
第二个:环形消息队列的程序框架。
具体内容,请看源代码讲解。
(1)硬件平台:
基于朱兆祺51单片机学习板。
(2)实现功能:
波特率是:9600.
用朱兆祺51单片机学习板中的S1,S5,S9,S13作为独立按键。
按一次按键S1,发送EB 00 55 01 00 00 00 00 41
按一次按键S5,发送EB 00 55 02 00 00 00 00 42
按一次按键S9,发送EB 00 55 03 00 00 00 00 43
按一次按键S13,发送EB 00 55 04 00 00 00 00 44
(3)源代码讲解如下:
总结陈词:
前面几个章节中,每个章节要么独立地讲解串口收数据,要么独立地讲解发数据,实际上在大部分的项目中,串口都需要“一收一应答”的握手协议,上位机作为主机,单片机作为从机,主机先发一串数据,从机收到数据后进行校验判断,如果校验正确则返回正确应答指令,如果校验错误则返回错误应答指令,主机收到应答指令后,如果发现是正确应答指令则继续发送其它的新数据,如果发现是错误应答指令,或者超时没有接收到任何应答指令,则继续重发,如果连续重发三次都是错误应答或者无应答,主机就进行报错处理。读者只要把我的串口收发程序结合起来,就很容易实现这样的功能,我就不再详细讲解了。从下一节开始我讲解单片机掉电后数据保存的内容,欲知详情,请听下回分解-----利用AT24C02进行掉电后的数据保存。
(未完待续,下节更精彩,不要走开哦)
yk910127
发表于 2014-4-25 20:46
很期待 ,一直关注
mrjackyu
发表于 2014-4-26 17:39
很实在!
鸿哥,请问一下,我学习的一个项目,用51单片机P2^6口0/1占空比驱动三极管再驱动mosfet,使灯可按开关调节亮度,现在有一个问题,启动的时候灯会猛亮一下,小于0.1秒;我估计是P2^6口上电的时候输出是1,到程序开始把它写0有0.0004S的时间,造成mosfet导通状态,请问如何写能在上电的时候给P2^6写个0,或者其他办法解决这个问题?谢谢
我把程序精简成这样还是会有闪一下~,证明是上电那一下造成的吧!
#include<reg51.h>
sbit driver=P2^6;
/***************************/
void main()
{
init();
}
/***************************/
void init()
{
driver=0;
}
/***************************/
czq624589971
发表于 2014-4-26 19:18
mark,继续学习中
jianhong_wu
发表于 2014-4-26 19:29
本帖最后由 jianhong_wu 于 2014-4-26 19:40 编辑
mrjackyu 发表于 2014-4-26 17:39 static/image/common/back.gif
很实在!
鸿哥,请问一下,我学习的一个项目,用51单片机P2^6口0/1占空比驱动三极管再驱动mosfet,使灯可按 ...
第一种方法:
软件初始化里:driver=0;
硬件上在电阻R3的左端加一个5.1K的下拉电阻。
如果这种方法还不行,请试我第二种方法。
第二种方法:
软件初始化里:driver=1;
硬件上在电阻R3的左端另外多增加两个5.1K的电阻和一个PNP三极管,电路图如下:
mrjackyu
发表于 2014-4-26 22:16
jianhong_wu 发表于 2014-4-26 19:29 static/image/common/back.gif
第一种方法:
软件初始化里:driver=0;
硬件上在电阻R3的左端加一个5.1K的下拉电阻。
第一方法不行;
第二个方式实际是,原来高电平触发,改成低电平触发,这个电路相当于一个取反,可行;
我也想到了一个,R3左端接VCC,Q2 E极接弹片机,实现低电平有效;程序改成低电平有效;
谢谢
jianhong_wu
发表于 2014-4-26 22:36
mrjackyu 发表于 2014-4-26 22:16 static/image/common/back.gif
第一方法不行;
第二个方式实际是,原来高电平触发,改成低电平触发,这个电路相当于一个取反,可行;
我 ...
没错,你的方法也行,而且电路更加简单。我两年前曾经用你的方法做串口通讯的5V与3.3V的电平兼容转换,效果很好。
mrjackyu
发表于 2014-4-27 00:48
jianhong_wu 发表于 2014-4-26 22:36 static/image/common/back.gif
没错,你的方法也行,而且电路更加简单。我两年前曾经用你的方法做串口通讯的5V与3.3V的电平兼容转换,效 ...
:handshake
cjseng
发表于 2014-4-27 00:52
jianhong_wu 发表于 2014-4-26 22:36 static/image/common/back.gif
没错,你的方法也行,而且电路更加简单。我两年前曾经用你的方法做串口通讯的5V与3.3V的电平兼容转换,效 ...
5V与3.3V的电平兼容,串个电阻就可以了吧,何必搞得这么复杂?
jianhong_wu
发表于 2014-4-27 01:12
cjseng 发表于 2014-4-27 00:52 static/image/common/back.gif
5V与3.3V的电平兼容,串个电阻就可以了吧,何必搞得这么复杂?
我曾经在5V的单片机和3.3V的CPLD之间是直接串一个470欧的电阻就可以了。但是有一些新项目,我是第一次接触,又没有参考样品,为了保险起见一次通过,我就用了三极管进行电平转换。
keytst
发表于 2014-4-27 20:10
谢谢分享,期待后面的帖子。。
lux3333
发表于 2014-4-27 23:35
记号,记号,日后再看
cjseng
发表于 2014-4-28 00:11
mrjackyu 发表于 2014-4-26 22:16 static/image/common/back.gif
第一方法不行;
第二个方式实际是,原来高电平触发,改成低电平触发,这个电路相当于一个取反,可行;
我 ...
你试试:不断上下电,看看你的电路是否正常。
wqx0532
发表于 2014-4-28 15:29
不错 整理个pdf 上传就好了