基于智能家居gsm短信模块的家庭防盗报警系统内容摘要:

T DATA 021H SLA DATA 070H SUBA DATA 00H ACK BIT 00H。 I/O 定义 KEY BIT CS BIT CLK BIT DAT BIT SCL BIT SDA BIT MTD EQU 04AH MRD EQU 058H MRD1 EQU 063H ORG 0000H AJMP START 20 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,边沿触发方式 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 21 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 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 22 CLR CLK ACALL SDELAY DJNZ BCOUNT,RLOOP RET LDELAY: MOV TIMER,25。 delay 50uS DELOOP: DJNZ TIMER,DELOOP 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 23 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 NOP RET WR1: SETB SDA。 发送 1 NOP SETB SCL ACALL DELAY 24 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 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 25 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 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 26 NOP RET 4. DS12887 应用子程序 DS12887。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。