用51单片机汇编语言做的频率计的所有资料下载:
六位频率计.zip
(32.79 KB, 下载次数: 40)
汇编语言源程序:
- VALUEH EQU 20H ;暂存TH1的值
- VALUEL EQU 21H ;暂存TL1的值
- DATE0 EQU 22H ;暂存计数值的BCD码
- DATE1 EQU 23H
- DATE2 EQU 24H
- DATE3 EQU 25H
- DATE4 EQU 26H
- DATE5 EQU 27H
- COUNT EQU 30H
- ;-----------------------------------------------------------------------------
- ORG 0000H
- SJMP MAIN
- ORG 000BH
- LJMP INT_T0
- ORG 001BH
- LJMP INT_T1
- MAIN: MOV DPTR,#TABLE
- MOV 20H,#00H ;存储空间初始化
- MOV 21H,#00H
- MOV 22H,#00H
- MOV 23H,#00H
- MOV 24H,#00H
- MOV 25H,#00H
- MOV 26H,#00H
- MOV 30H,#00H
- MOV R1,#00H ;R1作为计数器溢出的次数
- MOV TMOD,#15H ;定时器1工作在定时方式
- ;定时器0工作在计数方式
- MOV TH1,#3CH
- MOV TL1,#0B8H
- MOV TH0,#00H
- MOV TL0,#00H
- MOV IE,#8AH ;开启定时器0和1
- SETB TR0 ;启动定时
- SETB TR1 ;启动计数
- W1:
- LCALL DISP ;显示计数值
- LJMP W1
- ;------------------------------------------------------------------------
- INT_T0: ;中断0作为计数器溢出
- ;溢出R1加1
- MOV TH0,#00H
- MOV TL0,#00H
- INC R1
- CLR TF0
- RETI
- INT_T1: MOV TH1,#3CH
- MOV TL1,#0B8H
- INC COUNT
- MOV A,COUNT
- CJNE A,#20,RETUNE ;是否计满1秒
- MOV COUNT,#00H
- CLR TR0 ;关闭定时器
- CLR TR1 ;关闭计数器
- MOV VALUEL,TL0 ;存放计数值
- MOV VALUEH,TH0
-
- LCALL HTOD
- ;将十六进制数转换为十进制数
- RETUNE:
- RETI
- ;-------------------------------------------------------------------------------------
- ;这段程序将VALUEH/VALUEL中的16进制数转成10进制并且把5位数依次存入DATE0至DATE4
- ;-------------------------------------------------------------------------------------
- HTOD:
- MOV R2,VALUEH ;把计数器的值送到R2,R3
- MOV R3,VALUEL ;送到R2,R3后把R2,R3里面压缩的十六位的二进制数转换成十进制数
- CLR A ;然后存放到R4,R5,R6中
- MOV R4,A
- MOV R5,A
- MOV R6,A
- MOV R7,#18H
- LOOP1:
- CLR C
- MOV A,R3
- RLC A
- MOV R3,A
- MOV A,R2
- RLC A
- MOV R2,A
- MOV A,R1
- RLC A
- MOV R1,A
-
- MOV A,R6
- ADDC A,R6
- DA A
- MOV R6,A
-
- MOV A,R5
- ADDC A,R5
- DA A
- MOV R5,A
-
- MOV A,R4
- ADDC A,R4
- DA A
- MOV R4,A
- DJNZ R7,LOOP1
- CZ: MOV R0,#DATE5 ;把R4,R5,R6中的数放到DATE0~DATE5中
- MOV A,R6
- ANL A,#0FH
- MOV @R0,A
-
- DEC R0
- MOV A,R6
- SWAP A
- ANL A,#0FH
- MOV @R0,A
-
- DEC R0
- MOV A,R5
- ANL A,#0FH
- MOV @R0,A
-
- DEC R0
- MOV A,R5
- SWAP A
- ANL A,#0FH
- MOV @R0,A
-
- DEC R0
- MOV A,R4
- ANL A,#0FH
- MOV @R0,A
- DEC R0
- MOV A,R4
- SWAP A
- ANL A,#0FH
- MOV @R0,A
- RET
- ;-----------------显示子程序----------------------------------------------
- DISP:
- MOV A,DATE5 ;把DATE5~DATE0送到数码管显示
- MOVC A,@A+DPTR
- MOV P2,#0FFH
- CLR P2.2
- MOV P1,A
- LCALL DL1MS
- SETB P2.2
- MOV A,DATE4
- MOVC A,@A+DPTR
- MOV P2,#0FFH
- CLR P2.3
- MOV P1,A
- LCALL DL1MS
- MOV P2,#0FFH
- MOV A,DATE3
- MOVC A,@A+DPTR
- MOV P2,#0FFH
- CLR P2.4
- MOV P1,A
- LCALL DL1MS
- MOV P2,#0FFH
- MOV A,DATE2
- MOVC A,@A+DPTR
- MOV P2,#0FFH
- CLR P2.5
- MOV P1,A
- LCALL DL1MS
- MOV P2,#0FFH
- MOV A,DATE1
- MOVC A,@A+DPTR
- MOV P2,#0FFH
- CLR P2.6
- MOV P1,A
- LCALL DL1MS
- MOV P2,#0FFH
- MOV A,DATE0
- MOVC A,@A+DPTR
- MOV P2,#0FFH
- CLR P2.7
- MOV P1,A
- LCALL DL1MS
- MOV P2,#0FFH
- RET
- ;-----------------------------------------------------------------------
- DL1MS: MOV R6,#14H ;1MSDELAY
- DL1: MOV R7,#19H
- DL2: DJNZ R7,DL2
- DJNZ R6,DL1
- RET
- TABLE: DB 3FH,06H,5BH,4FH,66H
- DB 6DH,7DH,07H,7FH,6FH
- END
复制代码
|