CT equ 0x22 CT2 equ 0x23 CT_DELAYNMS equ 0x24 movlw D'20' movwf CT loop: movlw D'25' movwf CT2 loop1s: movlw B'00100001' ; movwf PORTC ; 点灯 movfw CT call delaynms ; CT×1[ms]待ち movlw B'00100000' ; movwf PORTC ; 消灯 movfw CT sublw D'20' call delaynms ; (20−CT)×1[ms]待ち decfsz CT2,f ; 20×25=0.5[s]を数える goto loop1s decfsz CT,f ; デューティ比を変える goto loop movlw D'20' ; 0なら20に戻す movwf CT goto loop delaynms: movwf CT_DELAYNMS movf CT_DELAYNMS,f btfsc STATUS,Z ; 0なら、すぐに戻る return delaynmsl1: call delay1ms ; 1[ms] decfsz CT_DELAYNMS,f goto delaynmsl1 return リスト4-12 Copyright 2005 Noriaki Mitsunaga