单片机课程设计――温度测控系统程序_第1页
单片机课程设计――温度测控系统程序_第2页
单片机课程设计――温度测控系统程序_第3页
单片机课程设计――温度测控系统程序_第4页
单片机课程设计――温度测控系统程序_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、SDAEQUP1.3;I2C数据线SCLEQUP1.4;I2C时钟线DQEQUP1.5;3WIR数据线CLKEQUP1.6;3WIR时钟线NRSTEQUP1.7;3WIR复位线SLAWEQU70H;SAA1064写命令,地址为70H,最低位为0表示写SLAREQU71H;SAA1064读命令,地址为71H,最低位为1表示读THEQU34;最高极限温度TLEQU32;最低极限温度TZ EQU 33DSEGAT 20HNUMBYT:DS1;向SAA1064I2C传送字节数N存放单元BUFTC:DS2;SAA1064发送命令缓冲区BUFTD:DS4;向SAA1064发送数据缓冲区BUFRD:DS6;

2、从SAA1064接收缓冲区DAT1:DS1;温度值存储单元POINT:DS1;小数点后温度值的存储单元CSEGAT 0000HJMP MAIN1 ORG 0003HLJMP KEYORG 0100HMAIN1:MOV SP,#60H;已用参数R0,R1,R2,R5,R6,R7,C,F0MOVPSW,#00HMOV 50H,#33MOV 51H,#25MOV 52H,#29MAIN0: SETB EX0 SETB EA MOV 45H,#2 ;写入判断条件 MOV 33H,#1 ;写入循环条件 MOV 44H,#1MOV A,38HCJNE A,#00H,AA1MOV 38H,#01H RETI

3、 AA1:CLR IE0 CLR P1.0 LCALLBEGIN;复位命令MOVA,#0CH;写配置寄存器命令LCALLW8BITMOVA,#0AH;连续转换模式数据LCALLW8BITLCALLBEGIN;结束上一次通讯,开始下一次通讯MOVA,#01H;写TH寄存器命令LCALLW8BITMOVA,#THMOV A,50H ;写最高温度值MOVPOINT,#0LCALLW9BITLCALLBEGIN;结束上一次通讯,开始下一次通讯MOVA,#02H;写TL寄存器命令LCALLW8BITMOVA,#TLMOV A,51H;写最低温度值MOVPOINT,#0LCALLW9BITLCALLBEG

4、IN;结束上一次通讯,开始下一次通讯MOVA,#0EEH;开始温度转换命令LCALLW8BITCLRNRST;结束上一次通讯LCALLDELAY2;延时1sRENU:LCALLBEGIN;复位命令MOVA,#0AAH;写读温度值命令LCALLW8BITLCALLR9BIT;读9位温度值 MOV 57H,R0 ;加如的判断温度和设定之间的关系,并跳到相应的子程序MOV 46H,A MOV A,50HDEC AMOV B,46HSUBB A,BJB ACC.7,S5JMP S6S5:LJMP KBSS6:MOV A,52H ADD A,#2MOV B,46HSUBB A,BJB ACC.7,S7J

5、MP S8S7:LJMP QJKSS8:MOV B,51HMOV A,46HSUBB A,BJB ACC.7,S11JMP S10S11:LJMP KBJS10:MOV A,52HSUBB A,#2MOV B,AMOV A,46HSUBB A,BJB ACC.7,S9JMP S12S9:LJMP KJ S12: MOV R0,57H ;判断结束5 MOV A,46H ;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMOVDAT1,A;将18位温度值送DAT保存CLRNRST;结束一次读温度LCALLSTORE;将温度值转换为可显示的形式MOVNUMBYT,#6;显示温度值LCALL

6、WRNBYTSJMPRENUSTORE:MOVR0,#BUFTC;用到参数DAT,POINTMOVA,#00H;SAA1064子地址MOVR0,AINCR0MOVA,#47H;SAA1064控制字节MOVR0,AMOVR0,#BUFTDMOVA,DAT1;判断温度值是正是负JBACC.7,NEGMOVA,#00H;正温度的符号位不显示,数码管不亮MOVR0,AAJMPNSTNEG:CPLA;将负数转换成相应的正数MOVB,AMOVA,POINTCPLACLRACC.1INCAMOVC,ACC.1XCHA,BADDCA,#0MOVDAT1,A;把负温度值1-8位变正存储MOVPOINT,B;把负

