大连理工单片机课程设计.docx

上传人:苏美尔 文档编号:8654309 上传时间:2020-12-14 格式:DOCX 页数:38 大小:813.76KB
返回 下载 相关 举报
大连理工单片机课程设计.docx_第1页
第1页 / 共38页
大连理工单片机课程设计.docx_第2页
第2页 / 共38页
大连理工单片机课程设计.docx_第3页
第3页 / 共38页
大连理工单片机课程设计.docx_第4页
第4页 / 共38页
大连理工单片机课程设计.docx_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《大连理工单片机课程设计.docx》由会员分享,可在线阅读,更多相关《大连理工单片机课程设计.docx(38页珍藏版)》请在三一文库上搜索。

1、大连理工单片机课程设计作者 :日期:大连理工大学本科设计报告题目 : 基于 DS18B2、 7290 的温度采集系统设计课程名称 :单片机综合设计实验学院(系 ):信息与通信工程学院专业 :电子信息工程班级:电子学号:学生姓名:成绩:20 6年5月6日题目:1 设计要求1. 利用 DS18B20实现现场环境温度的采集;2. 利用 L 7290实现温度数据证书的十进制显示;3. 默认一个上限温度的报警 ( 蜂鸣器 ); . 能够利用 G7290B的键盘操作修改“上限报警值”;5可以显示温度的小数位, 以提高温度检测的分辨率;6. 程序中必须有中断环节。2 设计分析及系统方案设计利用 P3.3 口

2、采集 D 18B20的温度信息 , 采集后,通过 I2C 协议控制 LG7 0 显示温度信息,并且将小数部分显示出来 , 通过 P.3 连接一个拨码用来做模式控制 , 控制是温度显示状态模式或者设定温度上限模式 , 其中温度上限存放在 28单元中。利用 T0 定时器控制蜂鸣器发声一段时间,超过温度上限报警声音提示,同时数码管进行闪烁以报警。利用 I T0 外部中断读取按键值,用于设定上限温度并保存。3?系统电路图P1P1P1 主程序中主要变量说明内存单元的定义、功能等。变量名称内存单元功能TEMPR_L36H存放温度低四位TMPER_H3存放温度高四位TEMPR4H转换后的温度值TMER_BC

3、D33HBC形式温度值TEPER_N M60温度值缓冲单元WSLA_7290707 0 写控制单元RSLA_7271H729读控制单元20-2 H数码管显示缓冲区28H存放温度上限值30-31H存放温度 BCD码个位十位6? 系统软件中各个子程序的功能描述子程序的名称、功能 ,以及入口、出口参数。子程序名称GET_TME功能 描述读取 B20 的温度值WRITE_1820向 18b0 写控制字 AD_18200向 1820 读控制字TEPER_COV温度转换成十进制 BC码形式C拆分子程序 , 拆分送数码管显示INIT 12温度传感器初始化BUZZE?蜂鸣器控制发声子程序 ?INT729:读取

4、按键外部中断子程序RDKE读取键值子程序DELA延时子程序7? 主程序程序流程图 程序清单( I2C 库函数省略 )?DBIT? 1 0?SCLBIT P1?TEMP _LEQ 36 TEMPERE 3H?TMPREQU 4H?; 转换后温度值? T MPER_B D EQU 33H ?; C码温度值?TEMPER UMEQU 60H ?; 缓冲单元 A_ 0EQU 70H?RSL_720EQU 71H ? AG1B T 00H?QBITP3.3;总线控制单元?OG?000H? L M MAIN ORG?0003H?LJMPNT_ 9ORG?0100MAIN:?MO ?SP,#70H?;Z G

5、290 复位?CLR?P1.7?LCAL DE A? TB1.7 ?MV28?H,#1H?;温度上限初始值30 度? MOVTMOD,#0H ? ;模式一, 6 位计数器?SETB A ? ; 允许中断? ODE: JB . , STTMP?; 拨码为时采集温度; 温度采集TMP:? LREX0?OV27H,#1FH ?;t P: ?LCA L GT_TEPR? AL?TME_C V?; 29显示?MOVR7,#08H? MO?R, # 0H? M V 2,#10HMOV3,# SLA7 0?LCALL WRNYT? LCALL?DELAY ?MOV?,TEMPR? ; 判断温度上限MV?8H

