温控及pwm的程序.docx_第1页
温控及pwm的程序.docx_第2页
温控及pwm的程序.docx_第3页
温控及pwm的程序.docx_第4页
温控及pwm的程序.docx_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ORG 00H LJMP START ORG 100HSTART: ;-初始化 MOV SP,#60H ;初始化堆栈指针Set18B20:;-DS18B20初始化 ;DS18B20复位 ACALL Reset JB RFail,LOOP ;复位失败则直接跳至显示部分 ;对DS18B20发出Skip ROM命令 MOV A,#0CCH ACALL Write ;对DS18B20发出温度转换命令 MOV A,#44H ACALL WriteSetDisT:MOV DisTime,#3 ;设置下一个循环体的循环8次LOOP: ACALL Display ;显示 JB RFail,Set18B20 ;DS18B20复位失败时,在显示完一次后重新复位 DJNZ DisTime,LOOP JNB DS18B20,$ ;判断DS18B20是否已完成温度转换 ACALL GetTemp ;从DS18B20读出温度值 ACALL DealTemp ;温度值处理 ACALL SendDisDT ;根据当前系统状态设置显示内容 SJMP SetDisT ;根据当前状态给显示模块设置显示参数SendDisDT: MOV Dian,#7FH ;最高位为0代表显示小数点 ;传送温度值 MOV A,TempH ;送高位数据 MOV VAR,TempL ;送低位数据 ACALL TransData RET;A中保存高位值,Var中保存低位值TransData: ;取个位值 MOV B,#10 DIV AB MOV DisData2,B ;取十位值 JZ HavNot1 ;判断商是否为0 MOV B,#10 DIV AB MOV DisData3,B JZ HavNot2 ;判断商是否为0 MOV DisData4,A SJMP XiaoShu ;跳至百位符号处理部分HavNot1:MOV DisData3,#10 ;十位开始没有数字HavNot2:MOV DisData4,#10 ;百位开始没有数字SignJudge:;符号处理部分 JNB VAR.7,XiaoShu ;当为负数显示符号 MOV A,#10 CJNE A,DisData3,BWSign MOV DisData3,#11 ;负号在十位 SJMP XiaoShuBWSign:MOV DisData4,#11 ;负号在百位XiaoShu:;小数处理部分,用查表法获取小数值,精确到小数点后1位 MOV A,VAR ANL A,#0FH MOV DPTR,#XSTab MOVC A,A+DPTR MOV DisData1,ARTransTemp: RETXSTab: DB 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9DS18B20通迅模块组-复位模块Reset: ;3微秒高电平 SETB DS18B20 MOV R7,#250 CLR RFail ;清0复位失败标记 CLR DS18B20 ;延迟501uS DJNZ R7,$ SETB DS18B20 ;释放总线(拉高数据线) ;等待DS18B20作出复位成功反应,最大等待时间为69uS MOV R7,#17 Wait: JNB DS18B20,RReset ;若DS18B20在作出复位成功反应,不再等待 DJNZ R7,Wait SETB RFail ;70uS内DS18B20作出复位成功反应,置1复位失败标记 RReset: ;延迟350Us MOV R7,#174 DJNZ R7,$ SETB DS18B20 RET/;-向DS18B20写一个字的模块,要写的内容提前装入ACC中Write: MOV R6,#8 ;写8位 WriteBit: ;2微秒高电平 SETB DS18B20 MOV R7,#3 ;7微秒低电平 CLR DS18B20 DJNZ R7,$ ;ACC低位送至DS18B20 RRC A MOV DS18B20,C ;延迟60Us MOV R7,#28 DJNZ R7,$ ;是否已写完8位 DJNZ R6,WriteBitRWrite: SETB DS18B20 RET; /;-从DS18B20读回一个字节的内容,读回的内容装入ACC中Read: MOV R6,#8 ;读回8位 MOV A,#0 ;读回的内容装入ACC中 ReadBit: ;2微秒高电平 SETB DS18B20 MOV R7,#7 ;2微秒低电平 CLR DS18B20 NOP ;16微秒高电平 SETB DS18B20 DJNZ R7,$ ;读回一位数据放入ACC中 MOV C,DS18B20 RRC A ;延迟66Us MOV R7,#33 DJNZ R7,$ ;是否已读完8位 DJNZ R6,ReadBitRRead: SETB DS18B20 RET/;-与DS18B20通迅,读回两字节温度值,并装入ACC中TempL和TempH中GetTemp: ACALL Reset ;复位 JB RFail,RGetTemp ;判断复位是否成功 ;复位成功 ;对DS18B20发出Skip ROM命令 MOV A,#0CCH ACALL Write ;对DS18B20发出读命令 MOV A,#0BEH ACALL Write ;从DS18B20读回低8位温度值 ACALL Read MOV TempL,A ;从DS18B20读回高8位温度值 ACALL Read MOV TempH,A ACALL Reset ;复位 JB RFail,RGetTemp ;判断复位是否成功 ;对DS18B20发出Skip ROM命令 MOV A,#0CCH ACALL Write ;对DS18B20发出温度转换命令 MOV A,#44H ACALL WriteRGetTemp: RET温度数据处理模块DealTemp: ;将整数的二进制数部分移到一个字节,符号位和小数部分移到一个字节 MOV R1,#Var MOV Var,TempH MOV A,TempL XCHD A,R1 ;符号位、小数部分至VAR(R1),整数部分至ACC SWAP A ;整数部分处理 JNB Var.7,NotNeg ;判断是否为负数 CPL A ;为负数,取反后加1得其绝对值 ;小数部分取反 XRL Var,#1FH ; INC Var NotNeg: MOV TempH,A MOV TempL,Var RET 显示模块-显示DisData(30H)从开始的三个字节保存显示信息Display: MOV DPTR,#Tab ;*显示小数部分 MOV A,DisData1 MOVC A,A+DPTR MOV P2,A CLR Wei1 ACALL Delay SETB Wei1 ;*显示个位 MOV A,DisData2 MOVC A,A+DPTR ;小数点处理 ANL A,Dian MOV P2,A CLR Wei2 ACALL Delay SETB Wei2 ;*显示十位 MOV A,DisData3 MOVC A,A+DPTR MOV P2,A CLR Wei3 ACALL Delay SETB Wei3 ;*显示百位 MOV A,DisData4 MOVC A,A+DPTR MOV P2,A CLR Wei4 ACALL Delay SETB Wei4 RET Tab: ;09、空白、负号的编码 DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH ;延迟Delay: MOV R6,#6 DD1:MOV R5,#250 DJNZ R5,$ DJNZ R6,DD1 RET ENDorg 00hajmp startorg 30h;*检测键盘状态的程序*START: mov p0,#0ffh ;置p0为输入口,将P0口置为1,用于检查按键是否按下jnb p0.0,QIDONG ;按键S2按下,p0.0为0,进入启动(正转)程序jnb p0.1,FANZHUAN ;按键S3按下,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,则认为按键未按下,回到检测按键状态程序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 ;软件消抖后,若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,则认为按键未按下,回到检测按键状态程序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(参考电机驱动器说明中的多段速度选择部分)lcall XIANSHI ;显示设定的速度 LJMP START ;执行完启动程序后,回到检测按键状态程序;*减速程序,每按一次键,减速500rpm*JIANSU:LCALL YANSHI ;调用延时子程序,目的:软件消除按键抖动JNB P0.4,JIANLJMP START ;软件消抖后,若p0.0为1,则认为按键未按下,回到检测按键状态程序JIAN: mov a,p2 anl a,#07h ;取ch3ch2ch1的值 cjne a,#07h,JS ;若a中数值为07h,则速度已为0, ljmp START ;若速度为0,则程序回到开始程序,不再减速,以防出错JS:mov a,P2inc a mov P2,a ;减速500rpm(参考电机驱动器说明中的多段速度选择部分)lcall XIANSHI ;显示设定的速度 ljmp START ;执行完启动程序后,回到检测按键状态程序;*停止程序*TINGZHI:LCALL YANSHI ;调用延时子程序,目的:软件消除按键抖动JNB P0.5,TINGLJMP START ;软件消抖后,若p0.0为1,则认为按键未按下,回到检测按键状态程序TING: setb p0.6 ;p0.6接R/S端,为1,则与COM端断开lcall PANTING ;调用判停程序,若能从中返回,说明电机已停LJMP START ;执行完启动程序后,回到检测按键状态程序;*延时10ms,这是一个子程序,功能是延时10毫秒*YANSHI:mov a,#0 ;对累加器a置零,延时用y: mov r1,#00h ;对寄存器r1置零,延时用inc r1cjne r1,#0ffh,y ;延时1msinc acjne a,#10,y ;延时101=10msret;*判停程序,这是一个子程序,若能从判停程序中返回,则说明电机已停*PANTING:jnb p2.4,yanshi250ms ;若speed端为0,则进入延时程序ajmp PANTING ;若speed端为1,则返回PANTING,等待speed端出现0电平yanshi250ms:clr p2.6 ;允许对计数器置数mov p3,#08h ;对计数器置入数8setb p2.6 ;计数器开始计数mov a,#0 ;对累加器a置零,延时用y250: mov r1,#00h ;对寄存器r1置零,延时用inc r1jb p2.5,PANTING ;若期間Tc为1,则电机未停,返回PANTING,继续判断cjne r1,#0ffh,y250 ;延时1ms

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论