PICで7セグLEDタイマーっぽいの完成

昨日なかなか苦労していた7セグLEDの制御が割とうまくいきました。

100秒のカウントダウンタイマーを作ろうとしたところ昨日の考え方では21行×100秒で2100行ものプログラムが必要でしたが、改良を行ったところ1/5ほどの行数で同じことができるようになりました。
でもまだ改良の余地はありそうだなぁ・・・


・PIC16F887
・20MHzセラロック
・7セグLEDはアノードコモン
・実は正確な100秒ではない

   list      p=16f887   ; list directive to define processor
   #include   <p16f887.inc>   ; processor specific variable definitions


; '__CONFIG' directive is used to embed configuration data within .asm file.
; The labels following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.

   __CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC
   __CONFIG    _CONFIG2, _WRT_OFF & _BOR21V



;***** VARIABLE DEFINITIONS
w_temp      EQU   0x7D      ; variable used for context saving
status_temp   EQU   0x7E      ; variable used for context saving
pclath_temp   EQU   0x7F      ; variable used for context saving
tmp equ 0x20
tm1 equ 0x21
tm2 equ 0x22
tm3 equ 0x23
time equ 0x24
keta equ 0x25
m0 equ b'11000000'
m1 equ b'11110011'
m2 equ b'10100100'
m3 equ b'10100001'
m4 equ b'10010011'
m5 equ b'10001001'
m6 equ b'10001000'
m7 equ b'11000011'
m8 equ b'10000000'
m9 equ b'10000001'

;**********************************************************************
   ORG     0x000             ; processor reset vector

   nop
     goto    main              ; go to beginning of program

main

; remaining code goes here
   bcf   STATUS,RP0      ;bank0
   bcf   STATUS,RP1

   clrf   INTCON

   bcf STATUS,RP1
   bsf   STATUS,RP0      ;bank1

   clrf   TRISA
   clrf   TRISB
   clrf TRISC
   clrf TRISD
   clrf TRISE

   bcf   STATUS,RP0      ;bank0

   clrf   PORTA
   clrf   PORTB
   clrf PORTC
   clrf PORTD
   clrf PORTE

   clrf tmp
   clrf keta

main_loop
   movlw d'99'
   movwf time

loop
   decfsz time,f
   goto timer
   goto errors

timer
   movlw d'40'
   movwf tm3

timer2
   movlw d'50'
   movwf tm2

timer1
   movlw d'150'
   movwf tm1

timer_main
   decfsz tm1,f
   goto syori
   decfsz tm2,f
   goto timer1
   decfsz tm3,f
   goto timer2
   goto loop

syori
   movfw time
   addwf PCL,f

   goto s00
   goto s01
   goto s02
   goto s03
   goto s04
   goto s05
   goto s06
   goto s07
   goto s08
   goto s09
   goto s10
   goto s11
   goto s12
   goto s13
   goto s14
   goto s15
   goto s16
   goto s17
   goto s18
   goto s19
   goto s20
   goto s21
   goto s22
   goto s23
   goto s24
   goto s25
   goto s26
   goto s27
   goto s28
   goto s29
   goto s30
   goto s31
   goto s32
   goto s33
   goto s34
   goto s35
   goto s36
   goto s37
   goto s38
   goto s39
   goto s40
   goto s41
   goto s42
   goto s43
   goto s44
   goto s45
   goto s46
   goto s47
   goto s48
   goto s49
   goto s50
   goto s51
   goto s52
   goto s53
   goto s54
   goto s55
   goto s56
   goto s57
   goto s58
   goto s59
   goto s60
   goto s61
   goto s62
   goto s63
   goto s64
   goto s65
   goto s66
   goto s67
   goto s68
   goto s69
   goto s70
   goto s71
   goto s72
   goto s73
   goto s74
   goto s75
   goto s76
   goto s77
   goto s78
   goto s79
   goto s80
   goto s81
   goto s82
   goto s83
   goto s84
   goto s85
   goto s86
   goto s87
   goto s88
   goto s89
   goto s90
   goto s91
   goto s92
   goto s93
   goto s94
   goto s95
   goto s96
   goto s97
   goto s98
   goto s99
   goto errors

s00
   btfss keta,0
   goto d0_1
   goto d0_10

s01
   btfss keta,0
   goto d1_1
   goto d0_10
s02
   btfss keta,0
   goto d2_1
   goto d0_10

s03
   btfss keta,0
   goto d3_1
   goto d0_10

s04
   btfss keta,0
   goto d4_1
   goto d0_10

s05
   btfss keta,0
   goto d5_1
   goto d0_10

s06
   btfss keta,0
   goto d6_1
   goto d0_10

s07
   btfss keta,0
   goto d7_1
   goto d0_10

s08
   btfss keta,0
   goto d8_1
   goto d0_10

