温控及pwm的程序

上传人:mg****85 文档编号:34597332 上传时间:2018-02-26 格式:DOCX 页数:11 大小:29.14KB
返回 下载 相关 举报
温控及pwm的程序_第1页
第1页 / 共11页
温控及pwm的程序_第2页
第2页 / 共11页
温控及pwm的程序_第3页
第3页 / 共11页
温控及pwm的程序_第4页
第4页 / 共11页
温控及pwm的程序_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《温控及pwm的程序》由会员分享,可在线阅读,更多相关《温控及pwm的程序(11页珍藏版)》请在金锄头文库上搜索。

1、 ORG 00HLJMP STARTORG 100HSTART: ;-初始化MOV SP,#60H ;初始化堆栈指针Set18B20:;-DS18B20 初始化;DS18B20 复位 ACALL ResetJB RFail,LOOP ;复位失败则直接跳至显示部分;对 DS18B20 发出 Skip ROM 命令MOV A,#0CCHACALL Write ;对 DS18B20 发出温度转换命令MOV A,#44HACALL WriteSetDisT:MOV DisTime,#3 ;设置下一个循环体的循环 8 次LOOP:ACALL Display ;显示JB RFail,Set18B20 ;D

2、S18B20 复位失败时,在显示完一次后重新复位DJNZ DisTime,LOOPJNB DS18B20,$ ;判断 DS18B20 是否已完成温度转换ACALL GetTemp ;从 DS18B20 读出温度值ACALL DealTemp ;温度值处理ACALL SendDisDT ;根据当前系统状态设置显示内容SJMP SetDisT ;根据当前状态给显示模块设置显示参数SendDisDT:MOV Dian,#7FH ;最高位为 0 代表显示小数点;传送温度值MOV A,TempH ;送高位数据MOV VAR,TempL ;送低位数据 ACALL TransDataRET;A 中保存高位值

3、,Var 中保存低位值TransData:;取个位值MOV B,#10DIV ABMOV DisData2,B;取十位值JZ HavNot1 ;判断商是否为 0 MOV B,#10DIV ABMOV DisData3,BJZ HavNot2 ;判断商是否为 0 MOV DisData4,ASJMP XiaoShu ;跳至百位符号处理部分HavNot1:MOV DisData3,#10 ;十位开始没有数字HavNot2:MOV DisData4,#10 ;百位开始没有数字SignJudge:;符号处理部分JNB VAR.7,XiaoShu ;当为负数显示符号MOV A,#10CJNE A,Dis

4、Data3,BWSignMOV DisData3,#11 ;负号在十位SJMP XiaoShuBWSign:MOV DisData4,#11 ;负号在百位XiaoShu:;小数处理部分,用查表法获取小数值,精确到小数点后 1 位MOV A,VARANL A,#0FHMOV DPTR,#XSTabMOVC A,A+DPTRMOV DisData1,ARTransTemp:RETXSTab: DB 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9DS18B20 通迅模块组-复位模块Reset: ;3 微秒高电平SETB DS18B20MOV R7,#250CLR RFail ;清 0

5、 复位失败标记CLR DS18B20;延迟 501uSDJNZ R7,$SETB DS18B20 ;释放总线(拉高数据线);等待 DS18B20 作出复位成功反应,最大等待时间为 69uSMOV R7,#17Wait:JNB DS18B20,RReset ;若 DS18B20 在作出复位成功反应 ,不再等待DJNZ R7,Wait SETB RFail ;70uS 内 DS18B20 作出复位成功反应,置 1 复位失败标记RReset:;延迟 350Us MOV R7,#174DJNZ R7,$SETB DS18B20RET/;-向 DS18B20 写一个字的模块 ,要写的内容提前装入 ACC

6、 中Write:MOV R6,#8 ;写 8 位WriteBit: ;2 微秒高电平SETB DS18B20MOV R7,#3;7 微秒低电平CLR DS18B20DJNZ R7,$;ACC 低位送至 DS18B20RRC AMOV DS18B20,C;延迟 60UsMOV R7,#28DJNZ R7,$;是否已写完 8 位DJNZ R6,WriteBitRWrite:SETB DS18B20RET; /;-从 DS18B20 读回一个字节的内容 ,读回的内容装入 ACC 中Read:MOV R6,#8 ;读回 8 位 MOV A,#0 ;读回的内容装入 ACC 中 ReadBit: ;2 微

7、秒高电平SETB DS18B20MOV R7,#7;2 微秒低电平CLR DS18B20NOP;16 微秒高电平SETB DS18B20DJNZ R7,$;读回一位数据放入 ACC 中 MOV C,DS18B20RRC A;延迟 66UsMOV R7,#33DJNZ R7,$;是否已读完 8 位DJNZ R6,ReadBitRRead:SETB DS18B20RET/;-与 DS18B20 通迅 ,读回两字节温度值,并装入 ACC 中 TempL 和TempH 中GetTemp:ACALL Reset ;复位JB RFail,RGetTemp ;判断复位是否成功;复位成功 ;对 DS18B20

