基于16F877单片机的散热器控制系统设计文档格式.docx
- 文档编号:19338159
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:18
- 大小:19.26KB
基于16F877单片机的散热器控制系统设计文档格式.docx
《基于16F877单片机的散热器控制系统设计文档格式.docx》由会员分享,可在线阅读,更多相关《基于16F877单片机的散热器控制系统设计文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
定义状态寄存器中的页选位RP1
RP0EQU05H;
定义状态寄存器中的页选位RP0
ZEQU02H;
定义状态寄存器中的0标志位Z
CEQU00H;
定义状态寄存器中的0标志位C
#DEFINEFR(PORTD,6)
#DEFINESR(PORTD,7)
#DEFINEDQ(PORTB,2)
#DEFINEDIR(TRISB,2)
ORG00H
GOTOMAIN;
转主程序
ORG04H
GOTOINT_PR1;
转T1中断服务子程序
ORG60H
MAIN:
CLRFFR;
报警标志清零
MOVLWox16
MOVLWF46H;
预置室内上限温度初值
MOVLWox10H
MOVWF47H;
预置室内下限温度初值
MOVLWox5F
MOVWF48H;
预置采暖表面温度初值
MOVLWox00
MOVWF49H
MOVLWoB0H;
定时器50ms定时常数
MOVWFTMR1L
MOVLW3CH
MOVWFTMR1H
MOVLWox12C;
置15s软计数器初置
MOVWFCNT
BSFPIE1,TMR1IE;
允许定时器1中断
MOVLWOC0H
MOVWFINTCON;
开放中断
BSFT1CON,TMR1ON;
启动定时器1
MAIN1:
CALLDISPLY;
调显示子程序
CALLKEYBOARD_PRO;
调键盘管理子程序
RETLW00H
***********************中断服务子程序*************************
INT_PR1:
MOVLWOB0H
MOVWFTMR1L
MOVLWox3C
MOVWFTMR1H;
重置定时器1初值
MOVLWox12C
MOVWFCNT;
重置软计数器初值
DECFSZCNT,1;
15s到否,不到返回
GOTOHERE
CALLTIN_18B20;
调用温度检测子程序
MOVLWTEMP1
MOVWFBT1;
当前温度送显示缓冲区
MOVLWTEMP2
MOVWFBT0
CALLDISPLY1;
显示当前温度
CALLALARM;
调用温度越限报警子程序
HERE:
RETFIE
***********************键盘子程序*************************
KEYBOARD_PRO:
CALLQUERY_KEY
BTFSCSTATUS,Z
GOTOKEYBOARD_RET;
;
无键按下,返回
CALLDELAY
CALLDELAY;
加长延时时间,消除抖动
GOTOKEYBOARD_RET;
误读键,返回
MOVFPORTB,0
MOVWFPORT_BUF;
读取键扫描值
BTFSSPORT_BUF,0
GOTOSECOND_KEY;
第一个键没按下
MOVLWox00;
第一个键按下,该键号值为
CALLWAIT_KEY00H
CALLKEY_00
SECOND_KEY:
BTFSSPORT_BUF,0
GOTOTHIRD_KET;
第二键没按下
MOVLW01H;
第二个键按下时,该键号值为
CALLWAIT_KEY01H
CALLKEY_01
WRIT_KEY:
CALLQUERY_KEY;
等待键释放
BTFSSSTATUS,Z
GOTOWAIT_KEY;
未释放,等待
BSFAGC_STA,KEY_FLAG;
置键盘按下标志
MOVFKEY_VALUE,0
GOTOKEYBOARD_RET
RETURN;
扫描结束,返回
QUERY_KEY:
全扫描,判断有无键按下
BANKSELPORTB
XORLW0FH;
变正逻辑,高电平有键按下
ANDLW0FH;
屏蔽高4位,Z=0有键按下
RETURN
KEYBOARD_RET:
RETURN
延时程序:
DELAY:
MOVLWoxC8H
MOVWFREG
DEL1:
NOP
DECFSZREG,1
GOTODEL1
KEY_00:
00键号功能处理(-1键)
BTFSSPORTB_BUF,0;
测试00号键端口的电平
GOTOKEY_01状态
MOVLWox47
MOVWFFSR
DECFINDF,1;
温度上限值-1
MOVLWox16
SUBWFINDR,0
BTFSSSTATUS,C;
判断温度上限值借位否?
CLRFINDR
GOTOCALLKEYBOARD_PR0
KEY_01:
01号键功能处理(+1键)
BTFSSPORTB_BUF,1
GOTOKEY_00
MOVLWox47H
INCFINDF,1;
温度下限值+1
MOVLWox10
SUBWFINDF,0
BTFSCSTATUS,C;
判断温度下限值借位否?
CALLKEYBOARD_PRO
GOTOBB
BB:
MOVWFINDF
***********************温度显示子程序*************************
DISPLY:
CLRFPORTC ;
清口C
CLRFPORTD ;
清口D
CLRFNUMDISP
BSFSTATUS,RP0 ;
选存储体1
BCFSTATUS,RP1
CLRFTRISC ;
置口C为输出
CLRFTRISD ;
置口D为输出
BCFSTATUS,RP0 ;
选存储体0
对显示的数据进行二-十进制编码
BCD:
MOVFNUMDISP,0
ANDLWox0F
XORLWox0A
GOTODISPLY1
MOVLW06H
ADDWFNUMDISP
显示十位BCD数,对应LED
(1)
DISPLY1:
SWAPFNUMDISP,0
ANDLWox0F;
取十位BCD数
CALLCODETAB;
取段码
MOVWFPORTC;
送段码至口C
MOVLWox01;
LED为共阴极
MOVWFPORTD;
选通十位LED
CALLDLYTIM;
调用延时子程序
显示个位BCD数,对应LED
(2)
MOVFNUMDISP,0
ANDLWox0F;
取个位BCD数
CALLCODETAB;
送段码口至C
MOVLWox02
选通个位LED
CALLDLYTIM
显示两位设定温度值的子程序如下:
DISPLY2:
CLRFNUM_SET
MOVLWox13
MOVWFNUM_SET
MOVFNUMSET,0
ANDLWox0F
XORLWox0A
BTFSSSTATUS,Z
GOTODISPLY2
MOVLW06H
ADDWFNUMDISP_3
DISPLY3:
MOVLWox03;
LED共阴极
MOVFNUM_SET,0
MOVLWox04
调用延时子程序
LED段选码表
CODETAB:
ADDWFPCL;
加偏移量至PCL
RETLWB‘00111111’;
0的段码
RETLWB‘00000110’;
1的段码
RETLWB‘01011011’;
2的段码
RETLWB‘01001111’;
3的段码
RETLWB‘01100110’;
4的段码
RETLWB‘01101101’;
5的段码
RETLWB‘01111101’;
6的段码
RETLWB‘00000111’;
7的段码
RETLWB‘01111111’;
8的段码
RETLWB‘01101111’;
9的段码
延时子程序
DLYTIM:
MOVLWox60
MOVWFDLYCNT1
CLRFDLYCNT2
DLOOP:
DECFSZDLYCNT2
GOTODLOOP
DECFSZDLYCNT1
***********************温度检测子程序*************************
TIN_18B20:
BSFSTATUS,RP0
BCFINTCON,GIE;
使用DS18B20一定要禁止任
CALLINT何中断
MOVLWoxCC
CALLWRITE;
送入跳过ROM命令
MOVLWox44
送入温度转换命令
CALLTEMPER_COV
CALLINT;
温度转换完全,再次初始
MOVLWox55化DS18B20
送入匹配ROM命令
MOVLWox28
发第一个DS18B20序列号
MOVLWox10(28H,10H,46H,E2H,00H,
CALLWRITE00H,00H,7EH)
MOVLWox46
CALLWRITE
MOVLWoxE2
CALLWRITE
CALLWRITE
MOVLWox00
MOVLWox7E
MOVLWoxBE
送入读温度暂存器命令
CALLREAD
MOVLWox51
MOVWFFSR
MOVWFINDR;
读出温度值低字节存入51H
MOVLWox50
读出温度值高字节存入50H
CALLINT;
再次初始化DS18B20
MOVLWox55
CALLWRITE;
MOVLWox28
发第2个DS18B20
MOVLWox24(28H,24H,C5H,39H,00H,
CALLWRITE00H,00H,5FH)
MOVLWoxC5
MOVLWox39
MOVLWox5F
MOVLWox53
MOVFFSR
读出温度值低字节存入
CALLREAD53H
MOVLWox52
读出温度值高字节存入
BSFINTCON,GIE52H
INT:
初始化DS18B20子程序
BCFINTCON,GIE
L0:
BCFDQ;
DS18B20总线为低复位
MOVLWoxC8电平
MOVWFCNT
L1:
总线复位电平保持60us
GOTOL1
BSFDQ;
释放DS18B20总线
MOVLWox14
L4:
释放DS18B20总线保持
GOTOL460us
BCFSTATUS,C;
清存在信号
MOVLWox00
IORWFDQ,0
MOVWFCOUNT1
DECFSZCOUNT1,1;
判断是否存在,若不
GOTOL0存在,则重新来
NOP
L5:
IORWFDQ,0
GOTOL3
DECFSZCNT,1
GOTOL5
CALLL0
L3:
MOVLWoxF0
L2:
GOTOL2
WRITE:
向DS18B20写操作
BCFINTCON,GIE命令子程序
MOVLWox08;
写入DS18B20的位数
MOVWFWREG1一个字节8个位
WR1:
BSFDQ
MOVLWox08
MOVWFWREG2;
把一个字节分成8
RRCFWREG2个位环移给C
写入DS18B20总线
WR2:
要处于复位状态
DCFSZWREG2,1;
DS18B20总线复位
GOTOWR2保持16us
BTFSSDQ;
写入一个位
BCFSTATUS,C
BTFSCDQ
BSFSTATUS,C
MOVLWox14
MOVWFWREG2
WR3:
DECFSZWREG2,1;
等待40us
GOTOWR3
DECFSZWREG1,1;
写入下一个位
GOTOWR1
重新释放DS18B20
RETURN总线
READ:
连续读8个位
MOVWFWREG4
RE1:
CLRFDQ;
读前总线保持为低
MOVLWox04
MOVWFWREG2
BSFDQ;
开始读,总线释放
RE2:
持续8us
GOTORE2
从DS18B20总线读BCFSTATUS,C得一个位
BTFSCDQ
BSFSTATUS,C
RRFDATE,1;
把读得的位值环移
MOVLWox14给A
MOVWFWREG3
RE3:
DECFSZWREG3,1;
持续60us
GOTORE3
DECFSZWREG4,1;
读下一个位
GOTORE1
RETURN总线
***********************16位转8位子程序*************************
TEMPER_COV:
MOVLWox50
MOVWFTEMPER_H;
第一个DS18B20温度值
MOVLWox51低字节送入显示缓冲变量
MOVWFTEMPER_L;
读出的温度数据转换成
CALLTEMPER_COV0;
BCD码
MOVFPTEMPER_NUM,TEMPER_NUM1;
保存变换后的温度
MOVLWox52数据
将第2个DS18B20
MOVLWox53温度值低字节送往显
MOVWFTEMPER_L示缓冲变量中
CALLTEMPER_COV2
MOVFPTEMPER_NUM,TEMPER_NUM2;
TEMPER_COV0:
数据
MOVLWoxF8
CPFSLTTEMPER_H;
判断温度值是否小于?
GOTOTEM0;
若不是,跳转TEM0
MOVLWox01;
若是,则置标志位FLAG
MOVWFFLAG
MOVWFTEMPER_H
COMFTEMPER_H,1;
高位温度值取反
MOVWFTEMPER_L
COMFTEMPER_L,1;
低位温度值取反
INCFTEMPER_L,1
TEM0:
ANDWFTEMPER_L,1
SWAPFTEMPER_L,0
MOVWFTEMPER_NUM
MOVFTEMPER_L,0
BTFSCTEMPER_L,3
INCFTEMPER_NUM,1
GOTOTEMPER_COV1
TEMPER_COV1:
MOVLWox0F
ANDWFTEMPER_H,1
SWAPFTEMPER_H,0
XORWFTEMPER_NUM,1
CALLDISPLY1
TEMPER_COV2:
MOVLWoxF8
CPFSLTTEMPER_H
GOTOTEM0
MOVLWox01
MOVWFFLAG
MOVLWox52
COMFTEMPER_H,1
MOVLWox53
COMFTEMPER_L,1
***********************温度报警子程序*************************
ALARM:
BCFFR
MOVFTEMPER_NUM1,1;
取第一个DS18B20温度值
MOVLWox10
MOVWFox47,0;
ox47单元内容位ox10
CPFSEQTEMPER_NUM1;
测量值是否等于下限值?
GOTOLOOP0;
不等时,转向LOOP0
BCFSR;
相等时,固态继电器断开
CALLDISPLY
LOOP0:
CPFSGTTEMPER_NUM1;
测量值是否大于下限值?
GOTOLOOP1
GOTOLOOP2;
是,则转向LOOP2
LOOP1:
BCFSR
LOOP2:
MOVWFox46,0;
ox46单元的内容是ox16
MOVFTEMPER_NUM,1
CPFSLTTEMPER_NUM1;
测量值是否小于上限值?
GOTOLOOP3;
不是,则转向LOOP3
GOTOLOOP4;
是,则转向LOOP4
LOOP3:
BSFFR;
高于上限值,蜂鸣器报警
BSFSR
LOOP4:
BCFSR
CALLDISPLY
ALARM1:
采暖表面温度报警处理
BCFFR
MOVFTEMPER_NUM2,1;
取第二个DS18B20温度值
MOVLWox5F
MOVWFox48,0
CPFSGTTEMPER_NUM2;
测量值是否大于上限值?
GOTOLOOP5;
不是,则转向于LOOP5
GOTOLOOP6;
是,则转向于LOOP6
LOOP6:
BSFSR;
高于上限值,固态继电器断开
LOOP5:
BCFFR
CALLDISPLY
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 16 F877 单片机 散热器 控制系统 设计