Chia sẻ: Giải mã remote samsung bằng asm trên IAR viết cho 2131

  • Thread starter huunho
  • Start date
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:
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
 
H

huunho

Guest
Code:
            next98:
            cmp.w    #04FB0h,R4;  Kenh 8
            jnz      next99; neu r5 khac 1F1F thi nhay den step91
            xor.b    #001h,&P1OUT            ; P1.0 = toggle
            jmp      Step10;
           
           
            next99:
            cmp.w    #8F70h,R4;  Kenh 9
            jnz      next910; neu r5 khac 1F1F thi nhay den step91
            xor.b    #001h,&P1OUT            ; P1.0 = toggle
            jmp      Step10;
           
           
            next910:
            cmp.w    #7788h,R4;  Kenh 0
            jnz      next911; neu r5 khac 1F1F thi nhay den step91
            xor.b    #001h,&P1OUT            ; P1.0 = toggle
            jmp      Step10;
           
            next911:
            cmp.w    #07F8h,R4;  info
            jnz      next912; neu r5 khac 1F1F thi nhay den step91
            xor.b    #001h,&P1OUT            ; P1.0 = toggle
            jmp      Step10;
           
            next912:
            cmp.w    #37C8h,R4;  Pre
            jnz      next913; neu r5 khac 1F1F thi nhay den step91
            xor.b    #001h,&P1OUT            ; P1.0 = toggle
            jmp      Step10;
           
            next913:
            cmp.w    #0BF40h,R4;  Power
            jnz      next914; neu r5 khac 1F1F thi nhay den step91
            xor.b    #001h,&P1OUT            ; P1.0 = toggle
            jmp      Step10;
           
            next914:
            cmp.w    #7F80h,R4;  Source
            jnz      next915; neu r5 khac 1F1F thi nhay den step91
            xor.b    #001h,&P1OUT            ; P1.0 = toggle
            jmp      Step10;
           
            next915:
            cmp.w    #0A758h,R4;  Menu
            jnz      next916; neu r5 khac 1F1F thi nhay den step91
            xor.b    #001h,&P1OUT            ; P1.0 = toggle
            jmp      Step10;
           
            next916:
            cmp.w    #0E916h,R4;  Enter
            jnz      next917; neu r5 khac 1F1F thi nhay den step91
            xor.b    #001h,&P1OUT            ; P1.0 = toggle
            jmp      Step10;
           
            next917:
            cmp.w    #0FF0h,R4;  Mute
            jnz      next918; neu r5 khac 1F1F thi nhay den step91
            xor.b    #001h,&P1OUT            ; P1.0 = toggle
            jmp      Step10;
           
            next918:
            cmp.w    #4BB4h,R4;  Exit
            jnz      next919; neu r5 khac 1F1F thi nhay den step91
            xor.b    #001h,&P1OUT            ; P1.0 = toggle
            jmp      Step10;
            next919:
            */
            jmp      Step1;
           
Step10:    call      #LED
            jmp      Step1
      /*  1  1f1fdf20
            2  1f1f5fa0
            3  1f1f9f60
            4      ef10
            5      6f90
            6      af50
            7      cf30
            8      4fb0
            9      8f70
            0      7788
            ifo    07f8
            pre    37c8
            power  bf40
            source  7f80
            menu    a758
            tool    2dd2
            enter  e916
            mute    0ff0
            exit    4bb4
            vol-    2fd0
            Vol+    1fe0
            P-      f708
            P+      B748
            */
;-------------------------------------------------------------------------------           
Key_1      call      #delay_key
            bit.b    #nut1,P1IN;   
            jc        next_A;
           
            back_A:       
            bit.b    #nut1,P1IN;
            jnc        back_A;
           
            xor.b    #role1,P1OUT
            call  #LED 
            next_A:
            RET
;-------------------------------------------------------------------------------           
Key_2     
            call      #delay_key
            bit.b    #nut2,P1IN;   
            jc        next_c;
           
            back_c:       
            bit.b    #nut2,P1IN;
            jnc        back_c;
           
            xor.b    #role2,P2OUT
            call  #LED
            next_c:   
            RET
;-------------------------------------------------------------------------------           
LED       
            xor.b    #LED_,&P1OUT          ; led = toggle
            call      #delay
            xor.b    #LED_,&P1OUT          ; led = toggle
            RET
           
;-------------------------------------------------------------------------------             
delay      nop
            MOV    #020000,R6;
      L1:  DEC.W  R6
            NOP
            NOP
            NOP
            NOP
            NOP
            NOP
            NOP
            JNZ    L1
            ret;
delay_key
            nop
            MOV    #03000,R6;
      L2:  DEC.W  R6
            NOP
            NOP
            NOP
            NOP
            NOP
            NOP
            NOP
            JNZ    L2
            ret;
 
