技术文档

技术文档和学习资料

作者:admin   来源:未知

  本领文档和研习原料_英语研习_表语研习_教训专区。摘 要: 跟着期间的提高和科技兴盛,单片机本领依然普及到咱们的糊口、作事、科研等各个界限, 目前单片机渗入到咱们糊口的各个界限, 险些很难找到哪个界限没有单片机的影迹。 导弹的 导航装备,飞机上各样仪。

  摘 要: 跟着期间的提高和科技兴盛,单片机本领依然普及到咱们的糊口、作事、科研等各个界限, 目前单片机渗入到咱们糊口的各个界限, 险些很难找到哪个界限没有单片机的影迹。 导弹的 导航装备,飞机上各样仪表的驾驭,阴谋机的收集通信与数据传输,工业自愿化流程的及时 驾驭和数据管理,广大运用的各样智能 IC 卡,民用华丽轿车的安闲保险编造,录像机、摄 像机、全自愿洗衣机的驾驭,以及程控玩具、电子宠物等等,这些都离不开单片机。更不消 说自愿驾驭界限的呆板人、 智能仪表、 医疗器材以及各样智能呆板依然成为一种比拟成熟的 本领,本文合键先容一个基于 51 单片机的测温编造,详尽地描写了欺骗 51 单片机和 DS18B20 实行温度测试的道理及流程,对各部门的电途也实行了比拟详尽的先容。该编造 可能卓殊容易地实行温度的衡量,运用起来卓殊容易,拥有精度高,体积幼,功耗低,价钱 低贱等特色。 适合咱们的平常糊口及少许根本的工农分娩的温度衡量须要, 也可能当做温度 管理模块嵌入到其他编造中,举动其他主编造的扩展。51 单片机和 DS18B20 的连合告竣了 温度检测的最纯洁编造,该编造组织纯洁,抗扰乱性强,拥有广大的行使远景。 DS18B20 先容: DS18B20 数字温度计是 DALLAS 公司分娩的 1-Wire,即单总线器件,拥有线途 纯洁,体积幼的特色。于是用它来构成一个测温编造,拥有线途纯洁,正在一根通讯线,可能 挂良多如此的数字温度计,万分容易。 DS18B20 数字温度传感器接线容易,封装成后可应 用于多种景象, 如管道式, 螺纹式, 磁铁吸附式, 不锈钢封装式, 型号多种多样, LTM8877, 有 LTM8874 等等。合键凭据行使景象的分歧而蜕变其表观。封装后的 DS18B20 可用于电缆沟 测温,高炉水轮回测温,汽锅测温,机房测温,农业大棚测温,明净室测温,弹药库测温等 各样非极限温度景象。耐磨耐碰,体积幼,运用容易,封装样式多样,实用于各样眇幼空间 筑筑数字测温和驾驭界限。 1111、DS18B20 产物的特色 (1) 、只消求一个端口即可实 现通讯。 (2) 、正在 DS18B20 中的每个器件上都有并世无双的序列号。 (3) 、本质 行使中不须要表部任何元器件即可告竣测温。 (4) 、衡量温度畛域正在-55。C 到+125。 C 之间。 (5) 、数字温度计的离别率用户可能从 9 位到 12 位选取。 (6) 、内部有 温度上、下限告警创立 七段数码管先容: 7 段 LED 数码管,则正在必然体式的绝缘资料上,欺骗单只 LED 组合摆列成“8”字型 的数码管,判袂引出它们的电极,点亮相应的点划来显示出 0-9 的数字。 LED 数码管凭据 LED 的接法分歧分为共阴和共阳两类,会意 LED 的这些特征,对编程是很主要的,由于不 同类型的数码管,除了它们的硬件电途有分别表,编程手法也是分歧的。右图是共阴和共阳 极数码管的内部电途,它们的发光道理是相通的,只是它们的电源极性分歧罢了。将多只 LED 的阴极连正在一块即为共阴式,而将多只 LED 的阳极连正在一块即为共阳式。以共阴式为 例,如把阴极接地,正在相应段的阳极接上正电源,该段即会发 光。当然,LED 的电流广泛 较幼,凡是均需正在回途中接上限流电阻。假设咱们将 b 和 c 段接上正电源,其它端接地或悬 空,那么 b 和 c 段发光, 此时,数码管显示将显示数字“1” 。而将 a、b、d、e 和 g 段都接 上正电源,其它引脚悬空,此时数码管将显示“2” 。其它字符的显示 道理类同。 合键驾驭编造 AT89S52: AT89S52 是一种低功耗、高机能 CMOS8 位微驾驭器,拥有 8K 正在编造可编程 Flash 存储器。运用 Atmel 公司高密度非 易失性存储器本领创筑,与工业 80C51 产物 指令和引脚完 全兼容。片上 Flash 许诺法式存储器正在编造可编程,亦适于 向例编程器。正在 单芯片上,具有精巧的 8 位 CPU 和正在编造 可编程 Flash,使得 AT89S52 为浩繁嵌入式控 造行使编造提 供高天真、 超有用的治理计划。 AT89S52 拥有以下准绳效用: 8k 字节 Flash, 256 字节 RAM, 32 位 I/O 口线 位 守时器/计数 器,一个 6 向量 2 级终了组织,全双工串行口, 片内晶振实时钟电途。此表,AT89S52 可 降至 0Hz 静态逻 辑操作,声援 2 种软件可选取节电形式。空闲形式下,CPU 造止作事, 许诺 RAM、守时器/计数器、串口、终了不断工 作。掉电护卫方法下,RAM 实质被保留, 振荡器被冻结,单片机全部作事造止, 直到下一个终了或硬件复位为止。 P0 P0 P0 P0 口 口口口:: ::P0 口是一个 8 位漏极开途的双向 I/O 口。举动输出口,每位能驱动 8 个 TTL 逻 辑电平。对 P0 端口写“1”时,引脚用作高阻抗输入。 当拜望表部法式和数据存储器时, P0 口也被举动低 8 位地点/数据复用。正在这种形式下, P0 不拥有内部上拉电阻。 正在 flash 编程时,P0 口也用来收受指令字节;正在法式校验时,输出指令字节。法式校验 时,须要表 部上拉电阻。 P1 口:P1 口是一个拥有内部上拉电阻的 8 位双向 I/O 口,p1 输出缓冲器能驱动 4 个 TTL 逻辑电平。 P1 端口写 对 “1” 时, 内部上拉电阻把端口拉高, 此时可能举动输入 口 运用。 举动输入运用时, 被表部拉低的引脚因为内部电阻的源由, 将输出电流 (IIL) 。 此 表,P1.0 和 P1.1 判袂作守时器/计数器 2 的表部计数输入(P1.0/T2)和守时器/计数器 2 的 触发输入(P1.1/T2EX) 正在 flash 编程和校验时,P1 口收受低 8 位地点字节。 。 引脚号第二效用: P1.0 T2(守时器/计数器 T2 的表部计数输入) ,时钟输出 P1.1 T2EX(守时器/计数器 T2 的缉捕/重载触发信号和宗旨驾驭) P1.5 MOSI(正在编造编程用) P1.6 MISO(正在编造编程用) P1.7 SCK(正在编造编程用) P2 口:P2 口是一个拥有内部上拉电阻的 8 位双向 I/O 口,P2 输出缓冲器能驱动 4 个 TTL 逻辑电平。对 P2 端口写“1”时,内部上拉电阻把端口拉高,此时可能作 为输入 口运用。举动输入运用时,被表部拉低的引脚因为内部电阻的源由,将输出电流 (IIL) 正在拜望表部法式存储器或用 16 位地点读取表部数据存储器(比如施行 MOVX 。 @DPTR) 时,P2 口送出高八位地点。正在这种行使中,P2 口运用很强的内部上拉发送 1。 正在运用 8 位地点(如 MOVX @RI)拜望表部数据存储器时,P2 口输出 P2 锁存器的实质。 正在 flash 编程和校验时,P2 口也收受高 8 位地点字节和少许驾驭信号。 P3 口: 口是一个拥有内部上拉电阻的 8 位双向 I/O 口, 输出缓冲器能驱动 4 个 P3 p3 TTL 逻辑电平。对 P3 端口写“1”时,内部上拉电阻把端口拉高,此时可能举动输入 口 运用。举动输入运用时,被表部拉低的引脚因为内部电阻的源由,将输出电流(IIL) P3 。 口亦举动 AT89S52 独特效用(第二效用)运用,如下表所示。 正在 flash 编程和校验时,P3 口也收受少许驾驭信号。 端口引脚 第二效用: P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 INTO(表终了 0) P3.3 INT1(表终了 1) P3.4 TO(守时/计数器 0) P3.5 T1(守时/计数器 1) P3.6 WR(表部数据存储器写选通) P3.7 RD(表部数据存储器读选通) 别的,P3 口还收受少许用于 FLASH 闪存编程和法式校验的驾驭信号。 RST:复位输入。当振荡器作事时,RST 引脚展示两个呆板周期以上高电平将是单片 机复位。 ALE/PROG:当拜望表部法式存储器或数据存储器时,ALE(地点锁存许诺) 输出脉冲用于锁存地点的低 8 位字节。 凡是境况下, ALE 仍以时钟振荡频率的 1/6 输出固定 的脉冲信号,于是它可对表输出时钟或用于守时方针。要预防的是:每当拜望表部数据存储 器时将跳过一个 ALE 脉冲。对 FLASH 存储器编程岁月,该引脚还用于输入编程脉冲 (PROG) 。如有须要,可通过对独特效用寄存器(SFR)区中的 8EH 单位的 D0 地点位,可 禁止 ALE 操作。该地点位后,只要一条 MOVX 和 MOVC 指令才干将 ALE 激活。别的,该 引脚会被轻微拉高,单片机施行表部法式时,应创立 ALE 禁止位无效。 PSEN:法式储 存许诺(PSEN)输出是表部法式存储器的读选通讯号,当 AT89S52 由表部法式存储器取指 令(或数据)时,每个呆板周期两次 PSEN 有用,即输出两个脉冲,正在此岁月,当拜望表部 数据存储器,将跳过两次 PSEN 信号。 EA/VPPEA/VPPEA/VPPEA/VPP:: ::表部拜望 许诺, 欲使 CPU 仅拜望表部法式存储器 (地点为 0000H-FFFFH) EA 端必需仍旧低电平 , (接 地) 。需预防的是:倘使加密位 LB1 被编程,复位时内部会锁存 EA 端形态。如 EA 端为高 电平(接 Vcc 端) ,CPU 则施行内部法式存储器的指令。FLASH 存储器编程时,该引脚加 上+12V 的编程许诺电源 Vpp, 当然这必需是该器件是运用 12V 编程电压 Vpp。 XTAL1: 振荡器反相放大器和内部时钟发作电途的输入端。 XTAL2:振荡器反相放大器的输出端。 存储器组织: MCS-51 器件有孑立的法式存储器和数据存储器。表部法式存储器和数据存储器都可 以 64K 寻址。 法式存储器:倘使 EA 引脚接地,法式读取只从表部存储器起先。 对 于 89S52,倘使 EA 接 VCC,法式读写先从内部存储器(地点为 0000H~1FFFH)起先, 接着从表部寻址,寻址地点为:2000H~FFFFH。 数据存储器:AT89S52 有 256 字节片 内数据存储器。高 128 字节与独特效用寄存注重叠。也便是说高 128 字节与独特效用寄存 器有相通的地点,而物理上是离开的。 当一条指令拜望高于 7FH 的地点时,寻址方法 决断 CPU 拜望高 128 字节 RAM 依旧独特效用寄存器空间。 直接寻址方法拜望独特效用寄 存器 (SFR) 。 比如, 下面的直接寻址指令拜望 0A0H (P2 口) 存储单位 MOV 0A0H , #data 运用间接寻址方法拜望高 128 字节 RAM。 比如, 下面的间接寻址方法中, 实质为 0A0H, R0 拜望的是地点 0A0H 的寄存器,而不是 P2 口(它的地点也是 0A0H) 。 终了源: AT89S52 有 6 个终了源:两个表部终了(INT0 和 INT1) ,三个守时终了(守时器 0、 1、2)和一个串行终了。这些终了如图 10 所示每个终了源都可能通过置位或废除独特寄存 器 IE 中的合系终了许诺驾驭位判袂使得终了源有用或无效。 还蕴涵一个终了许诺总驾驭 IE 位 EA,它能一次禁止一起终了。 如表 5 所示,IE.6 位是不成用的。看待 AT89S52,IE.5 位也是不行用的。用户软件不应给这些位写 1。它们为 AT89 系列新产物预留。 守时器 2 可能被寄存器 T2CON 中的 TF2 和 EXF2 的或逻辑触发。法式进入终了效劳后,这些标识 位都可能由硬件清 0。本质上,终了效劳法式必需判决是否是 TF2 或 EXF2 激活终了,标 志位也必需由软件清 0。 守时器 0 和守时器 1 标识位 TF0 和 TF1 正在计数溢出的谁人周期 的 S5P2 被置位。它们的值平素到下一个周期被电途缉捕下来。然而,守时器 2 的标识位 TF2 正在计数溢出的谁人周期的 S2P2 被置位,正在统一个周期被电途缉捕下来。 电途道理图及实物图: PCB 图: 源法式 #includereg51.h #includeabsacc.h #includeintrins.h #define uchar unsigned char #define tempint DBYTE[0x30] #define tempdf DBYTE[0x31] uchar code tab[]={0x3,0x9f,0x25,0xd,0x99,0x49,0x41,0x1f,0x1,0x9,0x63}; sbit dat=P0^1; sbit spp = P0^4; void set_ds18b20(); //初始化 DS18B20 子法式 void get_temperature(); //得到温度子法式 void read_ds18b20(); //读 DS18B20 子法式 void write_ds18b20(uchar command);//向 DS18B20 写 1 字节子法式 void delayms(uchar count); //延时 count 毫秒子法式 void disp_temp(); //显示温度子法式 void main() { EA=0; SP=0x60; while(1) { //禁止终了 //创立栈房指针 get_temperature(); //得到温度 if ((tempint=30)(tempint18)) spp=0;//温度高于 30 或者低于 18 度,蜂鸣器报警 else spp=1; //不然不报警 disp_temp(); //显示温度 } } void set_ds18b20() { while(1) { uchar delay,flag; flag=0; dat=0; delay=250; while(--delay); dat=1; delay=30; while(--delay); while(dat==0) { delay=120; while(--delay); if(dat) { flag=1; break; } } if(flag) { delay=240; while(--delay); break; } } } void get_temperature() { set_ds18b20(); write_ds18b20(0xcc); write_ds18b20(0x44); disp_temp(); //数据线置低电平 //低电平仍旧 500us //数据线置高电平 //低电平仍旧 60us //鉴定 DS18B20 是否发出低电平信号 //DS18B20 呼应,延时 240us //DS18B20 发出高电平初始化获胜,返回 //DS18B20 初始化获胜标识 //初始化获胜,再延时 480us //温度转换、得到温度子法式 //初始化 DS18B20 //发跳过 ROM 成亲敕令 //发温度转换敕令 //显示温度,等候转换完了,大于 600ms set_ds18b20(); write_ds18b20(0xcc); write_ds18b20(0xbe); read_ds18b20(); tempdf 处 } //发跳过 ROM 成亲敕令 //发出读温度敕令 //将读出的温度数据保留到 tempint 和 void read_ds18b20() { uchar delay,i,j,temp,temph,templ; j=2; //读 2 位字节数据 do { for(i=8;i0;i--) //一个字节分 8 位读取 { temp=1; //读取 1 位右移 1 位 dat=0; //数据线置低电平 _nop_(); _nop_(); dat=1; //数据线置高电平 delay=4; while(--delay); //延时 4us if(dat) //读取 1 位数据 temp=0x80; delay=10; //读取认为数据后延时 20us while(--delay); } if(j==2) //读取的第一字节存 templ templ=temp; else temph=temp; //读取的第二字节存 temph }while(--j); tempdf=templ //将读取的数据转换成温度值,整数部门 存 tempint,幼数部门存 tempdf templ=4; temph=4; tempint=temphtempl; } void write_ds18b20(uchar command) { uchar delay,i; for(i=8;i0;i--) //将一字节数据一位一位写入 { dat=0; delay=8; while(--delay); dat=command delay=20; while(--delay); command=command1; dat=1; _nop_(); } //数据线us //将数据安插正在数据线us //打定发送下一位数据 //发送完一位数据,数据线us } void disp_temp() { uchar tempinth,tempintl,tempdfh,tempdfl,cnt; tempinth=tab[tempint/10]; //整数高半字节 tempintl=tab[tempint%10]//整数低半字节 tempdfh=tab[tempdf/10]; //幼数高半字节 tempdfl=tab[tempdf%10]; //幼数低半字节 cnt=200; //轮回显示 200 次 while(--cnt) { P1=0xfe; P2=tempinth; delayms(1); P1=0xfd; P2=tempintl; delayms(1); P1=0xfb; P2=tempdfh; delayms(1); P1=0xf7; P2=tempdfl; delayms(1); // P0=0xff; } } void delayms(uchar count) { uchar i,j; do {for(i=5;i0;i--) for(j=98;j0;j--); }while(--count); }?。

技术文档

联系我们

CONTACT US

联系人:张先生

手机:13988889999

电话:020-66889888

邮箱:admin@baidu.com

地址:广东省广州市番禺经济开发区58号