7、温度值第9位变正存储MOVA,#40H;负号显示MOVR0,ANST:INCR0;显示缓冲区地址加1MOVA,DAT1;取温度值MOVB,#10;除法后寄存器ACC是十位数,寄存器B是个位数DIVABMOVDPTR,#TAB0;将十位和个位的数转换为数码管的字形码值MOVCA,A+DPTRMOVR0,A;存十位数INCR0;显示缓冲区地址加1MOVA,BMOVCA,A+DPTRSETBACC.7MOVR0,A;存个位数和小数点INCR0;显示缓冲区地址加1MOVA,POINT;取小数点后的值JBACC.0,FLOAT;如果有小数转FLOATMOVA,#3FH;将0的字形码值存缓冲区MOVR0,

8、AAJMPEFLOAT:MOVA,#6DH;将5的字形码值存缓冲区MOVR0,AE:RETTAB0:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;09段码值表;3-WIR初始化子程序BEGIN:CLRNRST;复位线置0CALLDELAY1;延时20mS,这是为了写EEPROM时有足够长的等待时间SETBCLK;置3-WIR时钟为高SETBNRST;复位线置1RET;向3-WIR数据线上发送9位温度值,第9位数据在POINT中,18位数据在ACC中W9BIT:CLRCLK;置3-WIR时钟为低SETBDQ;置3-WIR数据线为1,即默认第9位数据为1MOV

9、R0,POINT;从POINT读出第9位数据送R0CJNER0,#0,W1;第9位数据不为0转W1CLRDQ;置3-WIR数据线为0,即第9位数据为0W1:SETBCLK;置3-WIR时钟为高,发送数据;下一段程序也可单独作为写8位数据使用W8BIT:MOVR0,#08H;置R0为8,为写8位数据建立计数器初值W2:CLRCLK;置3-WIR时钟为低SETBDQ;置3-WIR数据线为1,即默认数据为1RRCA;右移将被发送数据放入进位CJCW3;进位为1(即发送数据为1)转W3CLRDQ;置3-WIR数据线为0,即发送数据为0W3:SETBCLK;置3-WIR时钟为高,发送数据DJNZR0,W

10、2;8位数据没送完转W2RET;读9位温度值。第9位存到POINT,第1-8位存到累加器ACCR9BIT:SETBDQ;置3-WIR数据为高,为接收数据做准备CLRCLK;置3-WIR时钟为低MOVPOINT,#1;默认小数点后的数据为1MOVC,DQ;传送小数点后的数据到进位CJCRR1;进位为1转RR1MOVPOINT,#0;将0存入POINTRR1:SETBCLK;置3-WIR时钟为高;下一段程序也可单独作为写8位数据使用R8BIT:MOVR0,#08H;置R0为8,为读8位数据建立计数器初值RR2:CLRCLK;置3-WIR时钟为低MOVC,DQ;传送读出的数据到进位CRRCA;通过右

11、移将读出的数放入ACCSETBCLK;置3-WIR时钟为高DJNZR0,RR2;8位数据没读完转RR2RET;模拟I2C总线发送N个字节数据,N存放在NUMBYT中;数据区的第一个字节为从器件的地址SUBADR;数据区的第二个字节是控制寄存器字节COMWRNBYT:LCALLSTAR0;发出启动传输命令MOVA,#SLAW;发出发送数据命令LCALLWRBYTLCALLCACK;调用应答子程序JBF0,WRNBYT;如果错误应答,转WRNBYT重新开始MOVR1,#BUFTC;放发送数据区的首地址在R1中WRDAT:MOVA,R1;从数据区中取出1个字节发送LCALLWRBYTLCALLCAC

12、K;调用应答子程序JBF0,WRNBYT;如果错误应答,转WRNBYT重新开始INCR1;数据区地址加1DJNZNUMBYT,WRDAT;发送没有结束转WRDAT继续发送LCALLSTOP;发送结束,发出停止命令RET;模拟I2C总线接收N个字节数据,N存在NUMBYTRDNBYT:LCALLSTAR0;发出启动传输命令MOVA,#SLAR;发出接收数据命令LCALLWRBYTLCALLCACK;调用应答子程序JBF0,RDNBYT;如果错误应答,转RDNBYT重新开始RDN:MOVR1,#BUFRD;放接收数据区的首地址在R1中RDN1:LCALLRDBYT;接收1个字符MOVR1,A;将收

