汇编语言编程 秒表程序

汇编语言编程 秒表程序,第1张

直接发给你把

PROCESSOR 16C74

INCLUDE "P16C74B.INC "

SECEQU 0X23

MSEC EQU 0x24

TEMP1 EQU 0X22

FLAG2 EQU 0X28

ORG 0x00

GOTO START

ORG 0x04设定中断向量

BCF STATUS,RP0

BTFSC INTCON,T0IF 判断TIER0中断标志位是否被设置

GOTO TMR0_ISR 若是,则去执行TIMER0中断子程序

RETFIE

START:

CALL PIC_INIT 去设置端口、TIMER0工作模式

BSF INTCON,GIE

BSF INTCON,T0IE

MAIN_LOOP:

程序的主体是个无限循环

BTFSC FLAG2,7

CALL DISPLAY

GOTO MAIN_LOOP

PIC_INIT:

CLRF INTCON

BCF INTCON,T0IE

BSF STATUS,RP0

MOVLW B'00000000'B’XXXXXXXX’表示单引号中的数是二

MOVWF TRISB

MOVLW B'00000000'

MOVWF TRISC

BCF STATUS,RP0

MOVLW B'11000000'B’XXXXXXXX’表示单引号中的数是二

MOVWF PORTB

MOVLW B'11000000'

MOVWF PORTC

BSF STATUS,RP0

MOVLW B'11000100'

MOVWF OPTION_REG 对TIMER0工作模式进行设置,32分频

BCF STATUS,RP0

MOVLW 0X06

MOVWF TMR0

CLRF SEC

CLRF MSEC

CLRF TEMP1

CLRF FLAG2

RETURN

TMR0_ISR:

CLRWDT

BSF FLAG2,7

BCF INTCON,T0IF

MOVLW 0X06

MOVWF TMR0

CLRWDT

INCF TEMP1,1

MOVF TEMP1,0

SUBLW .125 125-TEMP

BTFSS STATUS,2

RETFIE

CLRWDT

CLRF TEMP1

INCF MSEC,1

RETFIE

DISPLAY:

MOVF MSEC,0

SUBLW .10

BTFSS STATUS,2

GOTO NEXT_1

CLRWDT

CLRF MSEC

INCF SEC,1

MOVF SEC,0

SUBLW .6

BTFSS STATUS,2

GOTO NEXT_1

CLRF SEC

NEXT_1:

CLRWDT

MOVF MSEC,W

CALL CHAR_CODE

MOVWF PORTC

MOVF SEC,W

CALL CHAR_CODE

MOVWF PORTB

BCF FLAG2,7

RETURN

CHAR_CODE:

ADDWF PCL,1PCL+=W

RETLW B'11000000' Code for 0

RETLW B'11111001' Code for 1

RETLW B'10100100' Code for 2

RETLW B'10110000' Code for 3

RETLW B'10011001' Code for 4

RETLW B'10010010' Code for 5

RETLW B'10000010' Code for 6

RETLW B'11111000' Code for 7

RETLW B'10000000' Code for 8

RETLW B'10010000' Code for 9

END

秒表可以用定时器来实现,举例如下:

KEYVAL EQU 30H

DAT EQU 33H

SCANLED EQU 39H

CLK EQU 77H

SEC EQU 78H

SEC1 EQU 79H

SEC2 EQU 7AH

DOT BIT 00H

ORG 0000H

LJMP MAIN

ORG 0003H

LJMP EXTINT0

ORG 000BH

LJMP T0ISR 50ms定时

ORG 001BH

LJMP T1ISR 扫描显示

ORG 0030H

MAIN:

MOV SP,#5FH

MOV TMOD,#11H

MOV TH0,#03CH

MOV TL0,#0B0H

MOV TH1,#0ECH

MOV TL1,#078H

MOV KEYVAL,#2

MOV 33H,#10H

MOV 34H,#10H

MOV 35H,#10H

MOV 36H,#10H

MOV CLK,#0

SETB IT0

SETB EX0

CLR TR0

CLR ET0

MOV R2,#0

SETB TR1

SETB ET1

SETB EA

LOOP:

MOV A,KEYVAL

LOOP1:

JNZ LOOP2 启动

SETB TR0

SETB ET0

SJMP LOOP

LOOP2:

DEC A

JNZ LOOP3 暂停

CLR TR0

CLR ET0

SJMP LOOP

LOOP3:

DEC A

JNZ LOOP 清零

MOV 36H,#0

MOV 35H,#0

MOV 34H,#0

MOV 33H,#0

SJMP LOOP

EXTINT0:

PUSH ACC

INC KEYVAL

MOV A,KEYVAL

CJNE A,#3,EXT00

EXT00:

JC EXT01

MOV KEYVAL,#0

EXT01:

POP ACC

RETI

T0ISR:

PUSH ACC

CLR TR0

MOV TH0,#3CH

MOV TL0,#0B0H

SETB TR0

INC CLK

MOV A,CLK

CJNE A,#2,T0ISRE

MOV CLK,#0

INC 36H

MOV A,36H

CJNE A,#10,T0ISRE

MOV 36H,#0

INC 35H

MOV A,35H

CJNE A,#10,T0ISRE

MOV 35H,#0

INC 34H

MOV A,34H

CJNE A,#6,T0ISRE

MOV 34H,#0

INC 33H

MOV A,33H

CJNE A,#10,T0ISRE

MOV 33H,#0

T0ISRE:

POP ACC

RETI

T1ISR:

PUSH ACC

CLR TR1

MOV TH1,#0ECH

MOV TL1,#78H

SETB TR1

MOV DPTR,#LEDTAB

T100:

MOV R0,#DAT

MOV A,SCANLED

ADD A,R0

MOV R0,A

MOV A,SCANLED

JNZ T101

MOV P2,#01H

SETB DOT

SJMP T1DIS

T101:

DEC A

JNZ T102

MOV P2,#02H

CLR DOT

SJMP T1DIS

T102:

DEC A

JNZ T103

MOV P2,#04H

SETB DOT

SJMP T1DIS

T103:

MOV P2,#08H

CLR DOT

T1DIS:

MOV A,@R0

MOVC A,@A+DPTR

JNB DOT,T1DIS1

ORL A,#01H

T1DIS1:

CPL A

MOV P0,A

INC SCANLED

MOV A,SCANLED

CJNE A,#4,T1END

MOV SCANLED,#0

T1END:

POP ACC

RETI

LEDTAB: DB 0FCH "0" 00H

DB 60H "1" 01H

DB 0DAH "2" 02H

DB 0F2H "3" 03H

DB 66H "4" 04H

DB 0B6H "5" 05H

DB 0BEH "6" 06H

DB 0E0H "7" 07H

DB 0FEH "8" 08H

DB 0F6H "9" 09H

DB 0EEH "A" 0AH

DB 3EH "B" 0BH

DB 9CH "C" 0CH

DB 7AH "D" 0DH

DB 9EH "E" 0EH

DB 8EH "F" 0FH

DB 00H " " 10H

END

设计一个秒表,需要考虑以下因素

1、因为视觉暂留的因素,一般而言到0.1秒的精度就可以了。

2、需要有按键控制启动、停止、清零这些功能。

KEYVAL EQU 30H

DAT  EQU 33H

SCANLED EQU 39H

CLK  EQU 77H

SEC  EQU 78H

SEC1 EQU 79H

SEC2 EQU 7AH

DOT  BIT 00H

ORG 0000H

LJMP MAIN

ORG 0003H

LJMP EXTINT0

ORG 000BH

LJMP T0ISR 50ms定时

ORG 001BH

LJMP T1ISR 扫描显示

ORG 0030H

MAIN:

MOV SP,#5FH

MOV TMOD,#11H

MOV TH0,#03CH

MOV TL0,#0B0H

MOV TH1,#0ECH

MOV TL1,#078H

MOV KEYVAL,#2

MOV 33H,#10H

MOV 34H,#10H

MOV 35H,#10H

MOV 36H,#10H

MOV CLK,#0

SETB IT0

SETB EX0

CLR TR0

CLR ET0

MOV R2,#0

SETB TR1

SETB ET1

SETB EA

LOOP:

MOV A,KEYVAL

LOOP1:

JNZ LOOP2 启动

SETB TR0

SETB ET0

SJMP LOOP

LOOP2:

DEC A

JNZ LOOP3 暂停

CLR TR0

CLR ET0

SJMP LOOP

LOOP3:

DEC A

JNZ LOOP 清零

MOV 36H,#0

MOV 35H,#0

MOV 34H,#0

MOV 33H,#0

SJMP LOOP

EXTINT0:

PUSH ACC

INC KEYVAL

MOV A,KEYVAL

CJNE A,#3,EXT00

EXT00:

JC EXT01

MOV KEYVAL,#0

EXT01:

POP ACC

RETI

T0ISR:

PUSH ACC

CLR TR0

MOV TH0,#3CH

MOV TL0,#0B0H

SETB TR0

INC CLK

MOV A,CLK

CJNE A,#2,T0ISRE

MOV CLK,#0

INC 36H

MOV A,36H

CJNE A,#10,T0ISRE

MOV 36H,#0

INC 35H

MOV A,35H

CJNE A,#10,T0ISRE

MOV 35H,#0

INC 34H

MOV A,34H

CJNE A,#6,T0ISRE

MOV 34H,#0

INC 33H

MOV A,33H

CJNE A,#10,T0ISRE

MOV 33H,#0

T0ISRE:

POP ACC

RETI

T1ISR:

PUSH ACC

CLR TR1

MOV TH1,#0ECH

MOV TL1,#78H

SETB TR1

MOV DPTR,#LEDTAB

T100:

MOV R0,#DAT

MOV A,SCANLED

ADD A,R0

MOV R0,A

MOV A,SCANLED

JNZ T101

MOV P2,#01H

SETB DOT

SJMP T1DIS

T101:

DEC A

JNZ T102

MOV P2,#02H

CLR DOT

SJMP T1DIS

T102:

DEC A

JNZ T103

MOV P2,#04H

SETB DOT

SJMP T1DIS

T103:

MOV P2,#08H

CLR DOT

T1DIS:

MOV A,@R0

MOVC A,@A+DPTR

JNB DOT,T1DIS1

ORL A,#01H

T1DIS1:

CPL A

MOV P0,A

INC SCANLED

MOV A,SCANLED

CJNE A,#4,T1END

MOV SCANLED,#0

T1END:

POP ACC

RETI

LEDTAB: DB 0FCH "0" 00H

DB 60H "1" 01H

DB 0DAH "2" 02H

DB 0F2H "3" 03H

DB 66H "4" 04H

DB 0B6H "5" 05H

DB 0BEH "6" 06H

DB 0E0H "7" 07H

DB 0FEH "8" 08H

DB 0F6H "9" 09H

DB 0EEH "A" 0AH

DB 3EH "B" 0BH

DB 9CH "C" 0CH

DB 7AH "D" 0DH

DB 9EH "E" 0EH

DB 8EH "F" 0FH

DB 00H " " 10H

END


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12006505.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存