;****************************************************************************************** ; dsPIC33FJ256GP506 Sample Program ; Project : ; Program Name : ; Programer : ; Create date : Version 1.0 H21.04.05 ; History : ; Laungage : MPLAB ASM30 ;****************************************************************************************** ; (1)Description ; ;****************************************************************************************** .include "p33FJ256GP506.inc" config __FOSCSEL , FNOSC_FRCPLL & IESO_OFF config __FOSC , FCKSM_CSECMD & OSCIOFNC_ON & POSCMD_NONE config __FWDT , FWDTEN_OFF .bss .global __reset .section data_area LED_lst: .space 2 ;****************************************************************************************** ; Function Name : main ; Title : ; Input : ; Output : ;****************************************************************************************** .text __reset: ;******************* ; 1.Initialize Segument ;******************* ; (0)Initialize Stack Pointer MOV #__SP_init, W15 ;Initalize the Stack Pointer MOV #__SPLIM_init, W0 ;Initialize the Stack Pointer Limit Register MOV W0, SPLIM NOP ;Add NOP to follow SPLIM initialization ; (1)Set All Digital Port MOV.W #0xFFFF,W0 MOV.W W0,AD1PCFGL ; (2)Define PortB MOV.W #0xFF00,W0 MOV.W W0,TRISB ; (3)Set Initial Value LEDlst MOV.W #0x0001,W0 MOV.W W0,LED_lst ; MOV.W LED_lst,W0 MOV.W W0,PORTB ;******************* ; 2.Program main ;******************* main_p: CALL mvLED MOV.W LED_lst,W0 MOV.W W0,PORTB CALL wat BRA main_p ;****************************************************************************************** ; Function Name : mvLED ; Title : Move LED function ; Input : ; Output : ;****************************************************************************************** mvLED: ; ****************** ; 1.Initialize ; ****************** PUSH.W W0 PUSH.W W1 PUSH.W W2 PUSH.W W3 PUSH.W W4 ; ; ****************** ; 2.Program main ; ****************** ; (1)Case LED_lst = 1 MOV.W LED_lst,W1 SUB.W W1,#1,W3 BRA NZ,mvLED_2 MOV.W #2,W2 MOV.W W2,LED_lst BRA mvLED_end ; (2)Case LED_lst <= 127 mvLED_2: MOV.W LED_lst,W1 MOV.W #127,W2 SUB.W W1,W2,W3 BRA LEU,mvLED_3 MOV.W #1,W2 MOV.W W2,LED_lst BRA mvLED_end ; (3)Case 1< LED_lst < 127 mvLED_3: MOV.W #1,W2 SL.W W1,W2,W1 MOV.W W1,LED_lst BRA mvLED_end ; ****************** ; 3.End ; ****************** mvLED_end: POP.W W4 POP.W W3 POP.W W2 POP.W W1 POP.W W0 RETURN ;****************************************************************************************** ; Function Name : wat ; Title : wait function ; Input : ; Output : ; Description : ; W1:Timer_1,W2:Timer_2 ;****************************************************************************************** wat: ; ****************** ; 1.Initialize ; ****************** PUSH.W W0 PUSH.W W1 PUSH.W W2 PUSH.W W3 PUSH.W W4 ; ****************** ; 2.Program main ; ****************** ; *********************************************** ; (1)Define T2CON Register ; T2CON(15) TON: Timerx On bit ; 1 = Starts / 0 = Stop ; T2CON(14) Unimplemented: Read as e0f ; T2CON(13) TSIDL: Stop in Idle Mode bit ; 1 = Discontinue module operation when device enters Idle mode ; 0 = Continue module operation in Idle mode ; T2CON(12-7) Unimplemented: Read as e0f ; T2CON(6) TGATE: Timerx Gated Time Accumulation Enable bit ; When TCS = 1: ; This bit is ignored. ; When TCS = 0: ; 1 = Gated time accumulation enabled ; 0 = Gated time accumulation disabled ; T2CON(5-4) TCKPS1:TCKPS0: Timerx Input Clock Prescale Select bits ; 11 = 1:256 ; 10 = 1:64 ; 01 = 1:8 ; 00 = 1:1 ; T2CON(3) T32: 32-Bit Timer Mode Select bit(1) ; 1 = Timerx and Timery form a single 32-bit timer ; 0 = Timerx and Timery act as two 16-bit timers ; In 32-bit mode, T3CON control bits do not affect 32-bit timer operation. ; T2CON(2) Unimplemented: Read as e0f ; T2CON(1) TCS: Timerx Clock Source Select bit(2) ; 1 = External clock from pin, TxCK (on the rising edge) ; 0 = Internal clock (FOSC/2) ; T2CON(0) Unimplemented: Read as e0f ; *********************************************** ; MOV.W #0b1000000000100000,W0 ;1/64,16Bit MOV.W #0b1000000000110000,W0 ;1/256,16Bit MOV.W W0,T2CON ; (2)Set PR2-Register ; MOV.W #0x30D4,W0 ; 5Hz (0x30D4;0d12500) FRC 8MHz 8MHz/2/64/5 ; MOV.W #0x2CFC,W0 ; 5Hz (0x2CFB;0d11516) FRC 7.37MHz 7.37MHz/2/64/5 MOV.W #0x59F7,W0 ; 5Hz (0x59F7;0d23031) FRCPLL 7.37MHz*4(PLL) 7.37*8MHz/2/256/5 MOV.W W0,PR2 CLR.W TMR2 ; (3)Timer BCLR.W IFS0,#(T2IF) CLR.W W0 BSET.W W0,#(T2IF) wat_2: MOV.W IFS0,W1 AND.W W0,W1,W2 BRA Z,wat_2 ; ****************** ; 3.End ; ****************** wat_e: POP.W W4 POP.W W3 POP.W W2 POP.W W1 POP.W W0 RETURN