打印

请问如何用一节3伏纽扣电池给8051供电?

[复制链接]
7003|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sky657|  楼主 | 2013-4-29 21:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
lyjian| | 2013-4-29 21:37 | 只看该作者
C8051F9xx系列可以,功耗比较低

使用特权

评论回复
板凳
sky657|  楼主 | 2013-4-29 21:50 | 只看该作者
这个系列好像要十元左右,80c52只要3元

使用特权

评论回复
评论
qx19921014 2013-4-29 22:03 回复TA
额,好便宜,看来我上次被坑了,AT80c51上次那人卖我7块,好吧,都是欺负新人啊 
地板
sky657|  楼主 | 2013-4-29 21:56 | 只看该作者
msp430行吗

使用特权

评论回复
5
NE5532| | 2013-4-30 07:37 | 只看该作者
要看你用的51的工作电压范围是多少,如果低到2.8就可以,但是51的功耗都比较大,这个应用建议你用PIC或者430

使用特权

评论回复
6
ningling_21| | 2013-4-30 08:32 | 只看该作者
sky657 发表于 2013-4-29 21:56
msp430行吗

那要看430能否在3V工作。

C8051F9XX倒是可以

使用特权

评论回复
7
sky657|  楼主 | 2013-4-30 11:46 | 只看该作者
如果就用8051呢?

使用特权

评论回复
8
huangxz| | 2013-4-30 11:58 | 只看该作者
sky657 发表于 2013-4-30 11:46
如果就用8051呢?

买一个DCDC(3->5V)模块,淘宝上有10多块钱。

使用特权

评论回复
9
wlq_9| | 2013-4-30 12:13 | 只看该作者
用低功耗的低压单片机可以.象430可以到1.8V.
DCDC不可能的事情,钮扣电池几十个maH的容量,能折腾几回?

使用特权

评论回复
10
huang51| | 2013-4-30 15:28 | 只看该作者
最侍选择MSP430 G系列,相对价格低,功耗低,足以满足你的需求

使用特权

评论回复
11
sky657|  楼主 | 2013-4-30 15:44 | 只看该作者
我发现松翰系列单片机更便宜,比如sn8p2711A只要两元,就是不知道怎么烧录和编程,它的c语言好像有点不一样

使用特权

评论回复
12
yingdea| | 2013-4-30 21:18 | 只看该作者
pic单片机有功耗很低的版本,可以用着看看。而且都是C编程,上手很快啊~

使用特权

评论回复
13
西门看雪| | 2013-5-1 08:25 | 只看该作者
wlq_9 发表于 2013-4-30 12:13
用低功耗的低压单片机可以.象430可以到1.8V.
DCDC不可能的事情,钮扣电池几十个maH的容量,能折腾几回? ...

可以整个电荷泵哇,比如LTC1516或者MAX619之类的,2V ~ 5.5V --> 5V 标准状态下器件本身只需要消耗十几个uA的电流就OK了。不过有点小贵了,要十几块RMB一片...

使用特权

评论回复
评论
yanwen217 2013-5-2 12:52 回复TA
那就用SGM3110吧,不到1元的价格,可以提供100mA的电流 
14
logokfu| | 2013-5-1 09:14 | 只看该作者
sky657 发表于 2013-4-30 15:44
我发现松翰系列单片机更便宜,比如sn8p2711A只要两元,就是不知道怎么烧录和编程,它的c语言好像有点不一样 ...

那个是OTP的,得有专门的烧录器,和仿真器。可以用C语言编程的。

使用特权

评论回复
15
sky657|  楼主 | 2013-5-1 20:27 | 只看该作者
**kfu 发表于 2013-5-1 09:14
那个是OTP的,得有专门的烧录器,和仿真器。可以用C语言编程的。

如果需要控制8个led灯,rom空间4kb,选什么型号的?如果还要再控制5个8字lcd又选什么型号呢?

使用特权

评论回复
16
logokfu| | 2013-5-1 20:38 | 只看该作者
sky657 发表于 2013-5-1 20:27
如果需要控制8个led灯,rom空间4kb,选什么型号的?如果还要再控制5个8字lcd又选什么型号呢? ...

使用特权

评论回复
17
sky657|  楼主 | 2013-5-1 21:38 | 只看该作者
**kfu 发表于 2013-5-1 20:38

请问一下有没有松翰的学习视频或pdf资料啊,麻烦你传到论坛上,或者传到我qq,谢谢!
我是买松翰的烧写器+仿真器还是只买仿真器(好像带仿真)就行?
646539222@qq.com   谢谢!

使用特权

评论回复
18
logokfu| | 2013-5-2 09:12 | 只看该作者
sky657 发表于 2013-5-1 21:38
请问一下有没有松翰的学习视频或pdf资料啊,麻烦你传到论坛上,或者传到我qq,谢谢!
我是买松翰的烧写器 ...

松翰的仿真器和烧录器是分开的,都得有才行啊,仿真器+烧录器大概得1500大洋吧。

没有学习视频,PDF资料你可以上官网下载啊。就是个datasheet。编程语言就是C语言操作下寄存器而已。没什么复杂的。

使用特权

评论回复
19
logokfu| | 2013-5-2 09:14 | 只看该作者
当然松翰主推的是汇编,毕竟空间太小,不过一般的应用用C还是写的下的。呵呵。

使用特权