s09
   btfss keta,0
   goto d9_1
   goto d0_10

s10
   btfss keta,0
   goto d0_1
   goto d1_10

s11
   btfss keta,0
   goto d1_1
   goto d1_10

s12
   btfss keta,0
   goto d2_1
   goto d1_10

s13
   btfss keta,0
   goto d3_1
   goto d1_10

s14
   btfss keta,0
   goto d4_1
   goto d1_10

s15
   btfss keta,0
   goto d5_1
   goto d1_10

s16
   btfss keta,0
   goto d6_1
   goto d1_10

s17
   btfss keta,0
   goto d7_1
   goto d1_10

s18
   btfss keta,0
   goto d8_1
   goto d1_10

s19
   btfss keta,0
   goto d9_1
   goto d1_10

s20
   btfss keta,0
   goto d0_1
   goto d2_10

s21
   btfss keta,0
   goto d1_1
   goto d2_10

s22
   btfss keta,0
   goto d2_1
   goto d2_10

s23
   btfss keta,0
   goto d3_1
   goto d2_10

s24
   btfss keta,0
   goto d4_1
   goto d2_10

s25
   btfss keta,0
   goto d5_1
   goto d2_10

s26
   btfss keta,0
   goto d6_1
   goto d2_10

s27
   btfss keta,0
   goto d7_1
   goto d2_10

s28
   btfss keta,0
   goto d8_1
   goto d2_10

s29
   btfss keta,0
   goto d9_1
   goto d2_10

s30
   btfss keta,0
   goto d0_1
   goto d3_10

s31
   btfss keta,0
   goto d1_1
   goto d3_10

s32
   btfss keta,0
   goto d2_1
   goto d3_10

s33
   btfss keta,0
   goto d3_1
   goto d3_10

s34
   btfss keta,0
   goto d4_1
   goto d3_10

s35
   btfss keta,0
   goto d5_1
   goto d3_10

s36
   btfss keta,0
   goto d6_1
   goto d3_10

s37
   btfss keta,0
   goto d7_1
   goto d3_10

s38
   btfss keta,0
   goto d8_1
   goto d3_10

s39
   btfss keta,0
   goto d9_1
   goto d3_10

s40
   btfss keta,0
   goto d0_1
   goto d4_10

s41
   btfss keta,0
   goto d1_1
   goto d4_10

s42
   btfss keta,0
   goto d2_1
   goto d4_10

s43
   btfss keta,0
   goto d3_1
   goto d4_10

s44
   btfss keta,0
   goto d4_1
   goto d4_10

s45
   btfss keta,0
   goto d5_1
   goto d4_10

s46
   btfss keta,0
   goto d6_1
   goto d4_10

s47
   btfss keta,0
   goto d7_1
   goto d4_10

s48
   btfss keta,0
   goto d8_1
   goto d4_10

s49
   btfss keta,0
   goto d9_1
   goto d4_10

s50
   btfss keta,0
   goto d0_1
   goto d5_10

s51
   btfss keta,0
   goto d1_1
   goto d5_10

s52
   btfss keta,0
   goto d2_1
   goto d5_10

s53
   btfss keta,0
   goto d3_1
   goto d5_10

s54
   btfss keta,0
   goto d4_1
   goto d5_10

s55
   btfss keta,0
   goto d5_1
   goto d5_10

s56
   btfss keta,0
   goto d6_1
   goto d5_10

s57
   btfss keta,0
   goto d7_1
   goto d5_10

s58
   btfss keta,0
   goto d8_1
   goto d5_10

s59
   btfss keta,0
   goto d9_1
   goto d5_10

s60
   btfss keta,0
   goto d0_1
   goto d6_10

s61
   btfss keta,0
   goto d1_1
   goto d6_10

s62
   btfss keta,0
   goto d2_1
   goto d6_10

s63
   btfss keta,0
   goto d3_1
   goto d6_10

s64
   btfss keta,0
   goto d4_1
   goto d6_10

s65
   btfss keta,0
   goto d5_1
   goto d6_10

s66
   btfss keta,0
   goto d6_1
   goto d6_10

s67
   btfss keta,0
   goto d7_1
   goto d6_10

s68
   btfss keta,0
   goto d8_1
   goto d6_10

s69
   btfss keta,0
   goto d9_1
   goto d6_10

s70
   btfss keta,0
   goto d0_1
   goto d7_10

s71
   btfss keta,0
   goto d1_1
   goto d7_10

s72
   btfss keta,0
   goto d2_1
   goto d7_10

s73
   btfss keta,0
   goto d3_1
   goto d7_10

s74
   btfss keta,0
   goto d4_1
   goto d7_10

s75
   btfss keta,0
   goto d5_1
   goto d7_10

s76
   btfss keta,0
   goto d6_1
   goto d7_10

