当前位置: 代码迷 >> 汇编语言 >> 小弟我的程序主要是实现8051的TO、T1分别计数,并做差并用LED显示,不知道错哪了,谁能帮小弟我看下?多谢
  详细解决方案

小弟我的程序主要是实现8051的TO、T1分别计数,并做差并用LED显示,不知道错哪了,谁能帮小弟我看下?多谢

热度:4399   发布时间:2013-02-26 00:00:00.0
我的程序主要是实现8051的TO、T1分别计数,并做差并用LED显示,不知道哪里错了,哪位高手能帮我看下?谢谢!
ORG 0300H

CSH: MOV R3,#0FH ;字位码始值送R3
  MOV A,R3
  MOV P2,A ;字位码送P2口
  MOV A,#0C0H ;字形码送A(“0”的字形码)
  MOV P0,A ;字形码送P0口,LED显示全0

START: JB P1.0,START ;等待开始键按下,若无按下,则系统不工作

ZCZ: MOV TMOD,#55H ;令T0和T1为计数器方式1
  MOV TH0,#0D8H ;装入T0高8位初值
  MOV TL0, #0F0H ;装入T0低8位初值 
  SETB TR0 ;启动T0计数
  SETB TR1 ;启动T1计数

JX: JB TF0,OK ;若T0溢满,跳转至OK
  AJMP JX ;若T0未溢满则JX
OK: CLR TR0 ;停止T0计数
  CLR TR1 ;停止T1计数




QIUCHA: ;求T0与T1的差值
  MOV 10H,TL0 ;赋T0低八位给10H
  MOV 11H,TH0 ;赋T0高八位给11H
  MOV 12H,TL1 ;赋T1低八位给12H  
  MOV 13H,TH1 ;赋T1高八位给13H
  CLR C ;清零
  MOV A,11H  
  SUBB A,13H ;T0与T1高八位相减
  MOV 15H,A ;结果赋给15H
  MOV A,10H  
  SUBB A,12H ;T0与T1低八位相减
  MOV 14H,A ;结果赋给14H

  JC QJDZ
  MOV R7,#00H ;差值为为正数时,R7=0
  MOV 16H,14H ;差值低八位赋给16H
  MOV 17H,15H ;差值高八位赋给17H
  SJMP LOOP ;转移至LOOP

QJDZ: ;求绝对值
  MOV R7,#01H ;差值为负数时,R7=1
  MOV A,14H ;低八位赋给A
  CPL A ;取反
  INC A ;加1
  MOV 16H,A ;赋给16H
  JC JIA ;低八位若产生进位,则跳转JIA
  MOV A,15H ;无进位,高八位赋给A
  CPL A ;取反
  MOV 17H,A ;赋给17H
  SJMP LOOP ;转移至LOOP

JIA: ;低八位有产生进位
  MOV A,15H ;把1高八位赋给A
  CPL A ;取反
  INC A ;加1
  MOV 17H,A ;赋给17H
  SJMP LOOP ;转移至LOOP




LOOP:
  MOV A, 16H ;低八位二进制赋给A
  MOV B, #100 ;100赋给B
  DIV AB ;A除以B
  MOV R3, A ;百位数送R3
  MOV A, #10 ;10赋给A,B中为余数 
  XCH A, B ;A与B中的数交换
  DIV AB ;A除以B
  MOV R4, A ;十位数送R4,B中为余数
  MOV R5, B ;个位数送R5





DISPLY: 
  MOV DPTR,#TABLE ;DPTR指向字形表的起始地址
  MOV R0,#00001000B ;字位码送R0
  MOV A,R5 ;个位数字形码的地址偏移量送A
  MOVC A,@A+DPTR
  MOV P0,A ;字形码送P0口
  MOV P2,R0 ;字位码送P2口 
  ACALL DELAY ;延时1ms
  ANL P2,#00000000B ;令显示器熄灭,以免产生残影  

  MOV DPTR,#TABLE ;DPTR指向字形表的起始地址
  MOV A,R0
  RR A ;字位码右移
  MOV R0,A
  MOV A,R4 ;十位数字形码的地址偏移量送A
  MOVC A,@A+DPTR