汇编语言在两个数码管上实现0099的循环显示Word文档格式.docx
《汇编语言在两个数码管上实现0099的循环显示Word文档格式.docx》由会员分享,可在线阅读,更多相关《汇编语言在两个数码管上实现0099的循环显示Word文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
MOVA,#10011111B;
HD7279A初始化CS.CLK.DATA
MOVX@DPTR,A
LCALLDELAY25MS;
延时落后入工作状况
MOVDATA_OUT,#10100100B;
HD7279A复位指令
LCALLSEND;
发送指令
设回CS为高电平
MOVX@DPTR,A
//MOVR4,#20;
准时器一个周期内的中止数
MOVR2,#0
MOVR3,#0
MOVR4,#0
MOVR5,#0
//MOVMSECOND,#0
//MOVSECOND,#0
//MOVMINITE,#0
//MOVHOUR,#0;
数字计数器
MOVR6,#0;
个位存放器
MOVR7,#0;
十位存放器
MOVTMOD,#1;
设置准时器0工作模式为方法1
//MOVTH0,#3CH;
设置准时器准时价
//MOVTL0,#0B0H
MOVTH0,#0FCH;
MOVTL0,#18H
SETBEA;
开总中止
SETBET0;
开准时器0中止
SETBEX1
SETBTR0;
开端计时
主程序
MAIN:
MOVA,R2;
把数字转换为2个BCD码
MOVB,#10
DIVAB
MOVR6,B;
个位放在R6
MOVR7,A;
十位放在R7
MOVDATA_OUT,#11001000B;
下载数据且按方法1译码,找到了第1个数码管
LCALLSEND
LCALLDELAY25;
T4,指令与数据时光距离
MOVDATA_OUT,R1;
指令的数据部分,显示个位
MOVA,#10011111B
MOVX@DPTR,A
MOVDATA_OUT,#11001001B;
下载数据且按方法1译码,找到了第2个数码管
MOVDATA_OUT,R2;
MOVDATA_OUT,#11001010B;
下载数据且按方法1译码,找到了第3个数码管
MOVDATA_OUT,R3;
//LCALLDELAY1MS;
显示延时
MOVA,R4;
MOVDATA_OUT,#11001011B;
下载数据且按方法1译码,找到了第4个数码管
MOVDATA_OUT,R6;
MOVDATA_OUT,#11001100B;
下载数据且按方法1译码,找到了第5个数码管
MOVDATA_OUT,R7;
指令的数据部分,显示十位
MOVA,R5;
MOVDATA_OUT,#11001101B;
下载数据且按方法1译码,找到了第6个数码管
MOVDATA_OUT,#11001110B;
下载数据且按方法1译码,找到了第7个数码管
LJMPMAIN;
下一轮回
SJMP$
发送子程序
SEND:
CLRET0;
加锁
MOVBIT_COUNT,#8;
无论指令照样数据,一次只发送8位
MOVA,#00011111B;
设CS为低电平
LCALLDELAY50;
T1,从CS降低沿至CLK脉冲时光
发送轮回,HD7279A采取串行方法与微处理器通信,一次发送一位
SENDLOOP:
MOVA,DATA_OUT;
掏动身送的指令或数据
MOVC,ACC.7;
串行发送从高位到低位发送,故先取最高位
输出到DAT位
MOVACC.5,C
SETBC;
设CLK为高电平
MOVACC.6,C
LCALLDELAY8;
T2,传送指令时CLK脉冲宽度
CLRC;
设CLK为低电平
T3,字节传送中CLK脉冲时光
MOVA,DATA_OUT;
移位待发送的指令或数据,为下一位的发送作预备
RLA
MOVDATA_OUT,A
DJNZBIT_COUNT,SENDLOOP;
发送不到8位,持续轮回
发送完毕,恢复DAT
释放锁
RET
吸收子程序(本程序顶用不到,但在添加按键操纵的时刻用于读取键值)
RECEIVE:
CLRET0;
吸收8位数据
MOVDATA_IN,#0;
清空吸收数据缓冲存放器
MOVA,#00111111B;
设CS为低电平,同时包管DAT为高电平(输入状况)
MOVX@DPTR,A
T5,读键盘指令中指令与数据时光距离
吸收轮回,HD7279A采取串行方法与微处理器通信,一次吸收一位
RECEIVELOOP:
SETBACC.6;
设CS为高电平
LCALLDELAY8;
T6,输出键盘数据树立时光
MOVA,DATA_IN;
吸收数据缓冲存放器向左移位,预备吸收一位数据,数据的高位会先发送
MOVDATA_IN,A
MOVXA,@DPTR;
读取数据
MOVC,ACC.5;
掏出数据位DAT
MOVA,DATA_IN
MOVACC.0,C
MOVDATA_IN,A;
数据放进吸收数据缓冲存放器
T7,读键盘数据是CLK脉冲宽
DJNZBIT_COUNT,RECEIVELOOP;
吸收不到8位,持续轮回
吸收完毕,恢复DAT
准时器0中止程序
TIME0:
//DJNZR4,NEXT;
准时器一个周期内里断数不敷就持续计时
INCR2;
数字加1
重置准时器一个周期内里断数
CJNER2,#100,NEXT;
数字不敷100持续加1
MOVR2,#0;
数字到达100就清零
INCR3
CJNER3,#10,NEXT
MOVR3,#0
INCR4
CJNER4,#60,NEXT
MOVR4,#0
INCR5
CJNER5,#60,NEXT
MOVR5,#0
NEXT:
MOVTH0,#0FCH;
准时器方法1中止后须要从新设置准时器准时价
RETI
KBHIT:
PUSHPSW
PUSHACC
PUSHDPH
PUSHDPL
PUSHDATA_OUT
PUSHBIT_COUNT
MOVA,R0
MOVA,R1
MOVDATA_OUT,#00010101B
LCALLSEND
LCALLDELAY25
LCALLRECEIVE
MOVA,DATA_IN
JZSTART
DECA
JZSTOP
JZCLEAR
SJMPOUT
START:
SETBTR0
STOP:
CLRTR0
CLEAR:
MOVR2,#0
MOVR3,#0
MOVR5,#0
OUT:
POPACC
MOVR1,A
POPACC
MOVR0,A
POPBIT_COUNT
POPDATA_OUT
POPDPL
POPDPH
POPPSW
延时25ms子程序
DELAY25MS:
MOVR0,#49
D11:
MOVR1,#253
NOP
D12:
DJNZR1,D12
DJNZR0,D11
延时50μs子程序
DELAY50:
MOVR0,#23
D21:
DJNZR0,D21
延时25μs子程序
DELAY25:
MOVR0,#11
D31:
DJNZR0,D31
延时8μs子程序
DELAY8:
MOVR0,#2
D41:
DJNZR0,D41
延时1ms子程序
DELAY1MS:
MOVR0,#2
D51:
MOVR1,#247
D52:
DJNZR1,D52
DJNZR0,D51
END