用51单片机汇编语言,写一个60s倒计时的程序
2016-01-25 11:49
1146 查看
题目。写出一个60s倒计时的汇编语言,不要用C语言写,用汇编语言。
再设置一个按键,按一下,停止倒计时,再按一下,恢复倒计时。
;---------------------------------------
;假设系统晶振为 12MHz
;显示电路可见:http://xiangce.baidu.com/picture/detail/b72870d1c3d05f0783143da67f93282ecbab14f6
;按键连接在P3.2
;---------------------------------------
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP X0_INT
ORG 000BH
LJMP T0_INT
;---------------------------------------
ORG 0100H
MAIN: ;初始化
MOV TMOD, #01H
MOV TL0, #(65536 - 50000) MOD 256
MOV TH0, #(55536 - 50000) / 256
SETB TR0
SETB ET0
SETB EX0
SETB EA
MOV DPTR, #TAB ;表首址送DPTR
MOV R1, #0
MOV R2, #0
MOV R3, #20
;---------------------------------------
M_LOOP:
CALL DIS
SJMP M_LOOP
;---------------------------------------
T0_INT:
MOV TL0, #(65536 - 50000) MOD 256
MOV TH0, #(55536 - 50000) / 256
DJNZ R3, T0_E
MOV R3, #20
DEC R1
CJNE R1, #255, T0_E
MOV R1, #9
DEC R2
CJNE R2, #255, T0_E
MOV R2, #5
T0_E:
RETI
;---------------------------------------
X0_INT:
CALL DIS
JNB P3.2, X0_INT
CPL TR0
RETI
;---------------------------------------
DIS: ;显示程序.
MOV A, R2 ;显示十位.
MOVC A, @A+DPTR
CLR P2.1
MOV P1, A
SETB P2.0 ;十位的位选.
CALL DLY
MOV A, R1 ;个位显示.
MOVC A, @A+DPTR
CLR P2.0 ;关闭十位的显示.
MOV P1, A
SETB P2.1 ;个位的位选.
CALL DLY
RET
;------------------------------
TAB: DB 0xc0,0xf9,0xa4,0xb0,0x99 ;共阳极段码 0~4
DB 0x92,0x82,0xf8,0x80,0x90 ;共阳极段码 5~9
;---------------------------------------
DLY: MOV R6, #20 ;10ms延时.
D1: MOV R7, #248
DJNZ R7, $
DJNZ R6, D1
RET
;---------------------------------------
end
原题网址:http://zhidao.baidu.com/question/282485139.html#here
再设置一个按键,按一下,停止倒计时,再按一下,恢复倒计时。
;---------------------------------------
;假设系统晶振为 12MHz
;显示电路可见:http://xiangce.baidu.com/picture/detail/b72870d1c3d05f0783143da67f93282ecbab14f6
;按键连接在P3.2
;---------------------------------------
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP X0_INT
ORG 000BH
LJMP T0_INT
;---------------------------------------
ORG 0100H
MAIN: ;初始化
MOV TMOD, #01H
MOV TL0, #(65536 - 50000) MOD 256
MOV TH0, #(55536 - 50000) / 256
SETB TR0
SETB ET0
SETB EX0
SETB EA
MOV DPTR, #TAB ;表首址送DPTR
MOV R1, #0
MOV R2, #0
MOV R3, #20
;---------------------------------------
M_LOOP:
CALL DIS
SJMP M_LOOP
;---------------------------------------
T0_INT:
MOV TL0, #(65536 - 50000) MOD 256
MOV TH0, #(55536 - 50000) / 256
DJNZ R3, T0_E
MOV R3, #20
DEC R1
CJNE R1, #255, T0_E
MOV R1, #9
DEC R2
CJNE R2, #255, T0_E
MOV R2, #5
T0_E:
RETI
;---------------------------------------
X0_INT:
CALL DIS
JNB P3.2, X0_INT
CPL TR0
RETI
;---------------------------------------
DIS: ;显示程序.
MOV A, R2 ;显示十位.
MOVC A, @A+DPTR
CLR P2.1
MOV P1, A
SETB P2.0 ;十位的位选.
CALL DLY
MOV A, R1 ;个位显示.
MOVC A, @A+DPTR
CLR P2.0 ;关闭十位的显示.
MOV P1, A
SETB P2.1 ;个位的位选.
CALL DLY
RET
;------------------------------
TAB: DB 0xc0,0xf9,0xa4,0xb0,0x99 ;共阳极段码 0~4
DB 0x92,0x82,0xf8,0x80,0x90 ;共阳极段码 5~9
;---------------------------------------
DLY: MOV R6, #20 ;10ms延时.
D1: MOV R7, #248
DJNZ R7, $
DJNZ R6, D1
RET
;---------------------------------------
end
原题网址:http://zhidao.baidu.com/question/282485139.html#here
相关文章推荐
- 用51单片机汇编语言,编写“键控加减一”的程序
- OC浮点数是否需要加上f后缀
- 三层登录——VB.NET版
- Visual Studio 快捷键
- AutoTile 自动拼接(四) 学习与实践
- ubuntu下安装无线网卡去驱动Qualcomm-Atheros-QCA9377
- 动态获取cell高度
- 用51单片机汇编语言设计程序,实现一个4位秒表
- Python 字符编码学习-ascii编码,Unicode和UTF-8之间的关系
- 数码管显示 0-9999计数器
- 51单片机汇编语言编程:开关控制计时
- 数码管显示 0000-9999计数器
- 51单片机2个外部中断的应用
- 用80x86汇编语言编程:键盘输入与显示输出
- 用80x86汇编语言编程:输入后反序显示
- 用80x86汇编语言读写系统时间
- 利用单片机控制频率合成器 MC145151-2 的输出频率
- #UML#UML类图
- 智能交通灯
- 51单片机的4×4键盘识别与74LS164驱动数码显示