参考]基于gsm短信模块的家庭防盗报警系统内容摘要:

RD EQU 058H MRD1 EQU 063H ORG 0000H AJMP START ORG 0003H。 外部中断 0 中断服务子程序入口地址 AJMP INTL ORG 0013H。 外部中断 1 中断服务子程序入口地址 AJMP INTY ORG 0100H START: MOV SP,30H MOV P1,11110011B。 initial I/O MOV SLA,0A0H。 FM24C16 器件从地址 MOV SUBA,00H。 器件子地址 CLR MOV TMOD,20H。 串行口初始化 MOV TH1,0FDH MOV TL1,0FDH MOV PCON,00H MOV SCON,40H SETB TR1 SETB IT0。 INT0 为 1,边沿触发方式 SETB IT1。 INT1 为 1,边沿触发方式 21 SETB EX0 SETB EX1 SETB PX1。 INT1 为高优先级 SETB EA。 开总中断 MAIN: … AJMP MAIN。 主程序 INTL: … RETI。 外部中断 0 中断服务子程序 INTY: … RETI。 外部中断 1 中断服务子程序 END 2. HD7279 键盘显示子程序 INTL: MOV DOUT,15H。 读键盘指令 ACALL SEND ACALL RECV。 读键盘数据 SETB CS MOV A,DIN MOV B,10。 HEX change BCD code DIV AB MOV DOUT,10100001B ACALL SEND MOV DOUT,11001000B ACALL SEND MOV DOUT,B。 send 个位 to HD7279A ACALL SEND SETB CS RETI SEND: MOV BCOUNT,8。 set bit counter=8 22 CLR CS。 CS for lv ACALL LDELAY。 long delay SLOOP: MOV C,。 output 1 bit MOV DAT,C SETB CLK。 set CLK for hv MOV A,DOUT。 the data that will send left move RL A MOV DOUT,A ACALL SDELAY。 short delay CLR CLK。 set CLK for lv ACALL SDELAY DJNZ BCOUNT,SLOOP。 check 8 bit send over or else CLR DAT。 send over, return RET RECV: MOV BCOUNT,8 SETB DAT。 set (DATA) hv(input state) ACALL LDELAY RLOOP: SETB CLK ACALL SDELAY MOV A,DIN RL A MOV DIN,A MOV C,DAT MOV ,C CLR CLK ACALL SDELAY DJNZ BCOUNT,RLOOP RET LDELAY: MOV TIMER,25。 delay 50uS DELOOP: DJNZ TIMER,DELOOP 23 RET SDELAY: MOV TIMER,4。 delay 8uS SHOTLOP:DJNZ TIMER,SHOTLOP RET 3. FM24C16 读写子程序 START: SETB SDA NOP SETB SCL。 起始条件建立时间大于 ACALL DELAY CLR SDA ACALL DELAY CLR SCL。 钳住总线,准备发数据 NOP RET STOP: CLR SDA NOP SETB SCL。 发送结束条件的时钟信号 ACALL DELAY SETB SDA。 结束总线 ACALL DELAY RET MACK: CLR SDA。 将 SDA 置 0 NOP NOP SETB SCL ACALL DELAY CLR SCL NOP 24 NOP RET MNACK: SETB SDA。 将 SDA 置 1 NOP NOP SETB SCL ACALL DELAY CLR SCL NOP NOP RET CACK: SETB SDA NOP NOP SETB SCL CLR ACK NOP NOP MOV C,SDA JC CEND SETB ACK。 判断应答位 CEND: NOP CLR SCL NOP RET WRBYTE: MOV R0,08H WLP: RLC A。 取数据位 JC WR1 SJMP WR0。 判断数据位 WLP1: DJNZ R0,WLP 25 NOP RET WR1: SETB SDA。 发送 1 NOP SETB SCL ACALL DELAY CLR SCL SJMP WLP1 WR0: CLR SDA。 发送 0 NOP SETB SCL ACALL DELAY CLR SCL SJMP WLP1 RDBYTE: MOV R0,08H RLP: SETB SDA NOP SETB SCL。 时钟线为高,接收数据位 NOP NOP MOV C,SDA。 读取数据位 MOV A,R2 CLR SCL。 将 SCL 拉低, 时间大于 RLC A。 进行数据位的处理 MOV R2,A NOP NOP NOP DJNZ R0,RLP。 未够 8 位,再来一次 RET 26 IWRNBYTE: MOV A,11 MOV R3,A LCALL START。 起动总线 MOV A,SLA LCALL WRBYTE。 发送器件从地址 LCALL CACK JNB ACK,RETWRN。 无应答则退出 MOV A,SUBA。 指定子地址 LCALL WRBYTE LCALL CACK MOV R1,MTD WRDA: MOV A,@R1 LCALL WRBYTE。 开始写入数据 LCALL CACK JNB ACK,IWRNBYTE INC R1 DJNZ R3,WRDA。 判断写完没有 RETWRN: LCALL STOP RET IRDNBYTE: MOV R3,11 LCALL START MOV A,SLA LCALL WRBYTE。 发送器件从地址 LCALL CACK JNB ACK,RETRDN MOV A,SUBA。 指定子地址 LCALL WRBYTE LCALL CACK LCALL START。 重新起动总线 MOV A,SLA 27 INC A。 准备进行读 *作 LCALL WRBYTE LCALL CACK JNB ACK,IRDNBYTE MOV R1,MRD RDN1: LCALL RDBYTE。 读 *作开始 MOV @R1,A DJNZ R3,SACK LCALL MNACK。 最后一字节发非应答位 RETRDN: LCALL STOP。 并结束总线 RET SACK: LCALL MACK INC R1 SJMP RDN1 DELAY: NOP NOP NOP NOP NOP RET 4. DS12887 应用子程序 DS12887: CLR INTTIM:MOV DPTR,7F0BH MOV A,0A2H。 选 BCD 码, 24 小时制 MOVX @DPTR,A MOV DPTR,7F04H。 HOUR 单元地址 MOV A,07H MOVX @DPTR,A 28 inc dptr mov。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。