温度测控与报警系统汇编程序Word文档下载推荐.docx

上传人:b****5 文档编号:19459079 上传时间:2023-01-06 格式:DOCX 页数:15 大小:18.30KB
下载 相关 举报
温度测控与报警系统汇编程序Word文档下载推荐.docx_第1页
第1页 / 共15页
温度测控与报警系统汇编程序Word文档下载推荐.docx_第2页
第2页 / 共15页
温度测控与报警系统汇编程序Word文档下载推荐.docx_第3页
第3页 / 共15页
温度测控与报警系统汇编程序Word文档下载推荐.docx_第4页
第4页 / 共15页
温度测控与报警系统汇编程序Word文档下载推荐.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

温度测控与报警系统汇编程序Word文档下载推荐.docx

《温度测控与报警系统汇编程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《温度测控与报警系统汇编程序Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。

温度测控与报警系统汇编程序Word文档下载推荐.docx

ORG000BH

LJMPTIMER0

ORG0080H

--------------------------------------------------

MAIN:

;

LCALLTest_Bit

LCALLTest_NUM

MOVTemperatureMAXI,#30;

温度设定25.5<

=正常<

=30.5

MOVTemperatureMAXD,#50

MOVTemperatureMINI,#25

MOVTemperatureMIND,#50

LCALLSetNum

AAA5:

LCALLDispNum

AJMPAAA5

AJMPAAA

LCALLOpen_Timer0Int

AAA:

LCALLRead_Temperature

JMPAAA

*****定时器0中断服务********************************************************

Open_Timer0Int:

MOVTMOD,#01H

MOVTH0,#LOW(65536-10000);

TH0=(65536-10000)mod256

MOVTL0,#HIGH(65536-10000);

TL0=(65536-10000)/256,从55536向上计数10000次

SETBET0

SETBTR0

SETBEA

RET

TIMER0:

ACALLDispNUM

定时器10MS中断

MOVTL0,#HIGH(65536-10000)

CLREA

JNBTemp_COMP_Tag,No_Alarm

MOVA,#13H

ACALLBeep

CLRTemp_COMP_Tag

No_Alarm:

RETi

*****温度传感器********************************************************

Trans_Temperature:

MOVR0,#Start_NUM_Byte

MOVA,Temp_LByte

ANLA,#0F0H

MOV3AH,A

MOVA,Temp_HByte

ANLA,#0FH

ORLA,3AH

SWAPA

MOVB,#10

DIVAB

MOV@R0,A

INCR0

MOV@R0,B

MOVDPTR,#TABB

MOVB,#2

MULAB

MOVCA,@A+DPTR

INCA

MOV@R0,#0F0H

ACALLGet_Temp_Value

ACALLCompareTemp

TABB:

DB0,0,0,6,1,2,1,8,2,5,3,1,3,7,4,3,5,0

DB5,6,6,2,6,8,7,5,8,1,8,7,9,3

/*将温度转换成10进制数,TemperatureI为整数部分,TemperatureD为小数部分*/

Get_Temp_Value:

MOVR0,#Start_NUM_Byte

MOVA,@R0

MOVTemperatureI,A

ADDA,TemperatureI

MOVTemperatureD,A

ADDA,TemperatureD

CompareTemp:

CLRC

MOVR1,TemperatureI

MOVA,TemperatureMAXI

SUBBA,TemperatureI

JCSET_COMP_TAG

AJMPExit_Comp_88

JZCOMP_MAX_D

AJMPCOMP_MIN_I

COMP_MAX_D:

MOVA,TemperatureMAXD

SUBBA,TemperatureD

COMP_MIN_I:

MOVA,TemperatureI

SUBBA,TemperatureMINI

JZCOMP_MIN_D

COMP_MIN_D:

MOVA,TemperatureD

SUBBA,TemperatureMIND

SET_COMP_TAG:

SETBTemp_COMP_Tag

Exit_Comp_88:

/*-------------------------------

读:

在A中写:

在A中检查F0,F0==1则无设备

*-------------------------------*/

Read_Temperature:

CLREA;

屏蔽中断

LCALLCheck_Exist

JBExist_Tag,EXIT_READ;

如果没有应答,返回主程序

MOVA,#0CCH

LCALLSend_Byte;

跳过ROM匹配

MOVA,#44H;

发出温度转换命令

LCALLSend_Byte

SETBEA

MOV48H,#1;

廷时75ms以上准备读

SS2:

MOV49H,#255

SS1:

MOV4AH,#255

SS0:

DJNZ4AH,SS0

DJNZ49H,SS1

DJNZ48H,SS2

JBExist_Tag,EXIT_READ

MOVA,#0CCH;

MOVA,#0BEH;

发出读温度命令

LCALLRead_Byte

MOVTemp_LByte,A

LCALLREAD_BYTE

MOVTemp_HByte,A

LCALLTrans_Temperature

EXIT_READ:

/*----------------------------------

18B20由低电平触发,所以主机平常保持高电平

主机下拉480~960us,然后上拉后延时等待15~60us,然后检测总线是否被下拉,

如果下拉,则表示有设备,18B20下拉信号后会延时60~240us。

--------------------------------*/

