为什么ATmega128单片机连接DS18B20时可以不接上拉电阻(外部电源供电)

作者&投稿:索苑 (若有异议请与网页底部的电邮联系)
ds18b20与atmega128连接要上拉电阻吗~

你好:
记得DS18B20的数据端是需要接一个上拉电阻的。
参考过许多开发板的原理图,大都将数据端上拉。
因为DS18B20本身不具有输出高电平的能力,单片机读取的"1"信号必须通过其他方式给出,典型的就是外接上拉电阻。有些单片机的端口具有准双向口模式,可以不用上拉电阻。如P89LPC932A1
有些单片机的端口具有内置上拉电阻,如ATMEL168,在开漏模式下打开内部上拉电阻也可以不用外接上拉电阻。但需要注意的是如果用51单片机准双向模式,读取数据前最好先向端口写1,以保证上拉电路起作用。
希望我的回答能帮助到你。

老大把邮箱给我 我给你发过 Protel 99 SE画的电路图!加分不?(还有结合4位数码管显示的C51程序哦)

我给你一段程序吧。是采用ATMEGA128控制18B20,采集到温度后显示到数码管上
。希望对你有用。
#include <iom128v.h>
#include<macros.h>

这个输出你要自己设
#define DQ_IN DDRE &= ~(1 << PE6) /*设置输入*/
#define DQ_OUT DDRE |= (1 << PE6) /*设置输出*/
#define DQ_CLR PORTE &= ~(1 << PE6) /*置低电平*/
#define DQ_SET PORTE |= (1 << PE6) /*置高电平*/
#define DQ_R PINE & (1 << PE6) /*读了电平*/

unsigned char flag; /*中断标志缓存*/
unsigned char led_buf[]; /*显示信息*/

unsigned char disp[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};

/*********************************************************************
前4位为显示数值。
最后一位为小数点显示位置。
**********************************************************************/
unsigned char led_buf[] = {1, 2, 3, 4, 8}; /*显示信息*/

/*********************************************************************
延时函数

延时时间约10ms:
时钟频率为:7.3728MHz。
**********************************************************************/
void delay_10us(unsigned char i)
{
unsigned char j;
while(i--)
{
j=5;
while(j--);
}
}

/*********************************************************************
延时函数

延时单位为:mS。
CPU频率为:7。3728MHz。
*********************************************************************/
void delay_ms(unsigned int i)
{

unsigned char temp1,temp2;

while (i --)
{
temp1=35;temp2=102;
while(temp1--)
while(temp2--);
}
}

/*DS18B20复位函数*/
unsigned char ds1820_reset(void)
{
unsigned char i;
flag = SREG; /*中断保护*/
CLI(); /*关中断*/
DQ_OUT; //设置输出
DQ_CLR; //置低电平
delay_10us(49); /*延时500uS(480-960)*/
DQ_SET;
DQ_IN;
delay_10us(7); /*延时80uS*/
i = DQ_R; //读电平
delay_10us(49); /*延时500uS(保持>480uS)*/
if (flag & 0x80) SEI(); /*恢复中断状态*/
if (i) return 0x00;
else return 0x01;
}

/*DS18B20字节读取函数*/
unsigned char ds1820_read_byte(void)
{
unsigned char i;
unsigned char value = 0;
flag = SREG; /*中断保护*/
CLI(); /*关中断*/
for (i = 8; i != 0; i--)
{
value >>= 1;
DQ_OUT;
DQ_CLR;
NOP(); /*延时4uS*/
NOP();
NOP();
NOP();
DQ_SET;
DQ_IN;
delay_10us(1); /*延时10uS*/
if (DQ_R) value|=0x80;
delay_10us(5); /*延时60uS*/
}
if (flag & 0x80) SEI(); /*恢复中断状态*/
return(value);
}

/*DS18B20字节写入函数*/
void ds1820_write_byte(unsigned char value)
{
unsigned char i;
flag = SREG; /*中断保护*/
CLI(); /*关中断*/
for (i = 8; i != 0; i--)
{
DQ_OUT;
DQ_CLR;
NOP(); /*延时4uS*/
NOP();
NOP();
NOP();
if (value & 0x01) DQ_SET; //置高电平
delay_10us(7); /*延时80uS*/
DQ_SET; /*位结束*/
value >>= 1;
}
if (flag & 0x80) SEI(); /*恢复中断状态*/
}

