[Chia sẻ] Phím cảm ứng viết bằng ASM trên IAR cho MSP430G2152

  • Thread starter huunho
  • Start date
H

huunho

Guest
Đây là code asm trên iar cho 2152: chạy ok lắm nên tặng các bạn
Code:
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
LED_ EQU 001h ; led p1.0
 
#include <msp430g2152.h>
;-------------------------------------------------------------------------------
ORG 0FC00h ; Program Reset
;-------------------------------------------------------------------------------
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 = 91h
 
bis.b #LED_+BIT6,&P1DIR
bic.b #LED_+BIT6,&P1OUT
 
 
main:
bis.b #BIT5,&P1SEL2; P1.5 PIN OSD ON
mov.w #TACLR,&TA0CTL; clear TA
mov.w #TASSEL_3+MC_2,&TA0CTL // INCLK, start continue up mode
call #delay_key;
mov.w #CM_3+CCIS_3+CAP+SCS,&TA0CCTL1 // Pos&Neg,GND,Ca
XOR #CCIS0,&TA0CCTL1;
mov.w &CCR1,R4;
bic.b #BIT5,&P1SEL2; P1.5 PIN OSD OFF
cmp.w #01700h,R4;
jn next1;
jmp next2;
next1:
xor.b #BIT6,P1OUT;
call #LED;
next2:
jmp main;
;-------------------------------------------------------------------------------
LED
xor.b #LED_,&P1OUT ; led = toggle
call #delay
xor.b #LED_,&P1OUT ; led = toggle
RET
 
;-------------------------------------------------------------------------------
delay
MOV #0FFFFh,R6;
L1d:
DEC.W R6
JNZ L1d
ret;
 
;-------------------------------------------------------------------------------
delay_key
MOV #01000,R6; 3000 us
L2d:
DEC.W R6
JNZ L2d
ret;
;-------------------------------------------------------------------------------
; Interrupt Vectors
;-------------------------------------------------------------------------------
ORG 0FFFEh ; MSP430 RESET Vector
DW RESET ;
END
 
H

huunho

Guest
Phím cảm ứng có ưu điểm là dùng nhạy, chuyên nghiệp,phong cách nhưng lại có nhược điểm sau:
- chíp phải làm việc liên tục để quyet phím vì phím cảm ứng không có ngắt tức là nó không thể vào chế độ low power mode nên không tiết kiệm nguồn
- để tiết kiệm nguồn ta phải làm 1 phím thường để phím nầy có chức năng giống hệt nút khóa phím
trên điện thoại cảm ứng, khi khóa phím thi phím cảm ưng không có tác dụng.
Chương trình trên làm các việc sau để tạo thành phím cảm ứng trên chân p1.5 của 2152:
- cấu hình chân p1.5 là pin osd ( chân tự dao động điện dung)
- lấy tín hiệu dao động trên chân p1.5 đưa vào timer a, sau 3000us thì chụp ảnh TAR vào CCR1
so sánh CCR1 với 1700, nếu nhỏ hơn thì xác nhận đó là 1 lần ấn phím và bật p1.0 lên 1/3 giây, đảo p1.6. rồi lại lặp lại quá trình trên vô hạn
như vậy chip phải làm viêc liên tục nên mình không thích phím cảm ứng lắm. chức năng này ứng dụng để đo điện dung tụ điện hoặc đọc cảm biến mực nước máy giặt thì thích hợp hơn
 

2death

Cố Vấn CLB
Staff member
huunho: Cảm ơn bài viết chia sẻ của em, chúc em ngày càng hoàn thành được nhiều đề tài hay hơn nữa.

Một số góp ý nhỏ về việc trình bày bài trên forum với em như sau:
+ Code nên để trong tab CODE sẽ đẹp - gọn hơn :D // đã sửa giúp
Code:
 đây là CODE
+ bài chỉ cần post một lần thôi, không cần post thêm ở thread khác, mất công admin đi xoá :2cool_after_boom:
+ bài viết "chia sẻ" em có thể đặt thêm [Chia sẻ] hay [share] trong tiêu đề, như vậy sẽ không bị lẫn với các bài có nội dung hỏi, nhờ giúp đỡ, và như thế bài viết của mình sẽ có ích với nhiều người hơn //đã sửa tiêu đề.
 
Top