;-------------------------------------------------------------------------------
P1_ISR;    Toggle P1.0 Output
;-------------------------------------------------------------------------------
            bic.w  #CPUOFF+SCG0+GIE,0(SP)        ; Exit LPM4 on RETI,disale interrupt
            bic.b  #nut1+nut2+in,&P1IFG      ; P1.7 , P1.3 IFG Cleared 
            reti                            ; Return from ISR
;-------------------------------------------------------------------------------
;          Interrupt Vectors
;-------------------------------------------------------------------------------
            ORG    0FFFEh                  ; MSP430 RESET Vector
            DW      RESET                  ;
            ORG    0FFE4h                  ; P1.x Vector
            DW      P1_ISR                  ;
            END
 

lee_trieu

Gà con
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)
Chào bạn huunho mình cũng đang muốn tìm hiểu giải mã remote hồng ngoại, mình không biết ngôn ngữ ASM. bạn có thể share cho mình tài liệu liên quan đến cách thức giải mã được không ạ?? cảm ơn bạn nhiều !!:)
 
H

huunho

Guest
Chào các bạn!
Hôm nay mình xin chia sẻ với mọi người thuật toán giải mã tín hiệu remote (điều khiển từ xa bằng hồng ngoại) dùng cho mọi loại remote, mình đã nghiên cứu rất lâu trên mã code remote của nhiều loại remote khác nhau và rút ra thuật toán chung để giải mã chúng.
Trước tiên các bạn vào trang này để xem code của tất cả các loại remote : http://lirc.sourceforge.net/remotes
sau đó rút ra kết luận sau: có 2 loại mã hóa khác nhau được tích hợp trên remote
1, Loại điều chế độ rộng xung Thấp là loại remote có bit 0 và bit 1 khác nhau ở độ rộng xung thấp, điển hình là điều khiển sony: ( us là viết tắt của micro giây)
Sony CD player : RM-470

bits 7 (số bit được truyền đi : 7 bít )

Xung thấp(us) Xung cao (us)
header 2412 588 ( bít khởi động)
one 612 588 ( bít 1)
zero 1210 588 ( bít 0)
ptrail 1210

khi ấn 1 nút trên điều khiển thì sẽ có 1 xung khởi động được truyền đi với độ dài xung thấp 2412us và xung cao 588us (để đánh thức mcu), tiếp đó là 7 bít dữ liệu ,,bít 1 có 612us xung thấp và 588us xung cao,bít 0 có 1210us xung thấp và 588us xung cao. Cuối cùng là bít stop có 1210us xung thấp và xung cao rất dài, cái này chả cần quan tâm chỉ cần biết cứ xung cao kéo dài hơn 2000us thì là bít stop. nếu giữ nút trên remote thì quá trình truyền mã lệnh cứ lặp lại như thế mãi cho đến khi nhả nút.
Bit 0 và bít 1 có phần xung cao bằng nhau (588us) để làm mốc đo phần xung thấp phân biệt giữa bít 0 và 1. Sóng mang ( carrier) của remote có tần số 38Khz hoặc 40Khz, khi sóng mang phát ra tương ứng với xung thấp ta sẽ đo được mức logic 0 trên chân ra của ic nhận quang ( ic này có 3 chân : 1 out, 2 GND, 3 VCC = +5v hoăc +3v ) , khi sóng mang không phát ra thì tương ứng với xung cao, ta sẽ đo được mức logic 1 trên chân ra của ic nhận quang. khi không nhận tín hiệu gì thì chân ra của ic nhận quang có mức logic 1.
2, Loại điều chế độ rộng xung Cao là loại remote có bit 0 và bit 1 khác nhau ở độ rộng xung Cao, điển hình là điều khiển samsung: ( đây là kiểu mã hóa phổ biến nhất ).

Samsung_00025G
bits 16 (16 bit dữ liệu)

Xung thấp(us) Xung cao (us)
header 8985 4387 ( khởi động)
one 599 1626 (bit 1 )
zero 599 506 (bit 0 )
ptrail 599 (dừng )

Qua cách mô tả trên ta rút ra điểm riêng sau của các remote:
- Số lượng bít dữ liệu được truyền đi khác nhau: có loại 7 bit(sony),loại 8 bít, 12 bít, 16 bít , 18 bít, 32 bít, 42 bít (AIWA). Cùng 1 hãng điện tử ví dụ sony thì số bít cũng khác nhau, điều khiển tivi sony có 7 bit, còn dàn âm thanh sony là 16 bit.
- Xung khởi động khác nhau
- Phương thức mã hóa khác nhau : điều chế độ rộng xung thấp hay cao
Giống nhau, dựa vào cái này mà giải mã tất cả các remote:
- Mỗi bít khởi động, dừng,0 ,1 đều có phần xung thấp, cao.
- Bit khởi động có phần xung thấp bao giờ cũng > 2000us
- bit 1 có tổng độ dài xung thấp và cao < 1500us
- bit 0 có tổng độ dài xung thấp và cao > 1500us
- bit dừng có xung cao > 2000 us
- Điều khiển nào có độ dài dữ liệu > 16 bit thì phần dữ liệu đầu tiên là giống nhau, 16 bit còn lại khác nhau ( đây là các bít có nghĩa) ví dụ :
Đieu khien tivi samsung bn59-00891a (21 inch CRT)
thap cao