/*启动ds1820转换*/
void ds1820_start(void)
{
ds1820_reset();
ds1820_write_byte(0xCC); /*勿略地址*/
ds1820_write_byte(0x44); /*启动转换*/
}

/*DS8B20读取温度信息*/
unsigned int ds1820_read_temp(void)
{
unsigned int i;
unsigned char buf[9];

ds1820_reset();
ds1820_write_byte(0xCC); /*勿略地址*/
ds1820_write_byte(0xBE); /*读取温度*/
for (i = 0; i < 9; i++)
{
buf[i] = ds1820_read_byte();
}
i = buf[1];
i <<= 8;
i |= buf[0];
return i;
}

/*LED显示当前温度值*/
void led_display(void)
{
PORTA=0X00;
PORTC=disp[led_buf[3]];
PORTA=0X10;
delay_10us(10);

PORTA=0X00;
PORTC=disp[led_buf[2]];
PORTA=0X20;
delay_10us(10);

PORTA=0X00;
PORTC=disp[led_buf[1]] & 0x7f; //添加小数点
PORTA=0X40;
delay_10us(10);

PORTA=0X00;
PORTC=disp[led_buf[0]];
PORTA=0x80;
delay_10us(10);

PORTA=0X00;
}
/********************************************************
主函数

实现系统的初始化操作。
周期性读取温度。
然后放入显示缓存区。
上面两个任务之间完全独立运行,方便移植。
********************************************************/
void main(void)
{
unsigned int i;
unsigned char m;

DDRA=0XFF;
PORTA=0XFF;

DDRC=0XFF; //数码管段码控制端口设为输出
PORTC=0X00;

DDRF|=0X0E;
PORTF|=0X0E;
PORTF&=0xF7; //锁存关闭LED

PORTA=0X00; //数码管位控制

DDRB |=0X10; //PB4设为输出
PORTB|=0X10; //关闭PB4外接的LED

for(m=0;m<62;m++)
led_display();
ds1820_reset(); /*复位D18B20*/
while (1)
{
ds1820_start(); /*启动一次转换*/
for(m=0;m<62;m++)
led_display();
i = ds1820_read_temp(); /*读取温度数值*/
i = (i * 10) / 16; /*数值处理*/
led_buf[3] = i / 1000; /*将显示信息加载到显示缓存区*/
i = i % 1000;
led_buf[2] = i / 100;
i = i % 100;
led_buf[1] = i / 10;
led_buf[0] = i % 10;
}
}


ATmega怎么读?
安特没噶

新买的Atmege16无法用isp下载,买了3片都无法下载。同样的板子和下载线...
我也碰到过类似的问题,新买来的一批芯片全都下载不进去,后来发现还是芯片问题,不是芯片坏了,而是新生产的一批ATMEGA系列片子更新过了,用我自己的USB下载线以前的片子能写进去,新的片子写不进去,后来我换了一根并口的下载线用双龙软件就能下载了,可能是我的USB下载线驱动没跟上新产品而导致的。你...

有谁能把arduino uno r3的电路原理图各部分讲解一下,谢谢!
工作电压 5V 输入电压(推荐) 7-12V 输入电压(范围) 6-20V 数字IO脚 14 (其中6路作为PWM输出)模拟输入脚 6 IO脚直流电流 40 mA 脚直流电流 50 mA Flash Memory 32 KB (ATmega328。UNO已经发布到第三版。电池连接电源连接器的GND和VIN引脚,其中0,11(MOSI),12(MISO),一个16MHz晶体...

...图做一个遥控开关,但是不会那三个单片机(ATmega 16L,PT2262\/PT2272...
对于以上遥控台和负荷缸连接原理图,因为在遥控台上由负荷缸供电的低水位回传信号指示灯等可以容易地改为由遥控台端供电,而在负荷缸端只提供开关量信号,于是实际的问题便变成了实现一种对多路遥控开关和返回开关量信号进行编码。刚开始考虑到采用T型电阻网络对这些开关进行采样,用A\/D,D\/A转换的方法...

怎么用arduino实现智能家居
一、硬件介绍:(一)ArduinoUNO单片机:这是由一个开放源码的硬件平台和一套专门的软件开发环境组成。它可以用来开发交互产品,它可以读取开关和传感器信号,可以控制电灯、电机和其他物理设备。Arduino UNO(R3版本)采用的微处理器是ATmega328。该版本包括14个数字输入输出IO,6个模拟输入IO,16MHZ的晶体,...

atmega2560 为什么明明在xtal1和xtal2引脚之间接了12Mhz晶振,芯片熔丝...
单片机支持很多时钟:无源晶体、有源晶振、Rc震荡、外部rc震荡;要看清熔丝配置;要想使用外部晶体,用上图配置 按照这个熔丝位配置就没问题了;要么就是晶振坏了!

单片机 可以检测电压吗?比如当0.5V时P01输出高电平,1V时P02高电平,或者...
这当然是可以的啦,而且用单片机做出来的检测设备如万用表,可以做得非常的精确。这里边需要一个数模转换芯片,因为单片机只能识别数字信号。

...定时计数器最高计数频率和晶振频率的关系是什么?感谢帮忙。_百度知 ...
成正比。计数器最高计数频率具体多少取决于单片机。传统的51单片机的系统时钟是晶振频率的1\/12,内部定时器的计数脉冲最高频率是晶振的1\/12,外部计数脉冲的最高频率是晶振的1\/24。某些新型单片机(如Atmega的AVR系列单片机)内部定时器最高计数频率等于晶振的频率。外部计数脉冲的最高频率是晶振的1\/2。

用定时器中断技术设计一个秒闪电路LED每秒闪亮400ms.时钟频率6MHz。代码...
timer1_init();sei(); \/\/ 全局中断使能 while (1){ \/\/ 主循环中不需要做其他操作 } } ISR(TIMER1_COMPA_vect){ led_toggle(); \/\/ 定时器1比较匹配中断触发时,切换LED状态 } 上述代码使用了Atmel AVR微控制器的C语言编程,并假设使用了ATmega系列的微控制器。代码中的timer1_init()...

...ATMEGA单片机程序下载用···应该用什么型号的连接线···_百度...
描述的不清楚,不过每个厂家都提供ISP的下载电缆,通常有两种接口形式,一种是并口的,一种是USB接口. 并口的比较简单,里面说白了,就是一个244的驱动芯片.USB的相对复杂一些.建议你到他们公司的网站上查一下.谢谢!

沙河口区13538364199: 单片机控制变频器 -
农萍牛黄: 用51.AVR.PIC都可以如果你要用比较多的I0的话.我建议你采用AVR的ATMEGA128L单片机,它具有64个腿,从A-E口各8,再加PINF口的5个口.总共具有40多个腿.但是如果用在你这个课题上,一片AT89S51或者你说的80C51也是足够的.很简单.你可以采用预制的外部端子来控制变频器,由光藕来控制变频器的外部端子,而光藕由51单片机来控制就okay了.如果你想采用无级调速,你可以采用变频器的模拟通道.不过需要A/D采集而已.那种方法基本差不多.随意采用.至于LCD.你可以采用1602液晶屏来实现.正反转直接在外部由单片机控制接触器来实现就okay了.

沙河口区13538364199: ATmega128单片机,用的USBISP下载,为什么无法烧进去程序 -
农萍牛黄: STC-ISP软件,通过 COM 串口 232转TTL, 及 USB转TTL(模拟串口),可以对 STC系列单片机 进行 编程下载程序.目前其它 系列 单片机还 没有 该功能,ATmega128 及 89S52 等 单片机 就有 SPI 串口下载功能, 与 ISP 并不兼容.

沙河口区13538364199: keil中怎么选择ATmega128芯片 -
农萍牛黄: keil中是无法选择ATmega128单片机的,ATmega128是AVR系列单片机,Keil只能编译51系列单片机,所以你只能换其他编译器了.KEIL MDK也仅仅支持到ARM,但对其他系列的单片机还是不支持.

沙河口区13538364199: 与AVR - ATmega8L单片机连接写程序isp usb 连接线连不上单片机 -
农萍牛黄: 原因有以下几种:1、连接电缆和USB口连接故障;2、缺少驱动程序;3、单片机设置熔丝错误,禁止了串行下载;4、熔丝设置为外部晶振,而外部晶振未振荡.除1、2外,4原因而已增加外部晶振解决,3原因采用并行编程器解除设置的熔丝.

沙河口区13538364199: ATMEGA128L单片机贴片应如何插入开发板中 -
农萍牛黄: ATMEGA128L单片机贴片封装的只能焊接的,不可能插到开发板上的,要直接焊在开发板上,就是板中间那个位置.它四周还有4个双排针孔,可以焊接一些导线等将ATMEGA128L单片机的引脚与其它电路相连.还有一种方式,就是有卖一种转换小板的,将ATMEGA128L单片机焊接在转换小板上,而转接板四周有4个双排针,正好插到开发板上.这要问商家有没有这种转接板了,有的商家有卖的,而且都将单片机焊好了,你可以将小板插到开发板上了.

沙河口区13538364199: 求教,在Proteus中仿真atmega128单片机串口发送数据出错,一直是乱码 -
农萍牛黄: 7.6是在microprocessor ics里面,7.7没用过. 直接在keywords那里输入atmega,应该也会出来的.

沙河口区13538364199: atmega128是否与atmega1280兼容? -
农萍牛黄: 1.它们都是Atmel公司的8位RISC高性能单片机,64,128指的是 64K / 128K 字节的系统内可编程Flash,其硬件架构上是一致的.在计时/定时器数量,ADC通道、精度和PWM端口数量,UART口数量等方面会有所不同.性能肯定是atmega128要好.2.ATmega128是ATMEL公司的 8位系列单片机的最高配置的一款单片机,稳定性极高,应用极其广泛.ATmega64是基于增强的AVR RISC结构的低功耗8位CMOS微控制器.由于其先进的指令集以及单时钟周期指令执行时间,ATmega64 的数据吞吐率高达1 MIPS/MHz,从而可以缓减系统在功耗和处理速度之间的矛盾.

沙河口区13538364199: 我有一款单片机MEAG128,想读取里面的代码,芯片没有加密,听说读出来的是bin文件,也可以 -
农萍牛黄: 首先,应该是ATmega128,与51单片机没有一毛钱关系.与keil 也没有一毛钱关系.就算是没有加密,可以读出来,那也得要ATmega 专用的ISP下载线,还要用专用的烧烧软件,要去ATMEL官网下载.好了,假如没有加密,是可以读出来,但读出来确实是BIN代码,看不懂,更不能修改.假如想仿造,只能是用原代码写到自己的板子的单片机里,这要求在硬件上要完全一样才行.因此,读出来的意义也不大.

沙河口区13538364199: 求助,关于AVR.. 请问ATMEGA16的程序ATMEGA128能兼容不? -
农萍牛黄: 程序是兼容的,改下头文件,编译的时候选择ATMEGA128,ATMEGA128与ATMEGA16有一点不同的是ISP下载脚不一样.ATMEGA16 ISP脚是 PB5,PB6,PB7 ATMEGA128则是PE0 ,PE1,PB1 .程序指令都通用.

沙河口区13538364199: 在AVR ATmega128 SPI双机通信中,是不是只能主机发给从机?若从机要发数据给主机,就必须把原来的主机设置 -
农萍牛黄: 补充一下楼上的回答:1. 接线的问题主机的输出就是从机的输入,主机的输入就是从机的输出.所以会有交叉连接.2. 就像楼主描述的全双工是双方可以同时发送数据,但是主从机的特点是谁输出SCK信号,而不是谁发送数据.如果从机有个数据要发送,但是主机却没有数据要发送,这时候从机要么等待主机定时发送,要么把主动把主机设置成从机.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网