历史上的今天
今天是:2025年08月06日(星期三)
2021年08月06日 | 用51单片机汇编语言,写一个60s倒计时的程序
2021-08-06 来源:eefocus
题目。写出一个60s倒计时的汇编语言,不要用C语言写,用汇编语言。
再设置一个按键,按一下,停止倒计时,再按一下,恢复倒计时。
;---------------------------------------
;假设系统晶振为 12MHz
;按键连接在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
上一篇:简单计时器的51单片机实现
下一篇:基于51单片机的电子秒表设计
史海拾趣
|
MCF52233_CFM—Coldfire Flash Module Coldfire的CFM功能是把它的flash当作EEPROM来用。使用起来还是很方便的,只要完成几个小的功能函数就行了: 第一个是CFM的初始化CFM_init(),完成时钟的设置; 第二个是页擦除CFM_Page_eraser(), ...… 查看全部问答> |
|
1、隐形的备用电池 你的手机电量不足了,为了让它能够继续使用,按*3370#键,手机会重新启动,启动完毕后,你就会发现电量增加了50%。这部分隐藏的备用电量 用完了你就必须得充电了,再次充电的时候,隐形的备用电池也同时充电,下次电量低的时候 ...… 查看全部问答> |
|
【转帖】作者:冷昭军 现任深圳茂硕电源科技股份有限公司 电源开发工程师 很多电源工程师对开关电源中高频磁性元件的设计存在错误的概念,其设计出来的高频磁性元件不能满足应用场合的要求,影响了研发的进度和项目的按期完成。基 于开关电源及 ...… 查看全部问答> |
|
我用的软件是EVC4.0,我创建了Dialog base对话框或者Single document,在控件栏中都没有webbrowser控件。 请问是要怎么样才能加上去呢?… 查看全部问答> |
|
程序也不大,电路图也不复杂,就是数码管动态显示,用中断搞了一个表,结果mcu的clock设置11.0592MHz时,就过载了,设成300KHz就还可以,可是毕竟是个表啊,查Proteus的帮助说把电阻什么的都数字化,可是还是不行,版本v7.1,求教,谢谢!… 查看全部问答> |
|
刚装了ISE11.1 安装过程顺利,能打开软件,不过在调试正确的程序源文件时总是不能综合完成,也没有任何错误。只是最后显示 Process \"Synthesis\" failed &n ...… 查看全部问答> |




