您的位置:控制工程论坛网论坛 » 教程与手册 » 四位数码管对外部中断0响应计数

xilinxue

xilinxue   |   当前状态:在线

总积分:16186  2024年可用积分:0

注册时间: 2008-06-26

最后登录时间: 2020-03-22

空间 发短消息加为好友

四位数码管对外部中断0响应计数

xilinxue  发表于 2008/11/6 18:52:44      867 查看 1 回复  [上一主题]  [下一主题]

手机阅读

题: 四位数码管对外部中断0响应计数(汇编)    
; 作者: xilinxue

; 日期: 2007.2.28   
; 软件: Keil A51 V8.00    
; 芯片: AT89X51   
; 说明: 实验板实测通过,数码管为8位共阳   
; 声明: 自用存档!另仅供需要的朋友参考,请勿用做不道德转载及商业用途!    
;**************************************************************************   
  
         org   0000h  
         ajmp  start   
         org   0003h        ;外部中断0入口   
         ljmp  int_0        ;跳到外部中断0的中断服务程序处   
         org   0030h  
start:   mov   30h,#0       ;30单元存储个位值   
         mov   31h,#0       ;31单元存储十位值   
         mov   32h,#0       ;32单元存储百位值   
         mov   33h,#0       ;33单元存储千位值   
         mov   p2,#0xff     ;关所有数码管   
         mov   dptr,#table  ;数码管段码表首址送入dptr   
            
         setb  it0          ;外部中断0下降沿触发   
         setb  ea           ;开总中断   
         setb  ex0          ;开外部中断0   
            
lop:     lcall display      ;调用显示子程序   
         ajmp  lop          ;循环等待中断发生   
  
int_0:                      ;外部中断0的中断服务程序   
         inc   30h          ;个位值加1   
         mov   a,30h        ;个位值送入a   
         cjne  a,#10,over   ;个位未到10则结束此次循环   
         mov   30h,#0       ;个位到10清零   
            
         inc   31h          ;十位值加1(个位到10的进位)   
         mov   a,31h        ;十位值送入a   
         cjne  a,#10,over   ;十位未到10则结束此次循环   
         mov   31h,#0       ;十位到10清零   
            
         inc   32h          ;百位值加1(十位到10的进位)   
         mov   a,32h        ;百位值送入a   
         cjne  a,#10,over   ;百位未到10则结束此次循环   
         mov   32h,#0       ;百位到10清零   
            
         inc   33h          ;千位值加1(百位到10的进位)   
         mov   a,33h        ;千位值送入a   
         cjne  a,#10,over   ;千位未到10则结束此次循环   
         mov   33h,#0       ;千位到10清零   
  
over:    reti               ;中断返回   
  
display:                    ;显示子程序            
         mov   r0,#50       ;用于延长四位数的显示时间   
d_lop:      
         mov   a,30h        ;取个位值   
         movc  a,@a+dptr    ;个位数对应的段码送入a中   
         mov   p0,a         ;段码送入P0口   
         mov   p2,#0x7f     ;开个位显示(P2.7口控制个位数码管)   
         lcall d_1ms        ;延时1ms使四位数码管动态显示时能看清   
            
         mov   a,31h        ;取十位值   
         movc  a,@a+dptr    ;十位数对应的段码送入a中   
         mov   p0,a         ;段码送入P0口   
         mov   p2,#0xbf     ;开十位显示(P2.6口控制十位数码管)   
         lcall d_1ms        ;延时1ms作用同上   
            
         mov   a,32h        ;取百位值   
         movc  a,@a+dptr    ;百位数对应的段码送入a中   
         mov   p0,a         ;段码送入P0口   
         mov   p2,#0xdf     ;开百位显示(P2.5口控制十位数码管)   
         lcall d_1ms        ;延时1ms作用同上   
            
         mov   a,33h        ;取千位值   
         movc  a,@a+dptr    ;千位数对应的段码送入a中   
         mov   p0,a         ;段码送入P0口   
         mov   p2,#0xef     ;开千位显示(P2.4口控制十位数码管)   
         lcall d_1ms        ;延时1ms作用同上   
            
         djnz  r0,d_lop     ;延长每个四位数的显示时间   
         ret  
  
d_1ms:                      ;延时1ms子程序@12M(1.001ms)   
         mov   r7,#250      ;1+(1+1+2)*250=1001   
temp:    nop  
         nop  
         djnz  r7,temp   
         ret  
  
table:  db 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90  ;段码表   
         ;   0    1    2    3    4    5    6    7    8    9    对应内容   
  
end

1楼 0 0 回复
  • xilinxue

    xilinxue   |   当前状态:在线

    总积分:16186  2024年可用积分:0

    注册时间: 2008-06-26

    最后登录时间: 2020-03-22

    空间 发短消息加为好友

    xilinxue   发表于 2008/11/6 18:52:44

      因为可以看见,写的程序也能很快就看到,也很有成就感,就可以培养学习兴趣,这样你学起来就更轻松,希望初学的人从显示开始做起。。。。。。。。。。。。
    2楼 回复本楼

    引用 xilinxue 2008/11/6 18:52:44 发表于2楼的内容

总共 , 当前 /