ad.asm
Upload User: koyaalight
Upload Date: 2020-09-15
Package Size: 2k
Code Size: 4k
Development Platform:

DOS

  1. ;**************************************************
  2. ;   平凡单片机工作室
  3. ; http://www.mcustudio.com
  4. ;    Copyright 2003 pingfan's McuStudio
  5. ;    All rights Reserved
  6. ;作者:周坚
  7. ;文件名:ad.asm
  8. ;DSB?1A型实验板与TLC1543的接口
  9. ;功能简介:每隔1s轮流将一个通道的值显示在数码管后4位,首位显示通道号
  10. ;**************************************************
  11. gCoun DATA 22H ;通道计数器
  12. ;以下定义各引脚
  13. ADCLK  EQU  P1.1 ;时钟
  14. ADaddr  EQU  P1.2 ;地址引脚
  15. ADDout  EQU  P1.3 ;数据端
  16. ADCS  EQU  P1.4 ;片选端
  17. Hidden DATA 10H ;消隐码
  18. Counter DATA 57H ;显示程序用计数器
  19. DISPBUF DATA 58H ;显示缓冲区首地址
  20. ORG 0000H
  21. JMP START
  22. ORG 000BH ;定时中断使用T0
  23. JMP DISP ;定时中断程序
  24. ORG 30H
  25. START:
  26. MOV SP,#5FH ;初始化
  27. MOV P1,#0FFH
  28. MOV P0,#0FFH
  29. MOV P2,#0FFH ;关所有LED及数码管
  30. MOV TMOD,#00000001B
  31. MOV TH0,#HIGH(65536-3000)
  32. MOV TL0,#LOW(65536-3000)
  33. SETB TR0
  34. SETB EA
  35. SETB ET0
  36. MOV Counter,#0 ;计数器清零
  37. MOV DISPBUF+1,#Hidden ;第2位显示器消隐
  38. MOV gCoun,#0 ;通道计数器清零,指向通道0
  39. LOOP:
  40. CALL Delay ;延时1s
  41. MOV R2,gCoun ;送通道号
  42. CALL ADConver
  43. MOV A,R0
  44. MOV R6,A
  45. MOV A,R1
  46. MOV R7,A
  47. CALL HB2
  48. ;调用二-十进制转换程序
  49. ;入口:待转换的双字节十六进制数在R6和R7中
  50. ;出口:转换结束的结果在R3、R4和R5中,压缩BCD码方式存储
  51. MOV A,R4
  52. ANL A,#0F0H
  53. SWAP A ;高低4位互换
  54. MOV DispBuf+2,A ;最高位
  55. MOV A,R4
  56. ANL A,#0FH
  57. MOV DispBuf+3,A
  58. MOV A,R5
  59. ANL A,#0F0H
  60. SWAP A
  61. MOV DispBuf+4,A
  62. MOV A,R5
  63. ANL A,#0FH
  64. MOV DispBuf+5,A
  65. ;以上程序段将压缩BCD码转换成非压缩BCD码并送显示缓冲区
  66. MOV DispBuf,gCoun ;将通道号送第1个显示器的显示缓冲区
  67. INC gCoun ;通道号加1
  68. MOV A,gCoun
  69. CJNE A,#11,LOOP ;判断是否到11了
  70. MOV gCoun,#0 ;到则回零
  71. JMP LOOP
  72. ;命令:ADConver
  73. ;参数:r2 通道号,转换前存入 转换结后数据在r0r1中,高位在前
  74. ;资源占用:r0,r1,r7,A 
  75. ADConver:
  76. CLR ADClk
  77. CLR ADCS
  78. MOV A,R2
  79. RLC A
  80. ;送出地址信号
  81. MOV R7,#4
  82. C_L1:
  83. RLC A
  84. MOV ADAddr,C
  85. SETB ADClk
  86. NOP
  87. NOP
  88. NOP
  89. NOP
  90. CLR ADClk
  91. DJNZ R7,C_L1
  92. ;补6个脉冲
  93. MOV R7,#6
  94. C_L2:
  95. SETB ADClk
  96. NOP
  97. NOP
  98. NOP
  99. NOP
  100. CLR ADClk
  101. DJNZ R7,C_L2
  102. ;等待转换结束
  103. SETB ADCS
  104. NOP
  105. NOP
  106. NOP
  107. NOP
  108. CLR ADCS
  109. ;取高2位
  110. NOP
  111. NOP
  112. NOP
  113. NOP
  114. SETB ADDout
  115. SETB ADClk
  116. MOV C,ADDout
  117. MOV ACC.1,C
  118. CLR ADClk
  119. NOP
  120. NOP
  121. NOP
  122. NOP
  123. SETB ADDout
  124. SETB ADClk
  125. MOV C,ADDout
  126. MOV ACC.0,C
  127. CLR ADClk
  128. ANL A,#00000011B ;清A的高6位
  129. MOV R0,A ;保存数据
  130. MOV R7,#8
  131. C_L3:
  132. NOP
  133. NOP
  134. NOP
  135. NOP
  136. SETB ADDout
  137. SETB ADClk
  138. MOV C,ADDout
  139. MOV ACC.0,C
  140. RLC A
  141. CLR ADClk
  142. DJNZ R7,C_L3
  143. SETB ADCS
  144. MOV R1,A
  145. RET
  146. ;**********************************************************
  147. ;以下是显示程序,使用定时器T1作定时中断
  148. ;**********************************************************
  149. DISP:  ;定时器T0的中断响应程序
  150. PUSH ACC ;ACC入栈
  151. PUSH PSW ;PSW入栈
  152. MOV TH0,#HIGH(65536-3000);定时时间为3000个周期
  153. MOV TL0,#LOW(65536-3000)
  154. MOV A,#DISPBUF ;显示缓冲区首地址
  155. ADD A,Counter 
  156. MOV R0,A
  157. MOV A,@R0 ;根据计数器的值取相应的显示缓冲区的值
  158. MOV DPTR,#DISPTAB ;字形表首地址
  159. MOVC A,@A+DPTR ;取字形码
  160. MOV P0,A ;将字形码送P0位(段口)
  161. MOV A,Counter ;取计数器的值
  162. MOV R0,A
  163. MOV DPTR,#BitTab
  164. MOVC A,@A+DPTR ;取位
  165. ORL P2,#11111100B
  166. ANL P2,A
  167. INC Counter ;计数器加1
  168. MOV A,Counter
  169. CJNE A,#6,DISPEXIT
  170. MOV Counter,#0 ;如果计数器计到6,则让它回0
  171. DISPEXIT:
  172. POP PSW
  173. POP ACC
  174. RETI
  175. BitTab: DB 7Fh,0BFH,0DFH,0EFH,0F7H,0FBH
  176. DISPTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH
  177. HB2: CLR A
  178. MOV R3,A
  179. MOV R4,A
  180. MOV R5,A
  181. MOV R2,#10H
  182. HB3: MOV A,R7
  183. RLC A
  184. MOV R7,A
  185. MOV A,R6
  186. RLC A
  187. MOV R6,A
  188. MOV A,R5
  189. ADDC A,R5
  190. DA A
  191. MOV R5,A
  192. MOV A,R4
  193. ADDC A,R4
  194. DA A
  195. MOV R4,A
  196. MOV A,R3
  197. ADDC A,R3
  198. MOV R3,A
  199. DJNZ R2,HB3
  200. RET
  201. Delay:
  202. MOV R7,#10
  203. D1: MOV R6,#250
  204. D2: MOV R5,#200
  205. DJNZ R5,$
  206. DJNZ R6,D2
  207. DJNZ R7,D1
  208. RET
  209. end