Check_Exist:

SETBTEMP_PIN

NOP

CLRTEMP_PIN

MOVR6,#250;

主机发复位脉冲:

MOV:

2周期,DJNZ:

2周期,2+2*250+2+2*48=600us

DJNZR6,$

MOVR6,#48

SETBTEMP_PIN;

主机释放总线,口线改为输入

MOVR6,#35;

延时2+2*35=72us,18B20会在60us内作出响应

MOVC,TEMP_PIN;

将状态保存,F0==0则无设备

MOVExist_Tag,C

MOVR6,#120;

延时2+2+2*120=244us等待18B20释放总线,否则有可能被重新拉低

==========================================================

重新对DS18B20初始化

将设定的温度报警值写入DS18B20

SetTempAlarmValue:

ACAllCheck_Exist

JBExist_Tag,EXIT_SetValue2

MOVA,#4EH;

写暂存寄存器

MOVA,#88H;

TH(报警上限)

MOVA,#08H;

TL(报警下限)

MOVA,#7FH;

12位精确度

EXIT_SetValue2:

发送一个字节程序,字节放在A中

带进位位的右移,每移1位到C中,就将C中的1位数据发送出去

Send_Byte:

PUSHB

MOVB,#8

START_A_BIT:

RRCA

ACALLWriteABit

DJNZB,START_A_BIT

POPB

写一位,下降沿触发18B20接收1位,主机在下降沿之后的15us内必须把数据放到总线上,

18B20会在15~60us内采样数据,所以主机必须保持信号持续75us以上,再次发送一位就再次上拉下降

如果主机一直下拉480us,则会产生复位信号。

所以

PIN=1;

PIN=0;

Delay=5~10us----开始

PIN=0/1(data);

Delay=70us---输出

Delay=2us---保持>

1us间隙发送下1位

WriteABit:

CLRTEMP_PIN;

写开始

MOVB,#3;

2+3*2=8us

DJNZB,$

MOVTEMP_PIN,C;

C内容到总线

MOVB,#28;

等待56Us

释放总线

RET

读1位,15us内由下降、上升沿两个信号触发读

PIN=0;

Delay=5~10us,PIN=1;

----开始

Read_Byte:

读一个字节程序

MOVR5,#8

READ_A_BIT:

LCALLReadABit

DJNZR5,READ_A_BIT

ReadABit:

PUSHB

PUSHACC

先复位至少1US产生读起始信号

置位DAT准备接收数据

MOVB,#10;

等待数据准备好(60us内)2+10*2=22us

MOVC,TEMP_PIN

MOVB,#15;

等待32us+10+22+2=总66us

POPACC

*********数码管********************************************************

/*--------------------------------------------

dispNum

*---------------------------------------------*/

DispNum:

MOVR1,#0H

ST_NUM_Dsp:

MOVA,@R0;

从Start_NUM_Byte开始读取数据,如果高字节大于0则结束。

MOVR5,A;

用R5暂时保存数据,然后获取高4位,低4位inputR5

JNZEXIT_DSP

MOVA,R5

ORLA,R1

MOVDISP_PORT,A;

开始显示数据,

ACALLT1MS

INCR1

AJMPST_NUM_Dsp

EXIT_DSP:

T1MS:

movr5,#00h;

延时子程序

tt889:

movr6,#9

djnzr6,$

djnzr5,tt889

ret

testBit

Test_bit:

MOVA,#11111110b

TTT:

MOVP0,A

RLA

ACALLDELAY

AJMPTTT

SetNum

SetNum:

MOV@R0,#01H

MOV@R0,#02H

MOV@R0,#03H

MOV@R0,#0CH

MOV@R0,#05H

TestNum

Test_NUM:

MOVR0,#0

MOVDPTR,#Num_TABLE

TTT_NUM:

MOVA,R0

JNZNext_NUM

AJMPTTT_NUM

Next_NUM:

MOVP0,A

incR0

-------------------------------------------------------

DELAY:

MOVR5,#10

DEL1:

MOVR7,#200

DEL2:

MOVR6,#200

DJNZR7,DEL2

DJNZR5,DEL1

Beep:

时间参数在A中,时间为A*256*256*12/f

f(时钟频率),输出引脚在头部定义

A中低4位为延时,高4位为声音频率0=高音,1=中;

2=高

------------------------------------*/

BEEP:

PUSH05h

PUSH06h

PUSH07h

MOVR5,A

ANLA,#0FH

XCHA,R5

BEEP_1:

MOVR6,#050H

BEEP_2:

MOVR7,#05FH

BEEP_3:

CJNEA,#0,NextF1

CPLBEEP_Bit

NextF1:

DJNZR7,BEEP_3

CJNEA,#1,NextF2

NextF2:

DJNZR6,BEEP_2

CJNEA,#2,NextF3

NextF3:

DJNZR5,BEEP_1

POP07h

POP06h

POP05h

Num_TABLE:

DB28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h,00H

DB00101000b,01111110b,10100010b,01100010b,01110100b,01100001b,00100001b,01111010b,00100000b,01100000b,00H

END

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

当前位置:首页 > 外语学习 > 其它语言学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1