8、 发出 Skip ROM 命令MOV A,#0CCHACALL Write;对 DS18B20 发出读命令MOV A,#0BEHACALL Write;从 DS18B20 读回低 8 位温度值ACALL ReadMOV TempL,A;从 DS18B20 读回高 8 位温度值ACALL ReadMOV TempH,AACALL Reset ;复位JB RFail,RGetTemp ;判断复位是否成功;对 DS18B20 发出 Skip ROM 命令MOV A,#0CCHACALL Write ;对 DS18B20 发出温度转换命令MOV A,#44HACALL WriteRGetTemp:RE

9、T温度数据处理模块DealTemp:;将整数的二进制数部分移到一个字节,符号位和小数部分移到一个字节 MOV R1,#VarMOV Var,TempHMOV A,TempL XCHD A,R1 ;符号位、小数部分至 VAR(R1),整数部分至 ACCSWAP A;整数部分处理JNB Var.7,NotNeg ;判断是否为负数CPL A ;为负数,取反后加 1 得其绝对值;小数部分取反XRL Var,#1FH ;INC VarNotNeg:MOV TempH,AMOV TempL,VarRET 显示模块-显示 DisData(30H)从开始的三个字节保存显示信息Display:MOV DPTR,

10、#Tab;*显示小数部分MOV A,DisData1MOVC A,A+DPTRMOV P2,ACLR Wei1ACALL DelaySETB Wei1;*显示个位MOV A,DisData2MOVC A,A+DPTR;小数点处理ANL A,DianMOV P2,ACLR Wei2ACALL DelaySETB Wei2;*显示十位MOV A,DisData3MOVC A,A+DPTRMOV P2,ACLR Wei3ACALL Delay SETB Wei3;*显示百位MOV A,DisData4MOVC A,A+DPTRMOV P2,ACLR Wei4ACALL DelaySETB Wei4R

11、ET Tab: ;09、空白、负号的编码 DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH ;延迟Delay:MOV R6,#6DD1:MOV R5,#250DJNZ R5,$DJNZ R6,DD1RETENDorg 00hajmp startorg 30h;* 检测键盘状态的程序 *START: mov p0,#0ffh ;置 p0 为输入口,将 P0 口置为 1,用于检查按键是否按下jnb p0.0,QIDONG ;按键 S2 按下,p0.0 为 0,进入启动(正转)程序jnb p0.1,FANZHUAN ;按键 S3 按下

12、,p0.1 为 0,进入反转程序jnb p0.2,JITING ;按键 S4 按下, p0.2 为 0,进入急停程序jnb p0.3,JIASU ;按键 S5 按下, p0.3 为 0,进入加速程序jnb p0.4,JIANSU ;按键 S6 按下, p0.4 为 0,进入减速程序jnb p0.5,TINGZHI ;按键 S7 按下,P0.5 为 0,进入停止程序ajmp start;*启动程序,默认为顺时针转动,转速为 2000RPM*QIDONG:LCALL YANSHI ;调用延时子程序,目的:软件消除按键抖动JNB P0.0,QILJMP START ;软件消抖后,若 p0.0 为 1

13、,则认为按键未按下,回到检测按键状态程序QI: clr p0.6 ;p0.6 接电机 R/S 端,将其清零表示电机可以运行 setb p0.7 ;p0.7 接 DIR 端,为 1,则与 COM 端断开,电机正转mov p2,#0Bh ;p2.0 接 CH1,p2.1 接 CH2,p2.2 接 CH3,将速度设定为 2000RPMlcall XIANSHI ;显示设定速度LJMP START ;执行完启动程序后,回到检测按键状态程序;*反转程序,也即逆时针转动*FANZHUAN:LCALL YANSHI ;调用延时子程序,目的:软件消除按键抖动JNB P0.1,FANLJMP START ;软件

14、消抖后,若 p0.0 为 1,则认为按键未按下,回到检测按键状态程序FAN: clr p2.3 ;接通 BRK 端,使电机急停lcall PANTING ;调用判停程序,能从判停程序中返回,说明机已停setb p2.3 ;断开 BRK 端,解除急停状态clr p0.7 ;接通 DIR 端,使电机逆时针转动lcall XIANSHI ;显示设定速度LJMP START ;执行完启动程序后,回到检测按键状态程序;*急停程序*JITING:LCALL YANSHI ;调用延时子程序,目的:软件消除按键抖动JNB P0.2,JILJMP START ;软件消抖后,若 p0.0 为 1,则认为按键未按下

15、,回到检测按键状态程序JI: clr p2.3 ;接通 BRK 端,使电机急停lcall PANTING ;调用判停程序,若能从中返回,说明电机已停LJMP START ;执行完启动程序后,回到检测按键状态程序;*加速程序,每按一次键,加速 500rpm*JIASU:LCALL YANSHI ;调用延时子程序,目的:软件消除按键抖动JNB P0.3,JIALJMP START ;软件消抖后,若 p0.0 为 1,则认为按键未按下,回到检测按键状态程序JIA: mov a,p2 ;将 p2 的值复制到累加器 a 中anl a,#07h ;取 ch3ch2ch1 的值,并放到累加器 a 中 jz START ;若 a 中值为 0,则速度已经最大,不再加速,回到检测按键状态程序 mov r0,p2dec r0mov p2,r0 ;加速 500rpm(参考电机驱动器说明中的多

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号