⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dzb.asm

📁 电子表程序 用8051单片机和汇编语言做的一个电子表
💻 ASM
字号:
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0_INT
ORG 0100H
MAIN: MOV DPTR,#4003H ;初始化8255
      MOV A,#80H
      MOVX @DPTR,A
     
      MOV TMOD,#01H   ;设T0和IE
      MOV IE,#82H
     
      MOV TL0,#0B0H   ;定时100ms
      MOV TH0,#3CH
  
      MOV R1,#0       ;时
      MOV R2,#0       ;分
      MOV R3,#0       ;100ms计时用
      MOV R4,#0       ;秒
          
set_time: acall display
          mov p1,#0f0h       ;初始化P1口  则p1.6=1蜂鸣器不响 p1.0和p1.1=0不调时
   judge: jb  p1.2,time      ;P1.2=1启动电子表    
                             ;    =0设时间
set_fen: jnb P1.1,set_shi    ;p1.1!=1去调小时
         acall delay100ms    ;延时100ms可以加长判断时间
         jnb p1.1,set_shi
         inc r2
         mov a,r2
         subb a,#60
         jz shi_add
         ajmp set_time

shi_add: acall bell     ;整点响铃报时
         inc r1         ;小时加一
         mov r2,#0      ;分钟清零
         mov a,r1
         subb a,#24
         jz clr_shi
         ajmp set_time

set_shi: jnb p1.0,set_time
         acall delay100ms    ;延时100ms可以加长判断时间
         jnb p1.0,set_time
         inc r1
         mov a,r1
         subb a,#24
         jz clr_shi
         ajmp set_time

clr_shi: mov r1,#0
         ajmp set_time

time: acall display
      setb tr0    ;启动定时器
here: sjmp judge   ;再判断P1.2
      sjmp here

;中断子程序
T0_INT:   
        push acc
        push psw
        clr tr0
        mov ie,#0

        mov tl0,#0b0h
        mov th0,#3ch
        inc r3
        mov a,r3
        cjne a,#10,reti1
        mov r3,#0   ;秒到
        acall ss    ;分钟闪烁
	inc r4
        mov a,r4
        cjne a,#60,reti1
        mov r4,#0   ;分到
        inc r2
        mov a,r2
        cjne a,#60,reti1
        acall bell  ;整点响铃报时
        mov r2,#0   ;时到
        inc r1
        mov a,r1
        cjne a,#24,reti1
        mov r1,#0   ;24时到
reti1:  setb tr0
        mov ie,#82h
        pop psw
        pop acc
        reti        ;中断返回

;显示子程序	 
display: mov a,r1    ;时
         jz shi_BCD  ;A=0转换
         subb a,#24  ;A!=0则和24比
         jnz shi_BCD ;!=24转换
         mov r1,#0   ;=24 则r1<=0

shi_BCD: mov a,r1
         mov b,#10
         div ab
         swap a
         orl a,b
         mov dptr,#4000h
         movx @dptr,a
         inc dptr
      ;========
         mov a,r2     ;分
         jz fen_BCD
         subb a,#60
         jnz fen_BCD
         mov r2,#0

fen_BCD: mov a,r2
         mov b,#10
         div ab
         swap a
         orl a,b
         movx @dptr,a
	 ret 

;响铃子程序
bell: MOV R5,#100  ;10s记时用
      clr p1.6
  tt: acall delay100ms
      djnz r5,tt
      setb p1.6
      ret

;延时子程序
delay100ms: mov r6,#250
      loop: mov r7,#198
     loop1: djnz r7,loop1
            djnz r6,loop
	    ret
 
;闪烁子程序
ss: mov a,#0afh
    mov dptr,#4001h
    movx @dptr,a
    acall delay100ms
    acall delay100ms
    acall delay100ms
    acall delay100ms
    acall fen_BCD  ;调时结束转为电子钟时,分钟转换
    ret

end  








     
     

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -