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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)