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
	
				