start 4604u 4431u

0 618u 544u
1 618u 1609u
bits 32

các bít phát đi đầu tiên | 16 bít cuối cùng

00011111 00011111 01110111 10001000 0
00011111 00011111 11011111 00100000 1
00011111 00011111 01011111 10100000 2
00011111 00011111 10011111 01100000 3
00011111 00011111 11101111 00010000 4
00011111 00011111 01101111 10010000 5
00011111 00011111 10101111 01010000 6
00011111 00011111 11001111 00110000 7
00011111 00011111 01001111 10110000 8
00011111 00011111 10001111 01110000 9
00011111 00011111 11101001 00010110 enter
00011111 00011111 01001011 10110100 exit
00011111 00011111 00000111 11111000 info
00011111 00011111 11110111 00001000 p-
00011111 00011111 10110111 01001000 p+
00011111 00011111 10100111 01011000 menu
00011111 00011111 00001111 11110000 mute
00011111 00011111 10111111 01000000 power
00011111 00011111 00110111 11001000 pre CH
00011111 00011111 01111111 10000000 source
00011111 00011111 00101101 11010010 tool
00011111 00011111 00101111 11010000 vol-
00011111 00011111 00011111 11100000 vol+


Tôi đưa ra thuật toán giải mã remote tivi samsung như sau:
- bước 1: R4 = 0 ; Hai biến này mỗi biến có độ dài 2 byte
R5 = 0
- bước 2: đợi xung xuống thấp rồi nhảy đến bước 3
- bước 3: đo độ rộng xung thấp nếu 4400 < độ rộng < 4800us
thì nhảy đến bước 4, nếu không thì quay về bươc 1
- bước 4:đo độ rộng xung cao nếu 4400 < độ rộng < 4800us
thì nhảy đến bước 5, nếu không thì quay về bươc 1
- bước 5: đo độ rộng xung thấp, nếu độ rộng > 2000 thì quay về bước 1
nếu < 2000 thì nhảy đến bước 6
- bước 6: đo độ rộng xung cao, nếu độ rộng > 2000 thì nhảy đến bước 9 (bit stop)
nếu < 2000 thì cộng độ rộng này với độ rộng đo ở bước 5 ta có tổng.
nếu tổng > 1500 thì đây là bit 0, nhảy đến bước 7
nếu tổng < 1500 thì đây là bit 1, nhảy đến bước 8
- bước 7: xóa cờ nhớ C
quay trái có nhớ R4
quay trái có nhớ R5
nhảy đến bước 5
- bước 7: set cờ nhớ C
quay trái có nhớ R4
quay trái có nhớ R5
nhảy đến bước 5
- bước 9: chúng ta có 32 bit dữ liệu giải mã chứa trong R4 và R5, mang so sánh với dữ liệu sẵn có để thực hiện lênh tương ứng
Tuy nhiên, thuật toán trên là tổng quát nên rất tuyệt vời ở chỗ nó giải mã được cả 2 loại điều chế độ rộng xung cao và thấp, đọc được bít dừng và khởi động, giữ lại 16 bít có nghĩa ở R4, các bít giống nhau giữ ở R5. Nếu độ dài bít > 32 bít thì nó giữ lai 32 bít cuối cùng, còn nếu < 32 bit thì phần trống có giá tri là 0.

Tôi đã dùng thuật toán trên viết chương trình cho MSP430G2131 đọc mã từ remote rồi lưu vào Seg D, sau đó sẽ thực hiện các lệnh điều khiển tương ứng với mã đọc được : bật tắt đèn, quạt, hẹn giờ tắt
 
H

huunho

Guest
tài liệu về asm mình có là Slau144j.pdf và data sheet. bạn không hiểu chỗ nào mình giải thích cho

mình thí dụ lệnh sau:
mov #34,R4

tức là gán giá trị 34 (hệ thập phân) vào biến R4, bạn có hiểu không?

mow.w #0FFFh,R5;
gán giá trị FFFh vào R5, chữ W cho thấy đây là lệnh với 1 từ ( tức là 2 byte)
viết như sau là lênh với 1 byte:
mow.b #0FFh,R5;
mow #0FFh,R5;

ngôn ngữ asm có ưu điểm là viết đến đâu thì biết ngay mỗi câu lệnh thực hiện hết bao nhiêu us đến đấy nên rất có lợi khi giải mã remote
 
Top