DS18B20+DS1302项目报告文档格式.docx
- 文档编号:17183728
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:38
- 大小:80.13KB
DS18B20+DS1302项目报告文档格式.docx
《DS18B20+DS1302项目报告文档格式.docx》由会员分享,可在线阅读,更多相关《DS18B20+DS1302项目报告文档格式.docx(38页珍藏版)》请在冰豆网上搜索。
TEMP_TLDATA28H;
低温报警值存放单元
TEMPHCDATA29H;
TEMPLCDATA2AH;
TEMPFCEQU2BH;
LCD_XEQU2FH;
LCD字符显示位置
COUNTEQU51H;
1s计时
COUNT1EQU52H;
60s计时
FLAG1EQU20H.0;
DS18B20是否存在标志
RELAYEQUP1.3;
指示灯
BEEPEQUP3.3;
蜂鸣器
lcdequp0
ceequp2.1;
复位脚
dioequp2.2;
数据脚
clkequp2.3;
时钟
rsequp2.4
rwequp2.5
enequp2.6;
使能端
dqequp3.7
secondequ40h;
秒
minuteequ41h;
分
hourequ42h;
时
dayequ43h;
天
monthequ44h;
月
weekequ45h;
周
yearequ46h;
年
bcdequ47h
hexequ48h
K1EQUP1.4;
查看温度报警设置值,并能调节加减
K2EQUP1.5;
低温报警值加减按键
K3EQUP1.6;
高温报警值加减按键
K4EQUP1.7;
保存设置值并退出
SDABITP1.0;
定义24C02数据线
SCLBITP1.1;
定义24C02时钟线
org0000h
ajmpstart
org0030h
*****************初始化***********************************
start:
MOVSP,#60H
LCALLSET_LCD;
对LCD做初始化设置及测试
LCALLRE_18B20;
DS18B20暂存器操作子程序
LCALLRST;
调用18B20复位子程序(初始化)
///////////////////////////////////////////////////////////////////
lcallds1302csh;
调用1302初始化子程序
lcalllcdcsh;
调用lcd初始化子程序
lcallw1302;
调用1302写子程序
lcallr1302;
调用1302读子程序
lcalldisplay;
调用显示子程序
*************************************************************
main:
CALLMK1;
判断DS18B20是否响应以及初始值的设定:
CALLMK3;
ds18b20的写读及显示加1302时钟显示
AJMPMAIN
MK4:
AJMPMK2;
跳转到错误子程序
MK1:
JNBFLAG1,MK4;
DS1820不存在
LCALLMENU_OK;
DS1820存在,调用显示正确信息子程序
CALLRD_EEPROM;
将报警温度值从EEPROM中读出来
RET
MK3:
调用DS18B20复位子程序
JNBFLAG1,MK4;
DS18B20不存在跳转到错误显示子程序
MOVA,#0CCH;
跳过ROM匹配命令
LCALLWRITE;
DS18B20数据写入操作子程序
MOVA,#44H;
温度转换命令
跳过ROM匹配
MOVA,#0BEH;
读温度命令
LCALLWRITE
LCALLREAD;
调用DS18B20数据读取操作子程序
LCALLCONVTEMP;
调用温度数据BCD码处理子程序
LCALLDISPBCD;
调用温度数据显示子程序
LCALLCONV;
调用LCD显示处理子程序
LCALLTEMP_COMP;
调用实测温度值与设定温度值比较子程序
LCALLPROC_KEY;
调用键扫描子程序
**************************************************************************
LCALLSHIZHONG;
调用1302时钟模块
SJMPMK3
*********************************************************************
SHIZHONG:
movtmod,#01h;
用定时器0,方式一工作
movth0,#70h;
为定时器赋初值
movtl0,#00h
setbtr0
lp1:
jbctf0,lp2;
定时器溢出跳到lp2处并将tf0清零
clrtr0
lp2:
lcallr1302;
调用读1302子程序
lcalldisplay;
调用显示程序
RET
******************LCD初始化**********************************
set_lcd:
CLREN
LCALLINIT_LCD;
初始化LCD
LCALLSTORE_DATA;
将自定义字符存入LCD的CGRAM
///////////////////////////////////////////////////////////////////////////
设置1302初值子程序
ds1302csh:
movsecond,#00h;
miao秒
movminute,#57h;
movhour,#15h;
movday,#17h;
movmonth,#03h;
movweek,#06h;
movyear,#12h;
/////////////////////////////////////////////////////////////////////
lcd初始化子程序
lcdcsh:
movlcd,#38h
lcallxzl
movlcd,#08h
movlcd,#01h
movlcd,#06h
movlcd,#0ch
lcallxzl
/////////////////////////////
1302写数据子程序
w1302:
clrce;
复位脚置低电平
clrclk;
串行时钟置低电平
nop
setbce;
复位脚置高电平
movb,#8eh;
送操作地址
lcallwbit;
调用写字节子程序
movb,#00h;
送操作数
调用写字节子程序
setbclk;
串行时钟置高电平,下降沿有效
clrce;
禁止写入数据
movr0,#second;
将秒寄存器送到r0
movr1,#80h;
将80h送到A
movr7,#7;
将r7送7
//////////////////////////////////////////////////////////////////////////
wloop:
复位脚置高电平,准备写数据
movb,r1;
将r1内的数据送给b
mova,@r0;
将r0内地址中的数送到A
movhex,a;
将a中的数送到十进制寄存器
lcallhex_bcd;
调用十进制转bcd码子程序
movb,a;
将a内的数送给b
incr0;
r0加一
incr1;
r1加一
incr1
setbclk;
串行时钟下降沿写入
禁止写入
djnzr7,wloop;
判断是否将年月日等七组数写入1302
准备写入
movb,#80h;
送操作数
下降沿有效
ret;
子程序返回
写字节子程序
wbit:
movr2,#08h;
给r2送8
w_loop:
mova,b;
b送给a
rrca;
带进位的右移A
movb,a
movdio,c;
sclk上升沿时写入数据
setbclk
djnzr2,w_loop;
判断是否送完
hex转bcd码
hex_bcd:
mova,hex;
将十六进制数送给A
adda,#00h;
daa;
对A进行十进制调整
ret
1302读数据子程序
r1302:
将秒寄存器送到R0
movr1,#81h;
将首读地址送到R1
R7送7
r_loop:
复位脚清零
时钟串行口清零
准备写数据
将r1送到B
lcallrbit;
调用读字节子程序
mov@r0,a;
将a中的数据送到R0所指的地址
加一
clrce
djnzr7,r_loop;
判断是否读完
读字节子程序
rbit:
movr4,#08h;
送8
rloop:
movc,dio;
读IO数据
带进位右移A
clrclk
djnzr4,rloop;
显示子程序
display:
movlcd,#80h
mova,#'
2'
lcallxsj
movlcd,#81h
0'
movlcd,#84h
mova,#2dh
movlcd,#87h
movlcd,#8bh
W'
/////////////////////////////////////////////////////////////
movlcd,#8ch
mova,#3ah
movlcd,#0c2h
lcallxzl
mova,#3ah
lcallxsj
movlcd,#0c5h
lcallxzl
lcallxsj;
以上显示冒号
////////////以下显示动态//////////////////
movbcd,year;
将年送给bcd
lcallbcd_dec;
调用bcd码转十进制子程序
movlcd,#82h;
将显示位置送到lcd
lcallxzl;
调用写指令子程序
movdptr,#tab;
建表
MOVCA,@A+DPTR;
查表
调用写数据子程序
movlcd,#83h;
lcallxzl;
movdptr,#tab;
mova,b;
将b送给A
lcallxsj;
movbcd,month
lcallbcd_dec
movlcd,#85h
lcallxzl
movdptr,#tab
MOVCA,@A+DPTR
movlcd,#86h
movdptr,#tab
mova,b
movbcd,day
lcallbcd_dec
movlcd,#88h
movlcd,#89h
movdptr,#tab
mova,b
movbcd,week
movlcd,#8dh
movbcd,hour
lcallbcd_dec
movlcd,#0c0h
lcallxsj
movlcd,#0c1h
lcallxsj;
以上显示时
movbcd,minute
movlcd,#0c3h
movlcd,#0c4h
lcallxsj;
以上显示分
movbcd,second;
秒数值赋给bcd
movlcd,#0c6h
movlcd,#0c7h
lcallxsj;
以上显示秒
ret
/////////////////////////////;
bcd转十进制
bcd_dec:
mova,bcd
movb,#16
divab;
a中放置十位,b中放置个位
ret
//////////////////////////////
lcd写指令子程序
xzl:
clrrw
clrrs
setben
lcalldelay3
clren
lcd写数据子程序
xsj:
movlcd,a
setbrs
延时子程序
delay3:
movr5,#4;
延时5ms
d0:
movr6,#255
djnzr6,$
djnzr5,d0
表格
tab:
DB30h,31h,32h,33h,34h,35h,36h,37h,38h,39h;
0到9
--------------------------------------------------------------
EEPROM:
MOVR0,#27H;
要写入的数据,TH,TL
MOVR1,#00H;
要保存数据的首地址
MOVR2,#02H;
数据的长度
REP:
CLRA
MOVA,@R0
MOVB,A
LCALLWR_Byte;
调用24c02写子程序
INCR1
INCR0
DJNZR2,REP
RET
-----------------------------------------
WR_Byte:
LCALLBegin;
调用启动24c02子程序
REP_S1:
MOVA,#0A0H;
写器件地址
LCALLSend_B;
调用发送一个字节到I2C总线子程序
LCALLWAITACK;
调用应答信号检测程序
JCREP_S1;
没有应答则重发数据
REP_S2:
MOVA,R1;
写入地址
LCALLSend_B;
调用发送一个字节子程序
LCALLWAITACK
JCREP_S2
REP_S3:
CLRA
MOVA,B;
写入数据
LCALLSend_B
JCREP_S3
LCALLSTOP;
调用停止子程序
LCALLDelay;
10MS延时
//////向IIC总线发送一个字节数据子程序/////////////////////////////
入口参数:
A---待发送数据存放在A中
//////////////////////////////////////////////////////////////////
Send_B:
MOVR7,#08H;
发送位数
S_B:
RLCA
MOVSDA,C
NOP
SETBSCL
CLRSCL
DJNZR7,S_B;
8位发送完毕?
//////检测应答信号//////////////////////////////////////////////
出口参数:
C---是否有应答信号
////////////////////////////////////////////////////////////////
WAITACK:
SETBSDA;
释放SDA信号线
SETBSCL
REP3:
MOVC,SDA
CLRSCL
*****************
RD_EEPROM:
设置读出数据保存首地址
MOVR1,#00H;
送读数首地址
MOVR2,#02H;
要读2个数
REP1:
LCALLRD_Byte;
调用24c02读
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DS18B20 DS1302 项目 报告