首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

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

2012-02-07 
我的程序主要是实现8051的TO、T1分别计数,并做差并用LED显示,不知道哪里错了,哪位高手能帮我看下?谢谢!ORG

我的程序主要是实现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


  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,R3 ;十位数字形码的地址偏移量送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,R7 ;R7送给A
  JZ LOOP1 ;A=0则LOOP1
  MOV A,#14H ;负号地址偏移量送A
  MOVC A,@A+DPTR
  MOV P0,A ;负号字形码送P0口  
  MOV P2,#00000001B ;字位码送P2口 
  ACALL DELAY ;延时1ms
  ANL P2,#00000000B ;令显示器熄灭,以免产生残影

LOOP1: MOV A,#10H ;空格(正号)地址偏移量送A
  MOVC A,@A+DPTR
  MOV P0,A ;空格(正号)字形码送P0口
  MOV P2,#00000001B ;字位码送P2口
  ACALL DELAY ;延时1ms
  ANL P2,#00000000B ;令显示器熄灭,以免产生残影

   
DELAY: MOV R2,#02H ;延时1ms程序
DELAY1: MOV R1,#0FFH
DELAY2: DJNZ R1,DELAY2
  DJNZ R2,DELAY1
  RET ;返回
   
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H ;字形码表
  DB 92H, 82H, 0F8H,80H, 90H
  DB 88H, 83H, 0C6H,0A1H,86H
  DB 8EH, 0FFH,0CH, 89H, 7FH
  DB 0BFH
   
  END




[解决办法]
T0 T1 谁先计满?不知道的话 需要判断啊 计数值加法应该先地位减 后高位减啊!

热点排行