大连理工大学单片机实验报告docxWord文档格式.docx
《大连理工大学单片机实验报告docxWord文档格式.docx》由会员分享,可在线阅读,更多相关《大连理工大学单片机实验报告docxWord文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
I2C总线
VCC
上拉电阻5K×
2
8位数码管
BUZZ
B5区
8550
10K
保护电阻47欧
103
DS
18B20
1GND
3VDD
DQ
GND
VDD5V
4.7K
B4区
AT89C51
P1.0
P1.1
P1.7
/INT0(P3.2)
P3.3
P3.4
SW1
P1.3
四.外围接口模块硬件电路功能描述
1.DS18B20:
用于测定温度,测量范围-55~+125,分辨率为0.0625℃,数据格式为二进制补码形式。
2.ZLG7290B:
用于数码管动态显示驱动,键盘扫描管理。
能够驱动8位共阴极结构的LED数码管或64位独立的LED,同时还能扫描管理多达64个按键的扫描识别,其中八个键可以作为功能键使用。
接口采用I²
C结构。
3.蜂鸣器:
这里用作报警,为无源蜂鸣器。
五.主程序中主要变量定义
变量名称
内存单元
功能
TEMPER_L
36H
存放温度低四位
TEMPER_H
35H
存放温度高四位
TEMPER
34H
转换后的温度值
TEMPER_BCD
33H
BCD形式温度值
TEMPER_NUM
60H
温度值缓冲单元
WSLA_7290
70H
7290写控制单元
RSLA_7290
71H
7290读控制单元
20-27H
数码管显示缓冲区
28H
存放温度上限值
30-31H
存放温度BCD码个位十位
六.系统软件中各个子程序的功能描述
子程序名称
入口参数
出口参数
功能描述
GET_TEMPER
无
35H,36H
读取18B20的温度值
READ_18200
向18b20读控制字
TEMPER_COV
35H,36H
20H,21H
温度转换成十进制BCD码形式
CF
R3,R4
拆分子程序,拆分送数码管显示
INIT_1820
温度传感器初始化
BUZZER
无无
蜂鸣器控制发声子程序
INT_7290
读取按键外部中断子程序
RDKEY
A
读取键值子程序
DELAY
延时子程序
七.主程序程序流程图
8.程序清单(要求打印格式要规范、重要的语句要有必要的注释)
SDABITP1.0
SCLBITP1.1
TEMPER_LEQU36H
TEMPER_HEQU35H
TEMPEREQU34H;
转换后温度值
TEMPER_BCDEQU33H;
BCD码温度值
TEMPER_NUMEQU60H;
缓冲单元
WSLA_7290EQU70H
RSLA_7290EQU71H
FLAG1BIT00H
DQBITP3.3;
总线控制单元
ORG0000H
LJMPMAIN
ORG0003H
LJMPINT_7290
ORG0100H
MAIN:
MOVSP,#70H
;
ZLG7290复位
CLRP1.7
LCALLDELAY
SETBP1.7
MOV28H,#1EH;
温度上限初始值30度
MOVTMOD,#01H;
模式一,16位计数器
SETBEA;
允许INTO中断
MODE:
JBP1.3,SETTMP;
拨码为0时采集温度
;
温度采集
TMP:
CLREX0
MOV27H,#1FH;
t
LP1:
LCALLGET_TEMPER
LCALLTEMPER_COV
;
7290显示
MOVR7,#08H
MOVR0,#20H
MOVR2,#10H
MOVR3,#WSLA_7290
LCALLWRNBYT
LCALLDELAY
MOVA,TEMPER
判断温度上限
MOV28H,R5
CLRC
CJNEA,28H,rel;
此处报警温度为30度
rel:
JCNET
LCALLBUZZER;
大于等于时蜂鸣器报警
闪烁
MOV28H,#70H;
闪烁命令字
MOV29H,#7FH;
MOVR7,#02H;
设定数据个数
MOVR0,#28H;
设置源数据首地址
MOVR2,#07H;
设置外围器件内部寄存器首地址
MOVR3,#WSLA_7290;
设定外围器件地址
LCALLWRNBYT;
调用显示子程序
LJMPNEXTT
;
设定温度上限
SETTMP:
SETBEX0
7290复位
SETBP1.7
显示设定内容
MOV27H,#0B6H;
S
MOV26H,#9EH;
E
MOV25H,#1FH;
T.
MOVR7,#03H
MOVR0,#25H
MOVR2,#15H
SJMPNEXTT
NET:
MOV28H,#70H;
不能闪烁
MOV29H,#00H
MOVR7,#02H
MOVR0,#28H
MOVR2,#07H
NEXTT:
CALLDELAY
SJMPMODE
GET_TEMPER:
SETBDQ;
定时入口
BCD:
LCALLINIT_1820
JBFLAG1,S22
LJMPBCD;
若ds18b20不存在则返回
S22:
LCALLDELAY1
MOVA,#0CCH;
跳过rom匹配0cch
LCALLWRITE_1820
MOVA,#44H;
发出温度转换命令
CBA:
LCALLINIT_1820
JBFLAG1,ABC
LJMPCBA
ABC:
跳过rom匹配
MOVA,#0BEH;
发出读温度命令
LCALLREAD_18200
RET
WRITE_1820:
;
写ds18b20程序
MOVR2,#8
WR1:
CLRDQ
MOVR3,#6;
延时24us
DJNZR3,$
RRCA
MOVDQ,C
MOVR3,#23;
延时60us
SETBDQ
NOP
DJNZR2,WR1
SETBDQ
READ_18200:
从1820中读出两个字节温度数据
PUSH01H
MOVR4,#2
MOVR1,#36H
RE00:
MOVR2,#8
RE01:
CLRC
CLRDQ
MOVR3,#2
MOVC,DQ
MOVR3,#23H
RRCA
DJNZR2,RE01
MOV@R1,A
DECR1
DJNZR4,RE00
POP01H
RETU8
TEMPER_COV:
将读出的数据转换
PUSHDPH
PUSHDPL
PUSH02H
MOVA,#0F0H
ANLA,TEMPER_L;
舍去小数点后的四位
SWAPA
MOVTEMPER_NUM,A
MOVA,TEMPER_H
ANLA,#07H
ADDA,TEMPER_NUM
MOVTEMPER,A
转换成十进制数显示
MOVB,#10
DIVAB
MOV30H,B;
个位
MOV31H,B;
十位
ANLA,#0FH;
百位
ADDA,B
MOVTEMPER_BCD,A
LCALLCF2;
拆分查表
MOV25H,R3
MOV26H,R4
MOVA,30H
ANLA,#0FH
LCALLCF
MOV24H,R3
处理四位小数位数据
MOVA,TEMPER_L
ANLA,#0FH;
取低四位数据
MOVB,#02H
MULAB;
字节转为字
MOVDPTR,#NUMSEG
MOVCA,@A+DPTR
LCALLCF2
MOV22H,R3
MOV23H,R4
MULAB
INCA
MOVCA,@A+DPTR
MOV20H,R3
MOV21H,R4
POP02H
POPDPL
POPDPH
;
--------------小数部分查表-------------------