资源描述:
《《键盘显示程序》word版》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、SDABITP1.7;总线定义SCLBITP1.6RSTBITP1.0KEY_INTBITP3.2MTDEQU40H;发送数据缓冲区MRDEQU49H;接受数据缓冲区ZLG7290EQU70H;ZLG7290的器件地址ACKBIT10H;应答标志位SLADATA50H;器件的从地址SUBADATA51H;器件的子地址NUMBYTEDATA52H;读/写的字节数变量ORG0000HLJMPMAINORG0100H;主程序如下:MAIN:MOVSP,#70HCLRRSTLCALLDELAYSETBRSTLCALLDELAYMAIN1:MOVr4,#67H
2、MOVR7,#08HMAINLOOP:JNBKEY_INT,KEY_HANDLESJMPMAINLOOPKEY_HANDLE:MOVSLA,#ZLG7290;指定器件地址MOVSUBA,#01H;指定子地址MOVNUMBYTE,#01H;发送2字节数据LCALLIRDNBYTE;调用写2字节数据程序LCALLDELAY;MOVR7,#08H;MOVA,#67HHANDLELOOP:mova,r4MOVMTD,APUSHACC;MOV30H,R7MOVA,MRDcjneA,#10H,NEXTMOVMRD,#0HNEXT:MOVMTD+1,MRDMOVS
3、LA,#ZLG7290;指定器件地址MOVSUBA,#07H;指定子地址MOVNUMBYTE,#02H;发送2字节数据LCALLIWRNBYTE;调用写2字节数据程序LCALLDELAY;SUING2;MOVR7,30HPOPACCdecr4DJNZR7,MAINLOOPSJMPMAIN1DELAY:MOVR5,#50Hdelay1:movr6,#0ffhdjnzr6,$djnzr5,delay1RETwait:nopnopnopnopnopret$include(V12C.INC)END;$include(V.INC);启动总线子程序START:S
4、ETBSDANOPSETBSCL;起始条件建立时间大于4.7usNOPNOPNOPNOPNOPCLRSDANOP;起始条件锁定时大于4usNOPNOPNOPNOPCLRSCL;钳住总线,准备发数据NOPRET;结束总线子程序STOP:CLRSDANOPSETBSCL;发送结束条件的时钟信号NOP;结束总线时间大于4usNOPNOPNOPNOPSETBSDA;结束总线NOP;保证一个终止信号和起始信号的空闲时间大于4.7usNOPNOPNOPRET;发送应答信号子程序MACK:CLRSDA;将SDA置0NOPNOPSETBSCLNOP;保持数据时间,即
5、SCL为高时间大于4.7usNOPNOPNOPNOPCLRSCLNOPNOPRET;发送非应答信号MNACK:SETBSDA;将SDA置1NOPNOPSETBSCLNOPNOP;保持数据时间,即SCL为高时间大于4.7usNOPNOPNOPCLRSCLNOPNOPRET;检查应答位子程序;返回值,ACK=1时表示有应答CACK:SETBSDANOPNOPSETBSCLCLRACKNOPNOPMOVC,SDAJCCENDSETBACK;判断应答位CEND:NOPCLRSCLNOPRET;发送字节子程序;字节数据放入ACC;每发送一字节要调用一次CACK
6、子程序,取应答位WRBYTE:MOVR0,#08HWLP:RLCA;取数据位JCWR1SJMPWR0;判断数据位WLP1:DJNZR0,WLPNOPRETWR1:SETBSDA;发送1NOPSETBSCLNOPNOPNOPNOPNOPCLRSCLSJMPWLP1WR0:CLRSDA;发送0NOPSETBSCLNOPNOPNOPNOPNOPCLRSCLSJMPWLP1;读取字节子程序;读出的值在ACC;每取一字节要发送一个应答/非应答信号RDBYTE:MOVR0,#08HRLP:SETBSDANOPNOPNOPNOPSETBSCL;时钟线为高,接收数据
7、位NOPNOPNOP;+1NOP;+1NOP;+1NOP;+1NOP;+1MOVC,SDA;读取数据位MOVA,R2CLRSCL;将SCL拉低,时间大于4.7usRLCA;进行数据位的处理MOVR2,ANOPNOPNOPNOP;+1NOP;+1NOP;+1NOPNOPNOP;+1NOPNOP;+1NOP;+1DJNZR0,RLP;未够8位,再来一次RET;以下是用户接口子程序;无子地址器件写字节数据;入口参数:数据为ACC、器件从地址SLA;占用:A、R0、CYIWRBYTE:PUSHACCIWBLOOP:LCALLSTART;起动总线MOVA,SL
8、ALCALLWRBYTE;发送器件从地址LCALLCACKJNBACK,RETWRB;无应答则跳转POPAC