H
huunho
Guest
Các bạn thân mến!
Code asm viết đơn giản dễ hiểu,không phải khai báo phiền hà, chiếm ít rom,ram, dễ debug, dễ tìm lỗi nhưng tìm hiểu các thanh ghi và cấu trúc phần cứng hơi lầu, để tạo thành sản phẩm thực tê thì nên dùng asm, còn để viết chương trình đối phó với thày cô giáo thì dùng c.
sau đây là chương trình giải mã remote tivi samsung 21 inch phẳng: chip g2131 được kết nối với ic nhận quang 3 chân, chân data của ic nhận quang nối trực tiếp với chân p1.5, ic nhận quang được cấp nguồn 3,3v hay 5v thì 2131 vẫn làm việc tốt. mình đã làm mạch thực tế để điều khiển bật tắt 2 đèn rồi, chạy ngon.
chân ra của 2131 mắc nối tiếp với điên trở 10k dẫn vào chân b của C945 để đóng mở 2 rơle 5V.
các bạn có thể dùng nguồn là sạc điện thoại cho rẻ. có 2 vấn đề đặc biệt quan trọng: phải mắc 2131 với song song với 1 tụ điện khoảng 10uf để lọc nguồn, mắc 1 tụ 1000p (102) vào điện ac220v và thứ cấp của biến áp xung để chống nhiễu cho 2131( nếu không có tụ này thì 2131 làm viec
kém nhậy hoặc không làm việc được)
Code asm viết đơn giản dễ hiểu,không phải khai báo phiền hà, chiếm ít rom,ram, dễ debug, dễ tìm lỗi nhưng tìm hiểu các thanh ghi và cấu trúc phần cứng hơi lầu, để tạo thành sản phẩm thực tê thì nên dùng asm, còn để viết chương trình đối phó với thày cô giáo thì dùng c.
sau đây là chương trình giải mã remote tivi samsung 21 inch phẳng: chip g2131 được kết nối với ic nhận quang 3 chân, chân data của ic nhận quang nối trực tiếp với chân p1.5, ic nhận quang được cấp nguồn 3,3v hay 5v thì 2131 vẫn làm việc tốt. mình đã làm mạch thực tế để điều khiển bật tắt 2 đèn rồi, chạy ngon.
chân ra của 2131 mắc nối tiếp với điên trở 10k dẫn vào chân b của C945 để đóng mở 2 rơle 5V.
các bạn có thể dùng nguồn là sạc điện thoại cho rẻ. có 2 vấn đề đặc biệt quan trọng: phải mắc 2131 với song song với 1 tụ điện khoảng 10uf để lọc nguồn, mắc 1 tụ 1000p (102) vào điện ac220v và thứ cấp của biến áp xung để chống nhiễu cho 2131( nếu không có tụ này thì 2131 làm viec
kém nhậy hoặc không làm việc được)
Code:
CODE]
in EQU 020h ; input on P1.5
nut1 EQU 010h ; nut 1 p1.4
nut2 EQU 080h ; nut 2 p1.7
role1 EQU 040h ; role 1 p1.6
role2 EQU 040h ; role 2 p2.6
LED_ EQU 001h ; led p1.0
#include <msp430g2131.h>
; Giai ma tin hieu remote tivi samsung bn59-00891a 21inch CRT phang
; chip msp430g2131 tan so 1Mhz
;-------------------------------------------------------------------------------
ORG 0FC00h ; Program Reset
;-------------------------------------------------------------------------------
main:
RESET mov.w #027Eh,SP ; Initialize stackpointer
mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop WDT
MOV.B &CALBC1_1MHZ,&BCSCTL1 ; Set RSELx --BCSCTL1 = 86h
MOV.B &CALDCO_1MHZ,&DCOCTL ; Set DCOx and MODx --DCOCTL = C9h
bis.b #role1,&P1DIR ; role1 output
bic.b #role1,&P1OUT ; role1 = 0
clr.b &P2SEL
bis.b #role2,&P2DIR ; role2 output
bic.b #role2,&P2OUT ; role2 = 0
bis.b #LED_,&P1DIR ; led output
bic.b #LED_,&P1OUT ; led = 0
bic.b #nut1+nut2+in,&P1DIR ; nut1+nut2+in input
bis.b #nut1+nut2+in,&P1REN ; nut1+nut2+in enable pull up
bis.b #nut1+nut2+in,&P1OUT ; nut1+nut2+in = 1
bis.b #nut1+nut2+in,&P1IE ; nut1+nut2+in Interrupt enabled
bis.b #nut1+nut2+in,&P1IES ; nut1+nut2+in set with a high-to-low transition
bic.b #nut1+nut2+in,&P1IFG ; nut1+nut2+in IFG Cleared
Step1: ; thiet lap gia tri ban dau cho 2 bien
mov.w #1,R4; bien luu thong tin giai ma 1
clr.w R5; bien luu thong tin giai ma 2
Step2: ; neu in = 0 thi nhay den step3
bis.w #LPM4+GIE,SR ; enter LPM4, enable interrupts
bit.b #in,P1IN;
jc next21;
jmp Step3;
next21:
bit.b #nut1,P1IN;
jc next2;
call #Key_1
jmp Step2;
next2:
bit.b #nut2,P1IN;
jc Step2;
call #Key_2
jmp Step2;
Step3: ;kiem tra xung khoi dong thap co bang 4604 us khong ?
mov.w #470,R6; r6 = 470
back3:
bit.b #in,P1IN; (mat 5 us)
jc next3; neu in = 1 thi nhay den next3 (mat 2 us)
dec.w R6; tru r5 di 1 (mat 1 us)
jnz back3; neu z = 0(R5 = 1) thi nhay den back3 (mat 2 us)
jmp Step1; qua thoi gian cho thi quay ve step1
next3:
cmp.b #030,R6; so sanh r6 voi 15
jn Step4; nhay den step4 neu r6 < 15
jmp Step1;
Step4: ;kiem tra xung cao co bang 4431 us khong?
mov.w #461,R6; r6 = 470
back4:
bit.b #in,P1IN; (mat 5 us)
jnc next4; neu in = 0 thi nhay den next4 (mat 2 us)
dec.w R6; tru r5 di 1 (mat 1 us)
jnz back4; neu z = 0(R5 = 1) thi nhay den back3 (mat 2 us)
jmp Step1; qua thoi gian cho thi quay ve step1
next4:
jmp Step5
cmp.b #020,R6; so sanh r6 voi 15
jn Step5; nhay den step5 neu r6 < 15
jmp Step1;
Step4a: ; Kiem tra xung cao 930 us
mov.w #95,R6; R6 = 84
back4a:
bit.b #in,P1IN; (mat 5 us)
jnc next4a; neu in = 0 thi nhay den step5 (mat 2 us)
dec.w R6; tru R6 di 1 (mat 1 us)
jnz back4a; neu r6 <> 0 thi quay lai (mat 2 us)
jmp Step1; neu qua thoi gian thi nhay ve step1
next4a:
Step5: ;kiem tra xung thap co bang 618 us khong?
mov.w #75,R6; r6 = 68
back5:
bit.b #in,P1IN; (mat 5 us)
jc Step6; neu in = 1 thi nhay den next5 (mat 2 us)
dec.w R6; tru r5 di 1 (mat 1 us)
jnz back5; neu z = 0(R5 = 1) thi nhay den back5 (mat 2 us)
jmp Step1; qua thoi gian cho phep thi quay ve step1
Step6: ;tao tre 780 us
mov.w #0260,R6;
back6:
dec.w R6; (mat 1 us)
jnz back6; (mat 2 us)
Step7: ;neu in = 1 thi gan C = 0, day la bit 0
;neu in = 0 thi nhay den Step8
bit.b #in,P1IN; kiem tra in
jnc Step8; neu in = 0 thi nhay den Step8
clrc ; xoa co C
rlc.w R4; quay trai co nho r4
rlc.w R5; quay trai co nho r5
jc Step9; neu C = 1 thi nhay den Step9, ket thuc giai ma
jnc Step4a ; neu C = 0 nhay den step4a, tiep tuc giai ma
Step8: ;neu in = 0 thi gan C =1, day la bit 1
setc ; set co C
rlc.w R4; quay trai co nho r4
rlc.w R5; quay trai co nho r5
jc Step9; neu C = 1 thi nhay den Step9, ket thuc giai ma
jnc Step5 ; neu C = 0 nhay den step4, tiep tuc giai ma
Step9: ;ket thuc giai ma ta co 32 bit ket qua
cmp.w #01F1Fh,R5; so sanh r5 voi 1f1f
jnz Step1; neu r5 khac 1F1F thi nhay den step1
cmp.w #2DD2h,R4; Tool
jnz next91; neu r5 khac 1F1F thi nhay den step91
xor.b #001h,&P1OUT ; P1.0 = toggle
jmp Step10;
next91:
cmp.w #0DF20h,R4; Kenh 1
jnz next92; neu r5 khac 1F1F thi nhay den step91
xor.b #role1,&P1OUT ; P1.0 = toggle
jmp Step10;
next92:
cmp.w #5FA0h,R4; Kenh 2
jnz next93; neu r5 khac 1F1F thi nhay den step91
xor.b #role2,&P2OUT ; P1.0 = toggle
jmp Step10;
next93: /*
cmp.w #9F60h,R4; Kenh 3
jnz next94; neu r5 khac 1F1F thi nhay den step91
xor.b #001h,&P1OUT ; P1.0 = toggle
jmp Step10;
next94:
cmp.w #0EF10h,R4; Kenh 4
jnz next95; neu r5 khac 1F1F thi nhay den step91
xor.b #001h,&P1OUT ; P1.0 = toggle
jmp Step10;
next95:
cmp.w #06F90h,R4; Kenh 5
jnz next96; neu r5 khac 1F1F thi nhay den step91
xor.b #001h,&P1OUT ; P1.0 = toggle
jmp Step10;
next96:
cmp.w #0AF50h,R4; Kenh 6
jnz next97; neu r5 khac 1F1F thi nhay den step91
xor.b #001h,&P1OUT ; P1.0 = toggle
jmp Step10;
next97:
cmp.w #0CF30h,R4; Kenh 7
jnz next98; neu r5 khac 1F1F thi nhay den step91
xor.b #001h,&P1OUT ; P1.0 = toggle
jmp Step10;
next98:
cmp.w #04FB0h,R4; Kenh 8
jnz next99; neu r5 khac 1F1F thi nhay den step91
xor.b #001h,&P1OUT ; P1.0 = toggle