13、到的字符放进缓冲区DJNZNUMBYT,ACK;接收没结束,转ACKLCALLMNACK;接收结束,发送非应答信号LCALLSTOP;发送停止信号RETACK:LCALLMACK;发送应答信号INCR1;缓冲区地址加1SJMPRDN1;向SDA线上发送一个数据字节子程序,使用了R0WRBYT:MOVR0,#08H;8位数据长度送R0中WLP:RLCA;发送数据左移,使发送位送入进位C中JCWRE1;判断发送1还是0,发送1转WRE1SJMPWRE0;发送0转WRE0WLP1:DJNZR0,WLP;8位是否发送完,未完转WLPRET;8位发送完,返回;发送1程序段WRE1:SETBSDA;置数据

14、信号SDA为高SETBSCL;置时钟信号SCL为高NOP;NOP为满足I2C协议所需的等待时间NOPCLRSCL;使时钟信号SCL为低CLRSDA;使数据信号SDA为低SJMPWLP1;发送0程序段WRE0:CLRSDA;使数据信号SDA为低SETBSCL;置时钟信号SCL为高NOP;NOP为满足I2C协议所需的等待时间NOPCLRSCL;使时钟信号SCL为低SJMPWLP1;从SDA线上读取一个数据字节子程序,放入R2中RDBYT:MOVR0,#08H;8位数据长度送入R0RLP:SETBSDA;置SDA为输入方式SETBSCL;置时钟信号SCL为高,使SDA上数据有效CLRC;默认读数为0

15、,置进位C=0JNBSDA,RD0;读数为0,转RD0SETBC;读数为1,置进位C=1RD0:MOVA,R2;将读到的数(在进位C中),通过循环左移放到R2中RLCAMOVR2,ACLRSCLDJNZR0,RLP;没有读完8位数据转RLPRET;读完8位数据返回;START信号子程序STAR0:SETBSCL;置时钟信号SCL为高SETBSDA;置数据信号SDA为高NOP;NOP为满足I2C协议所需的等待时间NOPCLRSDA;使数据信号SDA为低NOP;NOP为满足I2C协议所需的等待时间NOPCLRSCL;使时钟信号SCL为低RET;主机发送应答位子程序MACK:CLRSDA;使数据信号

16、SDA为低SETBSCL;置时钟信号SCL为高NOP;NOP为满足I2C协议所需的等待时间NOPCLRSCL;使时钟信号SCL为低SETBSDA;置数据信号SDA为高RET;主机发送非应答位子程序MNACK:SETBSDA;置数据信号SDA为高SETBSCL;置时钟信号SCL为高NOP;NOP为满足I2C协议所需的等待时间NOPCLRSCL;使时钟信号SCL为低CLRSDA;使数据信号SDA为低RET;应答位检测子程序,F0=0表示收到了正常应答;F0=1表示收到非正常应答CACK:SETBSDA;置数据信号SDA为高,以便接收数据SETBSCL;置时钟信号SCL为高CLRF0;默认为正常应答

17、JNBSDA,CEND;正常应答转CENDSETBF0;置错误应答标志CEND:CLRSCL;使时钟信号SCL为低NOP;NOP为满足I2C协议所需的等待时间NOPRET;STOP信号子程序STOP:CLRSDA;使数据信号SDA为低SETBSCL;置时钟信号SCL为高NOP;NOP为满足I2C协议所需的等待时间NOPSETBSDA;置数据信号SDA为高NOP;NOP为满足I2C协议所需的等待时间NOPCLRSCL;使时钟信号SCL为低RET;延时20ms,使用了R6、R7DELAY1:MOVR7,#250L1:MOVR6,#20L2:DJNZR6,L2DJNZR7,L1RET;延时1s子程序

18、,使用了R5、R6、R7DELAY2:MOVR5,#10L3:MOVR6,#100L4:MOVR7,#250L5:DJNZR7,L5DJNZR6,L4DJNZR5,L3RETKEY: DAT EQU 20H DATS EQU 25H PA EQU 8000H PB EQU 8001H PCO EQU 8002H PCTL EQU 8003H MOV 38H,#00H MOV R7,#4 MOV R2,#0 MOV DAT,#00H MOV 22H,#00H MOV 23H,#00H MOV 24H,#00H MOV DPTR,#PCTL MOV A,#88H MOVX DPTR,A MOV D

19、PTR,#PB MOV A,#0FH MOVX DPTR,A MOV DPTR,#PA MOV A,#00H MOVX DPTR,ASTAR: MOV DPTR,#PCO MOV A,#0F0H MOVX DPTR,AKB1: MOV DPTR,#PCO MOVX A,DPTR CJNE A,#0F0H,KB2 LJMP SCANKB2: MOV R2,#1 MOV B,#0FEHKB22: MOV DPTR,#PCO MOV A,B MOVX DPTR,A MOV DPTR,#PCO MOVX A,DPTR ANL A,#0F0H CJNE A,#0F0H,KB3 MOV A,B RL A

