1、000BHTIME0定时器0中断入口0013HKBHIT初始化0030HINIT:MOVDPTR,#4000HHD7279A 的地址A,#10011111BHD7279A 初始化 CS、CLK、DATAMOVXDPTR,ALCALLDELAY25MS延时后进入工作状态DATA_OUT,#1O1OO1OOBHD7279A 复位指令SEND发送指令设回CS为高电平R4,#20定时器一个周期内的中断数R2,#0R3,#0R4,#0R5,#0MSECOND,#OSECOND,#。MINITE,#0HOUR,#0数字计数器R6,#0个位寄存器R7,#0十位寄存器SETBEA开总中断ET0开定时器0中断E
2、X1TR0开始计时注程序MAIN:A,R2B,#10DIVABR6,BR7,A把数字转换为2个BCD码个位放在R6十位放在R7译码,找到了第1个数码管DELAY25T4,指令与数据时间间隔DATA_OUT,R1指令的数据部分,显示个位DATA_OUT,#11001001B ;下载数据且按方式 -译码,找到了第2个数码管DATA_OUT,R2DATA_OUT,#11OO1O1OB下载数据且按方式1译码找到了第3个数码管DATA_OUT,R3DELAY1MS显示延时A,R4DATA_OUT,#11001011B下载数据且按方式1译码找到了第4个数码管DATA_OUT,R6DATA_OUT,#11O
3、O11OOB5个数码管DATA_OUT,R7指令的数据部分,显示十位A,R5DATA_OUT,#11OO11O1B6个数码管DATA_OUT,#11001110B7个数码管MAIN下一循环SJMP$发送子程序SEND:CLR加锁BIT_COUNT,#8无论指令还是数据,一次只发送8位A,#00011111B设CS为低电平DELAY50T1,从CS下降沿至CLK脉冲时间发送循环,HD7279A采用串行方式与微处理器通讯,一次发送一位SENDLOOP: MOVA,DATA_OUT最高位C,ACC.7串行发送从高位到低位发送,故先取输出到DAT位ACC.5,CC设CLK为高电平ACC.6,CDELA
4、Y8T2,传送指令时CLK脉冲宽度设CLK为低电平T3,字节传送中CLK脉冲时间移位待发送的指令或数据,为下取出发送的指令或数据一位的发送作准备RL AMOV DATA_OUT,ADJNZ BIT_COUNT,SENDLOOP发送不到8位,继续循环发送完毕,恢复DATET0 释放锁RET接收子程序(本程序中用不到,但在添加按键操作的时候用于读取键值 )RECEIVE: CLRET0 加锁BIT_COUNT,#8 ;接收8位数据DATA_IN,#0 ;清空接收数据缓冲寄存器A,#00111111B ;设CS为低电平,同时保证 DAT为高电平(输入状态)DELAY25 ;T5,读键盘指令中指令与数
5、据时间间隔接收循环,HD7279A米用串行方式与微处理器通讯,一次接收一位RECEIVELOOP:ACC.6 设CS为高电平DELAY8 ;T6,输出键盘数据建立时间A,DATA_IN ;接收数据缓冲寄存器向左移位,准备接收一位数据,数据的高位会先发送RLDATA_IN,AA,DPTR读取数据C,ACC.5取出数据位DATA,DATA_INACC.0,C数据放进接收数据缓冲寄存器A,#00111111B设CS为低电平,同时保证DAT(输入状态)T7,读键盘数据是CLK脉冲宽DJNZBIT_COUNT,RECEIVELOOP接收不到8位,继续循环接收完毕,恢复DAT释放锁为高电平TIMEO:定时
6、器0中断程序DJNZ R4,NEXT 淀时器一个周期内中断数不够 就继续计时INCR2数字加1CJNER2,#100,NEXTR3R3,#10,NEXTR4R4,#60,NEXTR5R5,#60,NEXTNEXT:TH0,#0FCH设置定时器定时值重置定时器一个周期内中断数数字不够100继续加1数字到达100就清零定时器方式1中断后需要重新TL0,#18HRETIKBHIT:PUSHPSWACCDPHDPLSTART:A,R0A,R1DATA_OUT,#00010101BRECEIVEJZSTARTDECASTOPCLEAROUTSTOP:CLEAR:OUT:POPR1,AR0,A延时25ms子程序DELAY25MS:R0,#49D11:R1,#253NOPD12:R1,D12DJNZ R0,D11涎时50阴子程序DELAY50:R0,#23D21:R0,D21涎时25阴子程序DELAY25:R0,#11D31:R0,D31DELAY8:D41:延时8阳子程序MOV R0,#2DJNZ R0,D41END
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1