s77
   btfss keta,0
   goto d7_1
   goto d7_10

s78
   btfss keta,0
   goto d8_1
   goto d7_10

s79
   btfss keta,0
   goto d9_1
   goto d7_10

s80
   btfss keta,0
   goto d0_1
   goto d8_10

s81
   btfss keta,0
   goto d1_1
   goto d8_10

s82
   btfss keta,0
   goto d2_1
   goto d8_10

s83
   btfss keta,0
   goto d3_1
   goto d8_10

s84
   btfss keta,0
   goto d4_1
   goto d8_10

s85
   btfss keta,0
   goto d5_1
   goto d8_10

s86
   btfss keta,0
   goto d6_1
   goto d8_10

s87
   btfss keta,0
   goto d7_1
   goto d8_10

s88
   btfss keta,0
   goto d8_1
   goto d8_10

s89
   btfss keta,0
   goto d9_1
   goto d8_10

s90
   btfss keta,0
   goto d0_1
   goto d9_10

s91
   btfss keta,0
   goto d1_1
   goto d9_10

s92
   btfss keta,0
   goto d2_1
   goto d9_10

s93
   btfss keta,0
   goto d3_1
   goto d9_10

s94
   btfss keta,0
   goto d4_1
   goto d9_10

s95
   btfss keta,0
   goto d5_1
   goto d9_10

s96
   btfss keta,0
   goto d6_1
   goto d9_10

s97
   btfss keta,0
   goto d7_1
   goto d9_10

s98
   btfss keta,0
   goto d8_1
   goto d9_10

s99
   btfss keta,0
   goto d9_1
   goto d9_10

d0_1
   bsf keta,0
   movlw m0
   bcf PORTD,1
   movwf PORTC
   bsf PORTD,0
   goto timer_main

d0_10
   bcf keta,0
   movlw m0
   bcf PORTD,0
   movwf PORTC
   bsf PORTD,1
   goto timer_main

d1_1
   bsf keta,0
   movlw m1
   bcf PORTD,1
   movwf PORTC
   bsf PORTD,0
   goto timer_main

d1_10
   bcf keta,0
   movlw m1
   bcf PORTD,0
   movwf PORTC
   bsf PORTD,1
   goto timer_main

d2_1
   bsf keta,0
   movlw m2
   bcf PORTD,1
   movwf PORTC
   bsf PORTD,0
   goto timer_main

d2_10
   bcf keta,0
   movlw m2
   bcf PORTD,0
   movwf PORTC
   bsf PORTD,1
   goto timer_main

d3_1
   bsf keta,0
   movlw m3
   bcf PORTD,1
   movwf PORTC
   bsf PORTD,0
   goto timer_main

d3_10
   bcf keta,0
   movlw m3
   bcf PORTD,0
   movwf PORTC
   bsf PORTD,1
   goto timer_main

d4_1
   bsf keta,0
   movlw m4
   bcf PORTD,1
   movwf PORTC
   bsf PORTD,0
   goto timer_main

d4_10
   bcf keta,0
   movlw m4
   bcf PORTD,0
   movwf PORTC
   bsf PORTD,1
   goto timer_main

d5_1
   bsf keta,0
   movlw m5
   bcf PORTD,1
   movwf PORTC
   bsf PORTD,0
   goto timer_main

d5_10
   bcf keta,0
   movlw m5
   bcf PORTD,0
   movwf PORTC
   bsf PORTD,1
   goto timer_main

d6_1
   bsf keta,0
   movlw m6
   bcf PORTD,1
   movwf PORTC
   bsf PORTD,0
   goto timer_main

d6_10
   bcf keta,0
   movlw m6
   bcf PORTD,0
   movwf PORTC
   bsf PORTD,1
   goto timer_main

d7_1
   bsf keta,0
   movlw m7
   bcf PORTD,1
   movwf PORTC
   bsf PORTD,0
   goto timer_main

d7_10
   bcf keta,0
   movlw m7
   bcf PORTD,0
   movwf PORTC
   bsf PORTD,1
   goto timer_main

d8_1
   bsf keta,0
   movlw m8
   bcf PORTD,1
   movwf PORTC
   bsf PORTD,0
   goto timer_main

d8_10
   bcf keta,0
   movlw m8
   bcf PORTD,0
   movwf PORTC
   bsf PORTD,1
   goto timer_main

d9_1
   bsf keta,0
   movlw m9
   bcf PORTD,1
   movwf PORTC
   bsf PORTD,0
   goto timer_main

d9_10
   bcf keta,0
   movlw m9
   bcf PORTD,0
   movwf PORTC
   bsf PORTD,1
   goto timer_main

errors
   bsf PORTD,0
   bsf PORTD,1
   bsf PORTD,2
   goto errors

   END