评论回复
20
logokfu| | 2013-5-2 09:44 | 只看该作者
本帖最后由 **kfu 于 2013-5-2 09:47 编辑

20130322sn8p2711_eeprom_test(C program).rar (85.77 KB)
这个是个简单的eeprom读写测试程序的完整工程。你可以试试。
/**
******************************************************************************
* @filesn8p_eeprom.c
* [url=home.php?mod=space&uid=187600]@author[/url] gdw
* [url=home.php?mod=space&uid=895143]@version[/url] V1.0
* [url=home.php?mod=space&uid=212281]@date[/url] 2013.3.22
* [url=home.php?mod=space&uid=247401]@brief[/url]  eeprom read&wirte
******************************************************************************
* @attention
* sn8p2711 Fcpu=Fosc/4=16MHz/4=4MHz 测试通过
* 通信速率:100KHz
******************************************************************************
*/



#include"sn8p_eeprom.h"

bit error;

static void delay5us(void)
{
__asm{
JMP $+1;
JMP $+1;
JMP $+1;
JMP $+1;
JMP $+1;
JMP $+1;
JMP $+1;
}
}


static void start(void) //开始信号
{
sdam=1;
sclm=1;
sda=1;
scl=1;
delay5us();
sda=0;
delay5us();
scl=0;
}

static void stop(void) //停止
{
sdam=1;
sclm=1;
sda=0;
delay5us();
scl=1;
delay5us();
sda=1;
delay5us();
}

static void ack(void) //应答
{
uchar i=0;
sdam=1;
sclm=1;


sda=1;//释放sda数据总线
sdam=0;
delay5us();
scl=1;

delay5us();


while((sda==1)&&(i<8))
{
i++;
}
if(i>5)
{
i=0;
error=true;
//SLEEPMODE;
}
scl=0;
}

static void MasterAck(void)
{
sclm = 1;
sdam = 1;
scl = 0;
sda = 0;//MasterAck
delay5us();
scl = 1;
delay5us();
// sda = 1; //出现问题点
sdam =0;
scl = 0;
}


static void Write_Byte(uchar data)
{
uchar i;
sclm=1;
sdam=1;
for(i=0;i<8;i++)
{
if(data&0x80>>i)
{
sda=1;
}
else
{
sda=0;
}
delay5us();
scl=1;
delay5us();
scl=0;
}
}



static uchar Read_Byte(void)
{
uchar i,b=0;

sdam=0;
sclm=1;

for(i=0;i<8;i++)
{
scl=1;
delay5us();
b=(b<<1)|sda;
scl=0;
delay5us();
}
sda =0;
sdam=1;

return b;
}


/****************************************************************************
* _______ _ _ _ _ _ _ _ _ _ ______
*SCL \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
*
* start| 1 0 1 0 0 0 0 0 |ack |stop
* ____ ___ ___ ___
*SDA \___/ \___/ \___________________/___\___/
*
*****************************************************************************
* _______ _ _ _ _ _ _ _ _ _____
*SCL \___/ \___/ \___/ \___/ \___/ \___/ \___/ \___/ \___/
*
* start| 1 0 1 0 0 0 0 |ack |stop
* ____ _____ _____ ___
*SDA \____/ \_____/ \_______________________/_____\_____/
*
*****************************************************************************
*/

/*
function: 页写入
in: DeviceAddress 设备地址
DataAddress 数据写入的起始地址
DataBuffer 数据所在的buffer地址
DataSize 数据大小
out:
*/
void ByteWrite(uchar DeviceAddress , uchar DataAddress , uchar data)
{
start();
Write_Byte(DeviceAddress + 0);//Write
ack();
Write_Byte(DataAddress);
ack();
Write_Byte(data);
ack();
stop();
}


/*
function: 页写入
in: DeviceAddress 设备地址
DataAddress 数据写入的起始地址
DataBuffer 数据所在的buffer地址
DataSize 数据大小
out:
*/
void PageWrite(uchar DeviceAddress , \
uchar DataAddress , uchar *DataBuffer ,uchar DataSize)
{
uchar p_offset;
start();
Write_Byte(DeviceAddress);
ack();
Write_Byte(DataAddress);
ack();

for(p_offset=0;p_offset<DataSize;p_offset++)
{
Write_Byte(*(DataBuffer+p_offset));
ack();
}

stop();

}


/*
function: 连续地址读
in: data ,保存数据的buffer地址
out:
*/
void SequentialRead(uchar DeviceAddress , \
uchar DataAddress , uchar *DataBuffer, uchar NumDataRead)
{
uchar i;

start();
Write_Byte(DeviceAddress+0);//Write
ack();
Write_Byte(DataAddress);
ack();

start();
Write_Byte(DeviceAddress + 1);//Read
ack();
for(i=0;i<NumDataRead;i++)
{
*(DataBuffer+i)=Read_Byte();

MasterAck();
}
//NoAck
stop();
}


/*
function: 任意地址读
in: address
out: data

*/
uchar RandomRead(uchar DeviceAddress , uchar DataAddress)
{
uchar data;
start();
Write_Byte(DeviceAddress+0);//Write
ack();
Write_Byte(DataAddress);
ack();

start();
Write_Byte(DeviceAddress+1);//Read
ack();
data=Read_Byte();
//NO ACK
stop();
return data;
}
/******************************sn8p_eeprom.c END*********************************/









使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

158

主题

409

帖子

1

粉丝