20、MOV B,A JMP KB22KB3: ANL B,#0FH ORL B,A MOV R3,#0 MOV DPTR,#TABKB4: MOV A,R3 MOVC A,A+DPTR JNZ KB5 JMP KB1KB5: CJNE A,B,CON LCALL DELY MOV DPTR,#TAB1 MOV A,R3 MOVC A,A+DPTR MOV 30H,R3 ;将偏移地址保存 MOV 34H,A MOV A,33H CJNE A,#00H,M2 JMP M0M2:LJMP Y0M0: MOV A,41HE1: SUBB A,#77H JZ S1 JMP E2S1:LJMP DTH ;aa

21、aaaaaaaaaaaaE2: MOV A,41H SUBB A,#7CH JZ S2 JMP E3S2:LJMP DTLE3: MOV A,41H CJNE A,#58H,X0 S3:LJMP DTZX0: MOV A,34H ;第二个数据是写到哪里a MOV DAT,A MOV DPTR,#PCO MOV A,#0F0H MOVX DPTR,AWAIT: MOVX A,DPTR CJNE A,#0F0H,WAIT CALL DELY LJMP STAR JMP SCANCON: INC R3 JMP KB4SCAN: CJNE R2,#1,SKIP MOV R2,#0 CJNE R7,#0

22、,NEXT MOV R7,#4NEXT: DEC R7SKIP: CJNE R7,#3,NEXT1 MOV A,#04H MOV DATS,DAT LCALL PRO MOV 24H,DAT LJMP X3NEXT1:CJNE R7,#2,NEXT2 MOV A,#04H MOV DATS,DAT LCALL PRO MOV 23H,DAT MOV A,#08H MOV DATS,24H LCALL PRO LJMP X3NEXT2:CJNE R7,#1,NEXT3 MOV A,#04H MOV DATS,DAT LCALL PRO MOV 22H,DAT MOV A,#08H MOV DAT

23、S,23H LCALL PRO MOV A,#01H MOV DATS,24H LCALL PRO LJMP X3NEXT3:MOV A,#04H MOV DATS,DAT LCALL PRO MOV A,#08H MOV DATS,22H LCALL PRO MOV A,#01H MOV DATS,23H LCALL PRO MOV A,#02H MOV DATS,24H LCALL PRO LJMP X3X3: MOV A,33H CJNE A,#1,G5 MOV A,44H CJNE A,#0,G6 LJMP MAIN0G6: MOV A,45H CJNE A,#0,G5 LJMP MA

24、IN0G5: LJMP STARDELY: MOV R0,#10HDELY0: MOV R1,#250DELY1: DJNZ R1,DELY1 DJNZ R0,DELY0RETPRO: MOV DPTR,#PB MOVX DPTR,A MOV DPTR,#PA MOV A,DATS MOVX DPTR,A MOV R5,#100 DJNZ R5,$ RETY0: MOV A,34H SUBB A,#77H ;加入的各个子程序aaa JZ S0 MOV A,34H SUBB A,#7CH JZ S0 MOV A,34H CJNE A,#58H,S00 LJMP S0;aaaaaaaaaaaaaa

25、a S00:MOV A,34H SUBB A,#5EH JZ H1 JMP G1H1:LJMP QBG1: MOV A,34H SUBB A,#79H;aaaaaaaaaaaa JZ H2 LJMP G2H2:LJMP QSG2: MOV A,34H CJNE A,#71H,G3 H3:LJMP KSG3: MOV A,34H LJMP X0S0: MOV A,33H DEC A MOV 33H,A MOV 41H,34H;aaaaaaaaaaaaa LJMP X0DZ:LJMP S12 ;aaaaaaaaQB: SETB P3.4 LJMP MAIN0KS: SETB P1.0 LJMP M

26、AIN0QS: CLR P1.0;aaaaaaaaaaaa LJMP MAIN0X1:MOV A,44H DEC A MOV 44H,A LJMP X0KBJ: CLR P3.4 CLR P1.0 CLR P1.1 LJMP S12;aaaaaaaaaaaaaKJ: CLR P1.1 SETB P3.4 CLR P1.0 LJMP S12KBS: CLR P3.4 SETB P1.0 SETB P1.1 LJMP S12QJKS: SETB P1.0 SETB P3.4 SETB P1.1;aaaaaaaaaaaa LJMP S12DTH: MOV DPTR,#TAB2 MOV A,30H MOVC

温馨提示

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

评论

0/150

提交评论