
Шустрый

Профиль
Группа: Участник
Сообщений: 83
Регистрация: 15.8.2009
Где: Gomel
Репутация: нет Всего: -2
|
Нужны советы с кодом и по усовершенствованию схемы.  Код | _CPU_ .set 5 ; ID11X .copy ”STD_DEF.ASM” ; стандартная библиотека ; MSP430F169 - Digital TAS3001 Stack .EQU 00210h I_vectors .EQU 0FFFFh ;вектор прерывания Main .EQU 0F000h SCL .EQU 010h SDA .EQU 020h SCLIN .EQU 020h SDAIN .EQU 020h SCLDAT .EQU 021h SDADAT .EQU 021h SCLEN .EQU 022h SDAEN .EQU 022h SCLFUNC .EQU 026h SDAFUNC .EQU 026h Tbl_Pntr .EQU R4 Strng_Pntr .EQU R5 Mask .EQU R6 Count1 .set R7 Count2 .set R8 Delta .set 150 ;SMCLK = 1,228,800 Hz OSC_OE .set 080h RST .set 001h ;использование ”RESET” EXP .set 008h SW1 .equ 08h SW2 .equ 04h SW3 .equ 02h SW4 .equ 01h SW5 .equ 02h SW6 .equ 04h SW1_3IF .equ 023h SW4_6IF .equ 02Bh SW1_3IE .equ 025h SW4_6IE .equ 02Dh SW1_3IN .equ 020h SW4_6IN .equ 028h LED .equ 020h LED_OUT .equ 029h ; P2OUT Vol_Pntr .equ R9 ;указатель «громкости» Bass_Pntr .equ R10 ;указатель «бассов» Trbl_Pntr .equ R11 MUTE .equ R12 Trbl_Setpnt .equ R13 Bass_Setpnt .equ R14 .sect ”MAIN”,Main RESET MOV #Stack,SP CALL #Setup ;вызов устройства CALL #Set_DCO Begin MOV #1669,Tbl_Pntr CALL #Loop ;вызов отправки I2C Finish BIC.b #EXP,&P2OUT EINT LPM BIS #LPM3,SR JMP LPM Setup MOV #WDTPW+WDTHOLD,&WDTCTL MOV #TASSEL1+CLR,&TACTL ;счетчик 16-bit MOV.b #XTOFF+DIVA1+RSEL2+RSEL0,&BCSCTL1 BIC.b #0FFh,&P1SEL BIC.b #0FFh,&P2SEL BIC.b #0FEh,&P1OUT BIS.b #0C1h,&P1DIR BIS.b #RST,&P1OUT BIS.b #OSC_OE,&P1OUT BIC.b #0FFh,&P2OUT CALL #DELAY2 BIC.b #RST,&P1OUT CALL #NOP9 BIS.b #RST,&P1OUT BIC.b #SW1+SW2+SW3,&P1DIR BIC.b #SW4+SW5+SW6,&P2DIR BIS.b #SW1+SW2+SW3,&P1IES BIS.b #SW4+SW5+SW6,&P2IES BIS.b #SW1+SW2+SW3,&SW1_3IE BIS.b #SW4+SW5+SW6,&SW4_6IE BIS.b #EXP+LED,&P2DIR BIS.b #LED,&LED_OUT MOV #180,Vol_Pntr MOV #415,Bass_Pntr MOV #415,Bass_Setpnt MOV #510,Trbl_Pntr MOV #510,Trbl_Setpnt CLR MUTE ;set mute = 0 = initial state of mute = off BIC.b #SW1+SW2+SW3,&SW1_3IF BIC.b #SW4+SW5+SW6,&SW4_6IF RET DELAY0 push #03000h JMP DELAY3 DELAY push #06000h JMP DELAY3 DELAY2 push #09000h DELAY3 dec 0(SP) jnz DELAY3 incd SP RET Set_DCO BIS #MC1,&TACTL ;старт timer CLR Count1 ;clear counter MOV #CCIS0+CM0+CAP,&CCTL2 Test_DCO BIT #CCIFG,&CCTL2 JZ Test_DCO ;флаг не установлен BIC #CCIFG,&CCTL2 ;очистка флага прерываний AdjDCO MOV &CCR2,Count2 SUB Count1,Count2 MOV &CCR2,Count1 CMP #Delta,Count2 JL IncDCO JEQ DoneDCO DecDCO DEC.b &DCOCTL JMP Test_DCO ;переход к DCO IncDCO INC.b &DCOCTL ;увеличение DCO частоты JMP Test_DCO DoneDCO CLR &CCTL2 RET Loop XOR.b #LED,&LED_OUT Loop2 CMP.b #0,Data(Tbl_Pntr) JZ LP_END MOV.b Data(Tbl_Pntr),Strng_Pntr CALL #I2C ;вызов I2C JMP Loop2 LP_END CALL #DELAY XOR.b #LED,&LED_OUT RET ;выход I2C BIS.B #SDA,&SDAEN INC Tbl_Pntr CALL #NOP9 I2C_Send MOV.b #80h,Mask I2C_Send1 BIT.B Mask,Data(Tbl_Pntr) ;если bit = 1 JC I2C_Send2 BIS.B #SCL,&SCLEN CALL #NOP9 BIS.B #SDA,&SDAEN BIC.B #SCL,&SCLEN DS_busy BIT.b #SCL,&SCLIN JNC DS_busy JMP I2C_Send3 I2C_Send2 BIS.B #SCL,&SCLEN CALL #NOP9 BIC.B #SDA,&SDAEN CALL #NOP9 ;задержка BIC.B #SCL,&SCLEN DS_busy2 BIT.b #SCL,&SCLIN JNC DS_busy2 I2C_Send3 CLRC ;очистка бита переноса RRC.B Mask JNCI2C_Send1 CALL #NOP9 I2C_Ackn BIS.B #SCL,&SCLEN BIC.B #SDA,&SDAEN CALL #NOP8 BIC.B #SCL,&SCLEN Ackn_Test BIT.B #SDA,&SDAIN JC Ackn_Test BIS.b #SDA,&SDAEN
|
|