首页
论坛
电子技术基础
模拟技术
可编程器件
嵌入式系统与MCU
工程师职场
最新帖子
问答
版主申请
每月抽奖
商城免费换礼
社区有奖活动
博客
下载
评测
视频
文库
芯语
资源
2025泰克杭州测试论坛
2025中国低空经济产业创新发展大会
【直播】芯片设计工艺仿真全解析
西门子数字化工业软件资源中心
嵌入式设计资源库
智能楼宇/家电控制应用全解析
在线研讨会
EE直播间
小测验
白皮书
行业及技术活动
杂志免费订阅
免费在线工具
厂商资源中心
论坛
博文
电子工程专辑
电子技术设计
国际电子商情
资料
白皮书
研讨会
芯语
文库
登录|注册
登录
jizzll_617398179
修改
文章:
900
阅读:
2773174
评论:
393
赞:
5581
好友
私信
个人主页
文章
900
原创
0
阅读
2773174
评论
393
赞
5581
原创
18B20+1602+字符移动
2008-3-28 18:15
2448
7
10
分类:
MCU/ 嵌入式
根据网友的程序改编
18B20+液晶显示+字符移动(EDN51验证
呵呵,大家再优化哈吧,
写原创有奖励!2025面包板原创奖励正在进行中
最新发表
推荐阅读
明星博主
原创博文
年度排行
博文排行
博文评论
FPGA/CPLD
MCU/ 嵌入式
模拟
电源/新能源
测试测量
通信
智能手机
处理器与DSP
PCB
汽车电子
消费电子
智能硬件
物联网
软件与OS
采购与分销
供应链管理
工程师职场
EDA/ IP/ 设计与制造
无人机
机器人/ AI
医疗电子
工业电子
管理
写博文
点赞(
7
)
收藏
分享到:
上一篇:
简单的被动式红外线报警器
下一篇:
18B20+1602+字符
PARTNER CONTENT
换一换>
更多>
案例分享 | 高效节能,性能卓越!汉高三防漆为电动汽车充电系统披上"隐形铠甲"
汉高
2025-03-21
提升汽车电子浪涌耐受性:SWM+TVS解决方案通过ISO 16750-2 Pulse 5a测试
firstohm
2025-04-14
文章评论
(
3
条评论)
登录
后参与讨论
您需要登录后才可以评论
登录
|
立即注册
发布
用户1587891
2009-7-9 23:29
//我请问的程序出了什么问题,串口不出温度 #include
#define uchar unsigned char #define COM_TXD_BUFF_SIZE 50 #define COM_RXD_BUFF_SIZE 90 sbit TMDAT = P3^3; //根据实实际情况设定 sbit bb =P3^4; uchar TMP[4]; //读取后的4个温度值,将其除以2即可得出实际温度; uchar SN[4][8]; //4个器件的序列号,先读出单个序列号后填上才可以读取温度 uchar f[4]; //结果是否为负温,“0”为正温,“1”为负温。 ////////////////////////////////////////延时部分////////////////////////// void dmsec (unsigned int count) // { // unsigned int i; // while (count) // { // i = 115; // while (i>0) i--; // count--; // } // } // ////////////////////////////////////////////////////////////////////////// /////////////////////////////////////// 发送复位////////////////////////// void tmreset (void) // { // unsigned int i; // TMDAT = 0; // i = 103; // while (i>0) i--; // 延时 900 uS(11.0592Mhz时) // TMDAT = 1; // i = 4; // while (i>0) i--; // } // ////////////////////////////////////////////////////////////////////////// //判断DS1820是否存在的子程序。最好不要用,因为当器件不存在时将会进入死循环 ////////////////////////////////////// 等待存在脉冲/////////////////////// void tmpre (void) //判断器件是否存在 // { // unsigned int i; // while (TMDAT); // while (~TMDAT); // i = 4; while (i>0) i--; // } // ////////////////////////////////////////////////////////////////////////// ///////////////////////////////////// 读一位////////////////////////////// bit tmrbit (void) // { // unsigned int i; // bit dat; // TMDAT = 0; i++; // TMDAT = 1; i++; i++; //微量延时 // dat = TMDAT; // i = 8; while (i>0) i--; // 延时 // return (dat); // } // ////////////////////////////////////////////////////////////////////////// //////////////////////////////////////// 读一个字节/////////////////////// unsigned char tmrbyte (void) // { // unsigned char i,j,dat; // dat = 0; // for (i=1;i<=8;i++) // { // j = tmrbit (); // dat = (j << 7) | (dat >> 1); // } // return (dat); // } // ////////////////////////////////////////////////////////////////////////// /////////////////////////////////////// 写一个字节//////////////////////// void tmwbyte (unsigned char dat) // { // unsigned int i; // unsigned char j; // bit testb; // for (j=1;j<=8;j++) // { // testb = dat & 0x01; // dat = dat >> 1; // if (testb) // { // TMDAT = 0; // 写0 // i++; i++; // TMDAT = 1; // i = 8; while (i>0) i--; // } // else // { // TMDAT = 0; // 写0 // i = 8; while (i>0) i--; // TMDAT = 1; // i++; i++; // } // } // } // ////////////////////////////////////////////////////////////////////////// /////////////////////////////////发送ds1820 开始转换////////////////////// void tmstart (void) // { // tmreset (); //复位 // //tmpre (); //等待存在脉冲 // dmsec (1); //延时 // tmwbyte (0xcc); //跳过序列号命令,对所有器件有效 // tmwbyte (0x44); //发转换命令 44H, // } // ////////////////////////////////////////////////////////////////////////// //////////////////////////////////读取温度//////////////////////////////// void tmrtemp () // { // uchar i,j; // uchar a,b; // for(j=0;j<4;j++) // { // tmreset(); //复位 // dmsec(1); //延时 // tmwbyte(0x55); //发送ROM匹配命令 // for(i=0;i<8;i++) // { // tmwbyte(SN[j][i]); //发送64位序列号 // } // tmwbyte (0xbe); //发送读取命令 // a = tmrbyte (); //连续读取两位温度 // b = tmrbyte (); // f[j]=b; //若b为1则为负温 // if(f[j]) // { // TMP[j]=~a+1; //如果为负温则去除其补码 // } // else // { // TMP[j]=a; // } // } // } // ////////////////////////////////////////////////////////////////////////// //以下是读取器件序列号的子程序,需要读取序列时可在程序中调用; //调用时确保总线中只有一只器件,若有多个器件时则读取出来的号码无效; //将读取出来的序列号填到前面的数组中即可使用; //平时可以将此子程序删除以节约空间。 //////////////////////////读取器件序列号子程序//////////////////////////// void rom() // { // //以下是定义8个序列号变量 // uchar sn1; // uchar sn2; // uchar sn3; // uchar sn4; // uchar sn5; // uchar sn6; // uchar sn7; // uchar sn8; // // tmreset (); //复位 // dmsec (1); //延时 // tmwbyte(0x33); //发送读序列号子程序 // sn1=tmrbyte(); //读取第一个序列号,应为16H; // sn2=tmrbyte(); //读取第二个序列号,应为10H; // sn3=tmrbyte(); // sn4=tmrbyte(); // sn5=tmrbyte(); // sn6=tmrbyte(); // sn7=tmrbyte(); // sn8=tmrbyte(); // } // ////////////////////////////////////////////////////////////////////////// code uchar test[] ={0x1,0x2,0x3,0x4,0x5}; xdata uchar ComTxdBuf[COM_TXD_BUFF_SIZE ]; xdata uchar ComRxdBuf[COM_RXD_BUFF_SIZE ]; xdata unsigned char Frame[40]; xdata uchar TimeCount; xdata uchar ComTxdRead ; xdata uchar ComTxdWrite ; xdata uchar ComRxdRead ; xdata uchar ComRxdWrite; bit ComTxdBufempty ; bit Frame_End ; void ComPrintf(unsigned char lengh ,unsigned char * PData ); void Init_Device(); void Interrupts_Init(); void InitCom(unsigned char BaudRate); ////////////////////////////////////////////////////////////////////////// main() // { bb=0; Init_Device(); ComPrintf(5,&test[0]); // do{ // //rom(); //调用读序列号子程序 // tmstart(); // dmsec(100); //如果是不断地读取的话可以不延时 // tmrtemp(); //读取温度,执行完毕温度将存于TMP[]数组中// }while(1); // } // ////////////// //-------------------------------------------------------------------------- // com_int() interrupt 4 using 0 //-------------------------------------------------------------------------- void com_int() interrupt 4 using 0 { bit GetaFrame; unsigned char i,temp,tlength ; GetaFrame = 0; if( TI ) { //串口发送中断处理 TI=0; if(ComTxdRead!=ComTxdWrite)//发缓区有数据,继续发送数据 { SBUF=ComTxdBuf[ComTxdRead]; ComTxdRead++; if(ComTxdRead>=COM_TXD_BUFF_SIZE) ComTxdRead=0; if(ComTxdRead==ComTxdWrite) { ComTxdBufempty= 1; //ComSwithTxRx = 0; } } else { ComTxdBufempty=1; //ComSwithTxRx = 0; } } if (RI) { //串口接收中断处理 RI=0; temp=SBUF; ComRxdBuf[ComRxdWrite]=temp; if(temp == 0xd) { if(ComRxdWrite == 0) tlength = ComRxdBuf[COM_RXD_BUFF_SIZE-1]; else tlength = ComRxdBuf[ComRxdWrite-1]; if( tlength >= ComRxdWrite -1 ) { ComRxdRead = tlength -(ComRxdWrite -1); ComRxdRead = (COM_RXD_BUFF_SIZE -1)- ComRxdRead ; } else { ComRxdRead = ComRxdWrite-tlength-2; } if(ComRxdBuf[ ComRxdRead] == 0xa) GetaFrame = 1; } ComRxdWrite++; if(ComRxdWrite > COM_RXD_BUFF_SIZE-1) ComRxdWrite=0; if(GetaFrame) { Frame[0] = tlength ; for(i =0; i < tlength; i++) { ComRxdRead++; if(ComRxdRead>COM_RXD_BUFF_SIZE-1) ComRxdRead = 0; Frame[i+1] = ComRxdBuf[ComRxdRead]; } } } } void ComPrintf(unsigned char lengh ,unsigned char * PData ) //注:lengh要小于COM_TXD_BUFF_SIZE { unsigned char * Lpdata; unsigned char i,j; Lpdata = PData; j= lengh; for(i=0;i
=COM_TXD_BUFF_SIZE) ComTxdWrite=0; Lpdata++; } if (ComTxdBufempty==1) { TI = 1; } } void InitCom(unsigned char BaudRate) { unsigned char THTL; switch (BaudRate) { case 1: THTL = 64; break; //波特率300 case 2: THTL = 160; break; //600 case 3: THTL = 208; break; //1200 case 4: THTL = 232; break; //2400 case 5: THTL = 244; break; //4800 case 6: THTL = 250; break; //9600 case 7: THTL = 253; break; //19200 case 8: THTL = 255; break; //57600 default: THTL = 243;//晶振为12M,波特率4800. } SCON = 0x50; //串口方式1,允许接收 TMOD = 0x20; //定时器1定时方式2 TCON = 0x40; //设定时器1开始计数 TH1 = THTL; TL1 = THTL; PCON = 0x80; //波特率加倍控制,SMOD位 RI = 0; //清收发标志 TI = 0; TR1 = 1; //启动定时器 } void Interrupts_Init() { IE=0x90; } void Init_Device() { InitCom(9600); Interrupts_Init(); }
回复
jizzll_617398179
2008-3-28 21:36
是温度传感器
回复
用户789411
2008-3-28 20:41
18B20也是某种液晶型号吗
回复
查看更多评论
相关推荐阅读
jizzll_617398179
2010-02-08 10:53
正确理解A/D转换器的输入
http://www.freescale.com.cn/tech_ariticles/2005/1102_1.asp 许多嵌入式应用都会用到A/D转换器。然而,如果错误连接了A/D转换器输入端的电路,...
jizzll_617398179
2010-01-12 13:37
好久没来,都长草了
好久没来,都长草了,呵呵。整天忙得很,不过估计再过两个月会轻松点~\(≧▽≦)/~啦啦啦...
jizzll_617398179
2009-03-16 21:57
很奇怪,我收到站内信,但是却找不到发信人呢
发信人是个[],点击就跳到我自己的主页了。只好在这里给那位朋友留言了。 我不知道你说的哪篇文章,还有我也不知道你的EDN的ID。你可以在博客上面留言的。...
jizzll_617398179
2009-03-14 13:08
如何在EXCEL中使用16进制数
最近需要计算串口发送的数据,太多而且比较麻烦。知道EXECL功能强大,所以网上找了找,刚好,不错,很方便。网上找到的http://hi.bccn.net/space-99452-do-blog-id-...
jizzll_617398179
2009-03-05 14:37
〖常识〗不同晶振的最大波特率及其误差
最近犯了个错误,呵呵,晶振和波特率的问题,特查了记在这里,O(∩_∩)O~〖常识〗不同晶振的最大波特率及其误差http://www.aoxue.org/bbs/read.php?tid=65585不同...
jizzll_617398179
2009-02-11 14:30
大端模式和小端模式
转载http://www.cnblogs.com/TsuiLei/archive/2008/10/29/1322504.html大端格式:在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则...
jizzll_617398179
修改
文章:
900
阅读:
2773174
评论:
393
赞:
5581
好友
私信
个人主页
文章
900
原创
0
阅读
2773174
评论
393
赞
5581
最新评论
更多
写的好,学习和参考,很实用,京东了不起
开发工匠 ...
评论博文
2025-4-19
京东全球购十周年:宣布投入亿级资源,升级 ...
eeNick : 写得不错,奖励30E币 感谢支持
龙猫讲电子 ...
评论博文
2025-4-19
我找到了MOS管开关电路浪涌电流的计算公式~ ...
eeNick : 这么贵,都拿来支持社区拆解了 是坏了
zhusx123
评论博文
2025-4-18
【拆解】+华为Freebuds pro 耳机拆解 ...
最新
博文
E8267D 供应 Agient M9374A
M9374A 供应 Agilent E8267D
2025年全球长距离静电消除器行业:现 ...
资料下载
本周热帖
WeActStudio的STM32G431CoreBoard开发 ...
STM32G431移植FreeModbus
可以兼容替代CS4272!NX9020中文规格 ...
纳祥科技NX8406规格参数,数字音频解 ...
[完结14章]RAG全栈技术从基础到精通 ...
【2025面包板社区内容狂欢节】发文、 ...
[米尔-全志T536] 异步物联网设备管理 ...
差分晶振的输出方式有哪几种呢 ...
IU5209E升压充电管理芯片
燃料电池模拟器简介
最新资讯
芯语最新
智能眼镜的困境和解法:“百镜大战” ...
中微半导体尹志尧放弃美籍,恢复中国 ...
全球首个人形机器人半马收官:天工 Ul ...
终于还是下手了!美国宣布将对中国船 ...
中国“破晓(PoX)”皮秒闪存器件问世, ...
2025年上海车展展前指南分析报告 ...
2025上海车展展前报告
可穿戴超声肌电系统硬件设计.第二弹 ...
零跑官宣!
重磅!欧盟同意取消中国车关税 ...
EE直播间
更多
在线研讨会
更多
迈来芯新一代经济型热成像技术:赋能电力电子过热保护与智能应用温度监控
ADI 应用于电池管理系统 (BMS) 的电芯监测解决方案
利用氮化镓技术打造高效电机驱动——人形机器人、无人机与电动汽车应用
ADMT4000重新定义多圈编码器设计
热门
推荐
泰克!5折!
中端示波器性能提升“秘籍”
GaN电机驱动设计“避坑”指南
汽车用卸负载电阻低价方案
我要评论
3
7
分享到微信
分享到微博
分享到QQ
点击右上角,分享到朋友圈
我知道啦
请使用浏览器分享功能
我知道啦
关闭
站长推荐
/3
2025第1期拆解活动:赢示波器、运动相机、热像仪等!
示波器、影石运动全景相机、大疆无人机、高清红外热成像仪;树莓派5等等
泰克示波器五折来袭!
泰克限时五折!全球示波器用户狂欢,软件升级超值优惠,速抢!
【2025面包板社区内容狂欢节】发文、回帖赢20万E币!
活动时间:即日起——2025年全年(发完20万E币为止!)
首页
论坛
电子技术基础
模拟技术
可编程器件
嵌入式系统与MCU
工程师职场
最新帖子
问答
版主申请
每月抽奖
商城免费换礼
社区有奖活动
博客
下载
评测
视频
文库
芯语
资源
2025泰克杭州测试论坛
2025中国低空经济产业创新发展大会
【直播】芯片设计工艺仿真全解析
西门子数字化工业软件资源中心
嵌入式设计资源库
智能楼宇/家电控制应用全解析
在线研讨会
EE直播间
小测验
白皮书
行业及技术活动
杂志免费订阅
免费在线工具
厂商资源中心
帖子
博文
返回顶部
×
用户1587891 2009-7-9 23:29
jizzll_617398179 2008-3-28 21:36
用户789411 2008-3-28 20:41