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