6、, R5CLRC? C NE A, 8H, l ;此处报警温度为 30 度 el :ET?LCALL BUZZER?; 大于等于时蜂鸣器报警?; 闪烁M28H, # 0H?; 闪烁命令字? M V 9,#7 H? ;闪烁命令字?M 7,#2H?; 设定数据个数?MOVR,# 8H;设置源数据首地址? V 2,#0 H? ;设置外围器件内部寄存器首地址?O R, WSLA_72 ;设定外围器件地址LALL?WRNBYT?; 调用显示子程序? LCL? LY?LJMP?N XT? ?; 设定温度上限STMP:?SETX;720 复位? CLR?P1.7 ?LC LL?DE AYSET?P1.7?

7、? ; 显示设定内容?MOV?27H,# B6H?;S OV26?,# E ;E?MV25?H, 1FH; .M?R7,#03? MO 0, 25 ?MOVR2,# 5 V R3,# LA720?LCAL?WRNB?CALLDELY? SJM N XTTNE:MOV28H,#70?;不能闪烁?MOV29H, 00H?MOR7,#0 H?MOR0,#2? V?R2,#07H?MVR3,WSLA7290? LC L? RNYT? LCAL DL EXTT:?CLL?DEASJM?MDE ET_T MPE:? ETB DQ?; 定时入口BD:?CALL?INIT_18 ?JB LAG1,2?LJM?

8、 CD?; 若 ds18b20 不存在则返回S2: ?CAL?DELAY1MOVA,#0 C ?; 跳过 ro 匹配 0cch?CAL TE1820?MOVA, 4; 发出温度转换命令?LCAL W TE_12?LCALL DELYCBA:?LCA L?INIT_18 ?BFAG ,AB? LJMP CB BC:?LCALL? LAY1?MOA,#0 CH?; 跳过 ro 匹配LCALL WRTE_182O?A,#0BE?; 发出读温度命令LCALL WRI E_18 0LCAL REA _182 0?R RITE_18 0: ?;写 ds18b 0 程序?MOV?R2,#?CLC R:CL

9、?MOVR3,#6?; 延时 4us?DNZ 3, ? R C A?MV?DQ,C OV?R ,# 3 ? ; 延时 0us?DJNZ R3, $?SETB ?Q? NOP?DNZ?2,WR1? TBDQ? ERAD_ 820:?; 从 8 0 中读出两个字节温度数据? PUSH? 1?MO ?4,#2?M ?R1,#36RE00: MOV?R2,#8RE1: ?LSETB?DQ?NP ?DQ? P?OPSET? Q?MOV?R3,#2?D ZR3, OV?, DQ VR3,#2H?DJN R3,$?R ? D Z ,R01?MOV?1,A?DE?R1? DJN?R4,RE00 POP?01H

10、RETTEMPE_CO:?; 将读出的数据转换?PUSH H?PSH?DPL?PUSH?02H?MV?A,#0F0H?NL,TEMPER_L; 舍去小数点后的四位?SWAP ? MOV?TE ERNU,A? OV A,TEMPER_H AL A,#0 WAP?ADA,TEMPR_?MOV?EMP R,A? ?; 转换成十进制数显示?OVB,#10? V?BMO3H,B ?; 个位? MOV?B, # 0DVA?MV3H,B ?; 十位?ANLA, FH?;百位WAP AADD?A,B? O TMPE_B , ?LA L?CF2? ;拆分查表?MV?5H,?MOV26H,R4? M V , 0H

11、 ANL?A, 0 H CALL C? MOV24H,R3? ?;处理四位小数位数据?M ?A,TEME_L? NL? ,#0 H ?; 取低四位数据?MOV?B,#2H?M ?ABMOVDPTR,#NUMSEG? OVC A,A+D R?OV?TEMPER_BCD,A? LCALL?CF?MV2H,R3MOV3H,R4?MO ?A, EMPER_L? ANL, #0H ?MV?B, 0H?ULA?INCAOA,ADPTR?MOV?TEMPE _BCD,?L LF2? V? 0H,R3? V?1H,R4?PP02?H?PODPPOPDP?RET;- - 小数部分查表 - - - - - - N

