|
И все таки она вертится!!!
ПОЛНЫЙ УРА!!!!
Наконец-таки разгребся со своими насущными делами, сел дома за дело.... часа полтора развлечений и - ВАУЛЯ! пультик фунциклирует!!! Дальность в квартире получилось 5,5 метров (рулеткой мерял  )
Кому интересно вот код прошивки:
#include "msp430x11x1.h"
F33kHz DEFINE 18
;-----------------------------------------------------------------------
ORG 0F000h ;
RESET mov.w #300h,SP ; Initialize 'x1121 stackpointer
CALL #SETUP
CALL #ZQ_ON
;-- Приветствие
mov.w #01,R8 ; Пауза
CALL #N_DELAY ; 0.1 секунда
bis.b #002h,&P2OUT ; led=1
mov.w #01,R8 ; Пауза
CALL #N_DELAY ; 0.1 секунда
bic.b #002h,&P2OUT ; led=1
mov.w #01,R8 ; Пауза
CALL #N_DELAY ; 0.1
bis.b #002h,&P2OUT ; led=1
mov.w #01,R8 ; Пауза
CALL #N_DELAY ; 1 секунда
bic.b #002h,&P2OUT ; led=0
;-
mainloop bis.b #004h,&P1OUT ; comm2=1
mov.b &P1IN,R14 ; Считаваем состояние клавиатуры
and.b #003h,R14 ;
cmp #0001h,R14 ; Нажата клавиша "TV"?
jnz s1 ; Нет
CALL #SHOT ; Да - Команда "СПУСК"
jmp s2 ; На выход
s1: cmp #0002h,R14 ; Нажата клавиша "MUTE"?
jnz mainloop ; Нет
CALL #SHOT2SEC ; Да - Команда "СПУСК через 2 сек"
s2: mov.b &P1IN,R14 ; Считаваем состояние клавиатуры
and.b #003h,R14
cmp #0000h,R14 ; Ожидаем отпускания кнопки
jnz s2
mov.w #01,R8 ; Пауза
CALL #N_DELAY ; 1 секунда
jmp mainloop ; выходим
;-----------------------------------------------------------------------
; Спуск
;-----------------------------------------------------------------------
SHOT: bis.b #002h,&P2OUT ; led=1
;---------------- Посылка 480 мкс
mov.w #16,R12
m1: bis.b #001h,&P2OUT ; ir_led=1
mov.w #F33kHz,R13
zd1: dec.w R13 ; Decrement R13
jnz zd1 ; Delay over?
bic.b #001h,&P2OUT ; ir_led=0
mov.w #F33kHz,R13
zd2: dec.w R13 ; Decrement R13
jnz zd2 ; Delay over?
dec.w R12 ; Decrement R13
jnz m1
;--------------- Пауза 7324 мкс
m2: mov.w #02670h,R13
zd3: dec.w R13 ; Decrement R13
jnz zd3
;---------------- Посылка 480 мкс
mov.w #16,R12
m3: bis.b #001h,&P2OUT ; ir_led=1
mov.w #F33kHz,R13
zd4: dec.w R13 ; Decrement R13
jnz zd4 ; Delay over?
bic.b #001h,&P2OUT ; ir_led=0
mov.w #F33kHz,R13
zd5: dec.w R13 ; Decrement R13
jnz zd5 ; Delay over?
dec.w R12 ; Decrement R13
jnz m3
;------------------
bic.b #002h,&P2OUT ; led=0
ret
;-----------------------------------------------------------------------
; Спуск с 2 сек. задержкой
;-----------------------------------------------------------------------
SHOT2SEC: bis.b #002h,&P2OUT ; led=1
;---------------- Посылка 480 мкс
mov.w #16,R12
m4: bis.b #001h,&P2OUT ; ir_led=1
mov.w #F33kHz,R13
zd6: dec.w R13 ; Decrement R13
jnz zd6 ; Delay over?
bic.b #001h,&P2OUT ; ir_led=0
mov.w #F33kHz,R13
zd7: dec.w R13 ; Decrement R13
jnz zd7 ; Delay over?
dec.w R12 ; Decrement R13
jnz m4
;--------------- Пауза 5371 мкс
m5: mov.w #01C30h,R13
zd8: dec.w R13 ; Decrement R13
jnz zd8
;---------------- Посылка 480 мкс
mov.w #16,R12
m6: bis.b #001h,&P2OUT ; ir_led=1
mov.w #F33kHz,R13
zd9: dec.w R13 ; Decrement R13
jnz zd9 ; Delay over?
bic.b #001h,&P2OUT ; ir_led=0
mov.w #F33kHz,R13
zd10: dec.w R13 ; Decrement R13
jnz zd10 ; Delay over?
dec.w R12 ; Decrement R13
jnz m6
;------------------
bic.b #002h,&P2OUT ; led=0
ret
;-----------------------------------------------------------------------
; Пауза на R8 х 0.1 сек
;-----------------------------------------------------------------------
N_DELAY: PUSH R10
PUSH R13
PUSH R12
mov.w R8,R10
zddd:
;--------------------------------------------
mov.w #00004,R12
zdd2: mov.w #0FFFFh,R13
zdd1: dec.w R13 ; Decrement R13
jnz zdd1 ; Delay over?
dec.w R12 ; Decrement R12
jnz zdd2 ; Delay over?
;--------------------------------------------
dec.w R10
jnz zddd
POP R12
POP R13
POP R10
ret
;-----------------------------------------------------------------------
; Включение и переход на кварцевый генератор
;-----------------------------------------------------------------------
; Выбор LFXT1 (в режиме HF) для MCLK
ZQ_ON: BIC #OSCOFF,SR ;включение осциллятора
BIS.B #XTS,BCSCTL1 ;установка режима HF
L1: BIC.B #OFIFG,&IFG1 ;очистка OFIFG
MOV #0FFh,R15 ;задержка
L2: DEC R15 ;
JNZ L2 ;
BIT.B #OFIFG,&IFG1 ;повторная проверка OFIFG
JNZ L1 ;повторение проверки, если необходимо
BIS.B #SELM1+SELM0,&BCSCTL2 ;выбор LFXT1CLK
mov.w #21,R8 ; Пауза
CALL #N_DELAY ; 1 секунда
ret
;-----------------------------------------------------------------------
; SETUP
;-----------------------------------------------------------------------
SETUP: mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop WDT
mov.b #000h,&P1OUT
mov.b #000h,&P2OUT
; Направление портов
bic.b #001h,&P1DIR ; P1.0 на ввод (VOL- / MUTE)
bic.b #002h,&P1DIR ; P1.1 на ввод (MUTE)
bis.b #004h,&P1DIR ; P1.2 на вывод (COMM 2)
bis.b #008h,&P1DIR ; P1.3 на вывод (N.C.)
bis.b #010h,&P1DIR ; P1.4 на вывод (TCK)
bis.b #020h,&P1DIR ; P1.5 на вывод (TMS)
bis.b #040h,&P1DIR ; P1.6 на вывод (TDI)
bis.b #080h,&P1DIR ; P1.7 на вывод (TDO)
bis.b #001h,&P2DIR ; P2.0 на вывод (IR LED)
bis.b #002h,&P2DIR ; P2.1 на вывод (LED)
bic.b #004h,&P2DIR ; P2.2 на ввод (VOL +)
bic.b #008h,&P2DIR ; P2.3 на ввод (CH +)
bic.b #010h,&P2DIR ; P2.4 на ввод (CH -)
bis.b #020h,&P2DIR ; P2.5 на вывод (COMM 1)
bic.b #013h,&P2OUT ; comm1=0, led=0, ir_led=0
bic.b #004h,&P1OUT ; comm2=0
ret
;-----------------------------------------------------------------------
; Interrupt Vectors Used MSP430x11x1
;-----------------------------------------------------------------------
ORG 0FFFEh ; MSP430 RESET Vector
DW RESET ;
END
Кстати, а кварц там стоял, согласно показанию частотомера, 4.00496 МГц
Потребляемый ток получился 1 мА. Батарейка CR3032 имеет емкость 210 мА/час, следовательно ее хватит на 210 часов, или 8.75 дней, т.е. неделю, Надо будет соптимизировать ток потребления путем отключения кварцевого генератора и перевода процессора в спящий режим, тогда ее на несколько лет хватит...., Но это уже другая история, страна
Подведем итоги:
- Пультик = 5000 BYB
- процессор MSP430F1121A = 3000 BYB
- Знания и умения = бесценно
Последний раз редактировалось Bocman, 11.11.2006 в 03:26.
|