#**************************************************************************************** # PIC32MX120F032B Sample Program # Project : # Program Name : # Programer : # Create date : Version 1.0 H24.06.14 # History : # Laungage : Gcc (MPLAB C32) Asm #***************************************************************************************** # Description # (1)Memory load map # Config words : Physical(0x1FC00BF0-0x1FC00BFF)/Virtual(0xBFC00BF0-0xBFC00BFF) # RAM : Physical(0x00000000-0x00001FFF)/Virtual(0x80000000-0x80001FFF) # Program memory:Physical(0x1D000000-0x1D007FFF)/Virtual(0x9D000000-0x9D007FFF) # SFRs : Physical(0x1F800000-0x1F8FFFFF)/Virtual(0xBF800000-0xBF8FFFFF) # (2)Assembler File extension # ****.S (S:Preprocessed Source file / s:Source file) # (3)Compile Gcc(C32) # (4)general purpose register ( 32bit * 32 ) Śmemo # $0(Fixed 0), $1(not use), $2-$3(v0-v1:return-value register), $4-$7(a0-a3:argument register) # $8-$15,$24-$25(t0-t9:free), $16-$23,$30(s0-s8:free), $26-$27(k0-k1:OS/not use), $28(gp:groval pointer) # $29(sp:stack pointer), $31(ra:return adress) # $f0, $12/13,$14/15(float type pare) #***************************************************************************************** #include # # Define config words # .section .config_1FC00BF0,code // USERID,PMDL1WAY,IOL1WAY,FUSBIDIO,FVBUSONIO .word 0x3FFFFFFF .section .config_1FC00BF4,code // FPLLIDIV,FPLLMUL .word 0xFFF8FF88 // Internal OSC 8MHz .section .config_1FC00BF8,code // FNOSC,FSOSCEN,IESO,POSCMOD,OSCIOFNC,FPBDIV,FCKSM,WDTPS,FWDTEN,FWDTWINSZ .word 0xFD60CF58 // Internal OSC 8MHz .section .config_1FC00BFC,code // JTAGEN,ICESEL,PWP,BWP,CP .word 0x7FFFFFE3 # # Program main # .global main .global wat .text // Start text area .set noreorder // Don't optimize the order of the instructions as well as don't insert 'nop' instructions after jumps and branches. .ent main main: # ******************* # 1.Initialize # ******************* # (1)Define PortB li t0, 0x0000FF00 // 0x0000FF00 => t0-Register sw t0, TRISB($0) // t0-Register => TRISB+0 li t0, 0x00000001 // 0x00000001 => t0-Register sw t0, 0x80000000($0) // t0-Register => Ram 0x80000000 sw t0, PORTB($0) // t0-Register => PORTB+0 # ******************* # 2.Program main # ******************* main1: jal mvLED // CALL mvLED nop jal wat // wait nop j main1 nop .end main #****************************************************************************************** # Function Name : mvLED # Title : Move LED function # Input : # Output : #****************************************************************************************** .ent mvLED mvLED: # ******************* # 1.Initialize # ******************* addiu sp, sp, -4 sw t0, 0(sp) addiu sp, sp, -4 sw t1, 0(sp) addiu sp, sp, -4 sw t2, 0(sp) addiu sp, sp, -4 sw t3, 0(sp) addiu sp, sp, -4 sw t4, 0(sp) addiu sp, sp, -4 sw t5, 0(sp) addiu sp, sp, -4 sw t6, 0(sp) li t4, 0x00000100 /* 0x000FFFFF => t2-Register */ li t1, 0x00000002 /* 0x00000001 => t1-Register */ li t0, 0x00000001 /* 0x00000000 => t0-Register */ lw t6, 0x80000000($0) /* Ram 0x80000000 => t6-Register */ # ******************* # 2.Function main # ******************* move t2, t6 /* t2 <= s0 */ mult t2, t1 /* t2 * t1 */ nop nop mflo t3 /* t3 <= LO */ slt t5, t3, t4 /* t3 ƒ t4 => t5 */ bne t5, $0 , mvLED1 /* t5 != 0 */ nop sw t0, 0x80000000($0) /* t0-Register => Ram 0x80000000 */ sw t0, PORTB($0) /* t0-Register => PORTB+0 */ j mvLEDE /* GOTO mvLEDE */ nop mvLED1: sw t3, 0x80000000($0) /* t3-Register => Ram 0x80000000 */ sw t3, PORTB($0) /* t3-Register => PORTB+0 */ # ******************* # 3.Function end # ******************* mvLEDE: lw t6, 0(sp) addiu sp, sp, 4 lw t5, 0(sp) addiu sp, sp, 4 lw t4, 0(sp) addiu sp, sp, 4 lw t3, 0(sp) addiu sp, sp, 4 lw t2, 0(sp) addiu sp, sp, 4 lw t1, 0(sp) addiu sp, sp, 4 lw t0, 0(sp) addiu sp, sp, 4 jr ra /* Return */ nop .end mvLED #****************************************************************************************** # Function Name : wat # Title : wait loop # Input : # Output : #****************************************************************************************** .ent wat wat: # ******************* # 1.Initialize # ******************* addiu sp, sp, -4 sw t0, 0(sp) addiu sp, sp, -4 sw t1, 0(sp) addiu sp, sp, -4 sw t2, 0(sp) # ******************* # 2.Function main # ******************* li t2, 0x000FFFFF /* 0x000FFFFF => t2-Register */ li t1, 0x00000001 /* 0x00000001 => t1-Register */ li t0, 0x00000000 /* 0x00000000 => t0-Register */ wat1: sub t3, t2, t1 /* t3 <= t2 - t1 */ move t2, t3 /* t2 <= t3 */ bne t2, t0 , wat1 /* t2 != t0 */ nop wat2: # ******************* # 3.Function end # ******************* lw t2, 0(sp) addiu sp, sp, 4 lw t1, 0(sp) addiu sp, sp, 4 lw t0, 0(sp) addiu sp, sp, 4 jr ra /* Return */ nop .end wat