12、UM G: DW?000 ,0625H,1 50H, 7 H,25 0 ,3125H,3750H, 437 ?W500H,52H,650H,68 H,75 0,8125H, 8 5 H, 375H?;- - - - - -; - - - - 拆分显示整数子程序 - -CF:?PUS02H?PS ?PH? PUH?DPL?MOV?DPT,# DSG?MVR2, TEPER_BCD?ANLA,#0FH?MVC?A, +PTR?MVR, ? MOVA,R2?SWAP A?ANL, # FOC?A,A+DTR?OV?R,A?INC?R; 加上小数点? OP DL?OPDPP? 2? T; - - -

13、- - -; -拆分显示小数子程序-CF:?PUS02? UH?DPH ?PU DPL? PUSH ACC? MOV?DPTR,#LEDSEG ?MOV R2,EMPER_BC?MOV?A,R2ANLA,#0FMOV?A, + PTR? M 3, ? V , 2? SWAP A? A L A, FH?OC A,A+PTR ?MOVR,A; 加上小数点?PP?ACCP?DPLOP?DPH?PO02?H? RE; - - - - - - - - - - - -; - - -led 字型码 - - - - -LE EG:?DB0?FCH,6H,0DH,0F2H,6H, B6H,0BEH,0E4B F

14、EH, 0F6H,0E ,3EH, CH,7AH,9EH,8; - - - - - - - - - INIT_182 :?SE B D?NOP? CLRDQOVR0,#0HTS1: ?DJNZ?R0,TS1?; 延时 300us BD?MOR0, # 5H?; 6uTR2:?JNZ?0,TSNB?DQ,TSR3JMP R4?; 延时TS3: ?SEB?FLAG?;致标志位? LJMP? SR5 ? ?;ds1 20 存在TR4: C R?LG? ;清标志位? L P TSR7?;ds 8b20 不存在TSR :OVR0,#06BH; 延时 200usTR6:?DJNZR, STSR:S B D

15、Q? TDEL 1:MV?7,# 0H?;80us 延时? NZ?R7,?RET;- - 蜂鸣器驱动子程序 - - - - U :?P SH 07MOV?7,#00HOVTL, 33H? ; 设置定时 0.5 s 初值MOTH, #0FESETB?TR?; 启动 t0WIT: JBT0,$?CLR?TF0MO? L0,# 3H? V T, #0FEH? LP?D N ?R7,WATCL? 0S TB?P1.2? OP0?H RET;- - - - - -;- - - - 外部中断服务程序 - -IN 7290:PUSH0HP S 01?P SH02?HPUS03HPUH?4HP SH 7?PU

16、 AC SH?SJMD1 1:JB?P 2,$? ; 以查询方式等待下一次按键操作SWP?A?CL?DKEY?CJNE?A, AH,WAITT? ;容错功能调整WA T:?JNCD1?MOTEM _CD,A? LCALL?CF?MVB,#0AH?MLABOR5,? V23?H, R3 OV?7, 1HMVR0,#3H?OVR2, 13H? V 3,#WSLA_720CALL?WR BYKY2:JB?P 2, ?;以查询方式等待下一次按键操作CAL?DEY? JN ,# H,WAI 2 WAITT: JNC?KEY2MOVTE R_ D, ? LCAL F2? OV?A,R5? DD? , MP

17、ER_BD ?MOV R5,?MO2? ,R?MO 21?H,#C ?;C? M 7, 2H ?MOVR,#2 H?O R2,#1 ?OV3,#WSA_7290LCAL WRNBYT?; 确定键 MF:?JB P3.2 ,$?; 等待确认键?LALL?DKY?JN?A,# FH,COMF?MOV28H,R5; 上限值放入2中?DOWN:;72 0 复位C R? 1.7?L ALL EA?S TB P1 7CLE0?; 必须清标志?POPSWPCCP 07?HPO4H? P 0HPOP?02?O0HRETI;- - - - - - -; - - - 读取键值子程序(键值保存在中) -RDEY:

18、MV R0,MOV?R7, #0?OV?R2,#01HMO?3,#WS A 720? MOV?R4,RSLA_720LCALL DADD MOVA,1FHEC A? RET;- - - - - - - - - -; - -延时子程序 - - -DLAY:US 00H?;延时子程序? PUSH 01H? MOV1, 00 LP:?OV? 1,# 0H ?DJNZ?R ,$? DJZ R0, P? PO H? POP?00?;- - - - - - - - ; 【附录一】由汇编语言编制的 I2C 通讯子程序;【提示】下列程序是在系统时钟为12MHZ(或11.0592MH),即 NOP指令为1微秒左

19、右。;(1)带有内部单元地址的多字节写操作子程序 RNBYT;* * * * * * * * * * * *;通用的 I C 通讯子程序(多字节写操作); 入口参数 R7字节数 , 0:源数据块首地址; 原数据块首地址; R从器件内部子地址 ; 3:外围器件地址(写 ); 相关子程序 W YT、 O、 CACK、ST; * * * * * * * * * *WR Y: ?PU HPSW?USH?ACC ?WADD:?MOA, 3; 取外围器件地地址(包含r/w 0)? LCALL STA?; 发送起始信号 S ?CALLWRBYT ?; 发送外围地址? A ? CK ?; 检测外围器件的应答信

20、号?B?F0,WRADD ; 如果应? OV? A, 2?CALL?WRBYT? ; 发送内部寄存器首地址? LCAL CCK? ; 检测外围器件的应答信号?JB?F,WRADD;如果应答不正确返回重来 ? DA:?OV ?, R0?L LLRBY?;发送外围地址?LALL CACK?; 检测外围器件的应答信号?BF, RADD; 如果应答不正确返回重来? INC?DJNZR7 ,WRDA?CALL?STOP?POP?C?PO?PSW T;* * * * * * * * * * * * *;(2)带有内部单元地址的多字节读操作子程序R ADD;* * * * * * * * *;通用的 I2

21、通讯子程序(多字节读操作);入口参数 R7 字节数 ; 目标数据块首地址; R2从器件内部子地址; R3器件地址(写 ) ;R器件地址 ( 读); 相关子程序 WR YT、STOP、CACK、S、 MNAK; * * * * * * * * * * * ?RDADD:PUS?PUH ACC?P W ? ; 存放于;从 P F 3 的0 -26H 单元02H单元读入7 个参数RADD1:LCALL?STA?M ?A, R3?; 取器件地址(写 )?LCALL?W YT; 发送外围地址? CALL?CACK? ; 检测外围器件的应答信号?J?F0,RDAD1 ; 如果应答不正确返回重来MO?A,

22、2 ?; 取内部地址 ?LCAL?WRBY;发送外围地址?LCAL CAC? ;检测外围器件的应答信号?JB?,RDAD 1;如果应答不正确返回重来?CAL?S AMOV?A,R4?; 取器件地址(读)?LCAL?WBY ?;发送外围地址?CLLCA?;检测外围器件的应答信号J ?F0,RDADD1 ;如果应答不正确返回重来 DN: LCALL RBYT ?MOV?0,A?DJNR7, A K?LALL MN CKCALL STOPPOP?ACC OP? PSRA:CALL?MACK?I C?R0JMP DN;(3) 2C各个信号子程序; * * * * * * * * * * * * * *

23、 ; ?启动信号子程序;* * * * * S : SETB?SDA; 启动信号S?SETB?CL?NO ?; 产生 .7US 延时?OP?OP? NOP ?NOP? CL?SA?NOP?; 产生 4.7US 延时?OPNOP? N P?NO? CLR?RE;* * * * * * * * * * * * * * *;?停止信号子程序P; * * * * * * * *STP: CLR? DA ?; 停止信号STBCL?NOP?; 产生 4.7US 延时NOP?OP?O OP?ET SDA?O ? ;产生 4.7US 延时NOP?NPNO? N P?L?SC? CLR SDA R; * * * * * * * * * * * * *;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1