打印

MSP430 汇编程序实例 显示和时钟

[复制链接]
690|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dirtwillfly|  楼主 | 2015-12-28 10:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
;除了官网提供的汇编例程,另外找个msp430汇编的代码挺难的
#include  "msp430x11x1.h"
;******************************************************************************
;  高位在前,先传输,最后是低位
; MSP-FET430x110 Demo  - Serial Interface with HC164 Shift Register
;
;   Description: Transfer byte data from Data (R4) serially to to HC164.
;   Data incremented in the mainloop, effectively increment HC164 QA - QH.
;
;                MSP430F1121     ^     HC164
;             -----------------  |  ----------
;            |                 | |-|/CLR,B    |  8
;            |             P2.1|-->|CLK     Qx|--\->
;            |             P2.3|-->|A         |
;            |                 |   |          |  
;
#define     Data     R4   
CLK         equ      002h                   ; P2.1 Serial Clock   9脚
A           equ      008h                   ; P2.3 Data Out    11脚
T_CE        equ      080h                   ; 时钟芯片片选信号CE
T_CLK       equ      040h                   ; 时钟芯片时钟脉冲信号SCLK  
T_INT       equ      020h                   ; 时钟芯片中断输出端INT0
;高位在前,先传输,最后是低位
;******************************************************************************
;-----------------------------------------------------------------------------
            ORG     0F000h                  ; Program Start
;-----------------------------------------------------------------------------
RESET       mov.w   #0300h,SP               ; 堆栈初始化
StopWDT     mov.w   #WDTPW+WDTHOLD,&WDTCTL  ; 关掉看门狗
SetupP1     bis.b   #001h,&P1DIR            ; P1.0 output
SetupP2     bic.b   #CLK+A,&P2OUT           ; Reset CLK and A
            bis.b   #CLK+A,&P2DIR           ; CLK and A config. as output
            eint                            ; 开总中断

            bic.b   #T_INT,&P2DIR           ; P2.5 为输入模式
            bis.b   #T_INT,&P2IE            ; P2.5 中断允许
            bis.b   #T_INT,&P2IES           ; P2.5 中断下降沿有效
            bic.b   #T_INT,&P2IFG           ; 复位中断标志                              
Mainloop            

            call    #DisHELLO     ;显示英文HELLO
            call    #DisPASS      ;显示英文PAS
jmp         Mainloop;
;-----------------------------------------------------------------------------
clrdipl;显示清除           
;-----------------------------------------------------------------------------         
clrloop     mov.b   #000h,Data;
            call    #TX_HC164;
            call    #Delay;
            mov.b   #000h,Data;
            call    #TX_HC164;
            call    #Delay;
            mov.b   #000h,Data;
            call    #TX_HC164;
            call    #Delay;
            mov.b   #000h,Data;
            call    #TX_HC164;
            call    #Delay;
            mov.b   #000h,Data;
            call    #TX_HC164;
            call    #Delay;
            mov.b   #000h,Data;
            call    #TX_HC164;
            call    #Delay;
            mov.b   #000h,Data;
            call    #TX_HC164;
            call    #Delay;
            mov.b   #000h,Data;
            call    #TX_HC164;
            call    #Delay;
            mov.b   #000h,Data;
            call    #TX_HC164;
            call    #Delay;
            mov.b   #000h,Data;
            call    #TX_HC164;
            call    #Delay;

            call    #Delay;
endclr      ret
;
;
;-----------------------------------------------------------------------------
TX_HC164;   Shift Data (R4) --> HC164
;-----------------------------------------------------------------------------

            push.b  #08                     ; TOS = 8-bit counter   
TX_loop     bic.b   #A,&P2OUT               ; A reset
            rla.b   Data                    ; Data MSB -> Carry
            jnc     Clk_1                   ;
Out_1       bis.b   #A,&P2OUT               ; A set
Clk_1       bis.b   #CLK,&P2OUT             ; SCLK set
Clk_0       bic.b   #CLK,&P2OUT             ; SCLK reset
            dec.b   0(SP)                   ; All 8 bits sent?
            jnz     TX_loop                 ;
            incd.w  SP                      ; bit counter off stack
            ret                             ; Return from subroutine

;-----------------------------------------------------------------------------
Delay;      Software delay
;-----------------------------------------------------------------------------
            push.w  #00fffh                 ; Delay to TOS
L1          dec.w   0(SP)                   ; Decrement TOS
            jnz     L1                      ; Delay over?
            incd.w  SP                      ; Clean TOS
            ret                             ;
                                            ;
;-----------------------------------------------------------------------------
Ldelay;      Software delay
;-----------------------------------------------------------------------------
            push.w  #09fffh                 ; Delay to TOS
L2          dec.w   0(SP)                   ; Decrement TOS
            jnz     L2                      ; Delay over?
            incd.w  SP                      ; Clean TOS
            ret                             ;
;-----------------------------------------------------------------------------   
DisPASS;显示英文PASS
;-----------------------------------------------------------------------------
call    #clrdipl;

            mov.b   #08eh,Data;
            call    #TX_HC164;                     
            call    #Delay;
            call    #Delay;



            mov.b   #0080h,Data;8
            call    #TX_HC164;                     
            call    #Delay;
            call    #Delay;

            mov.b   #080h,Data;5
            call    #TX_HC164;                     
            call    #Delay;
            call    #Delay;

            mov.b   #0e6h,Data;6
            call    #TX_HC164;                     
            call    #Delay;
            call    #Delay;

            mov.b   #0eeh,Data;7
            call    #TX_HC164;                     
            call    #Delay;
            call    #Delay;

            mov.b   #0dah,Data;9
            call    #TX_HC164;                     
            call    #Delay;
            call    #Delay;


            mov.b   #0dah,Data;1
            call    #TX_HC164;                     
            call    #Delay;
            call    #Delay;

            mov.b   #080h,Data;2
            call    #TX_HC164;                     
            call    #Delay;
            call    #Delay;

            mov.b   #080h,Data;3
            call    #TX_HC164;                     
            call    #Ldelay;
            call    #Ldelay;
            ;call    #Ldelay;
            ;call    #Ldelay;
            ;call    #Ldelay;
            ;call    #Ldelay;
            ;call    #Ldelay;
            ;call    #Ldelay;                  
            ;call    #Ldelay;
            ;call    #Ldelay;
            ;call    #Ldelay;
            ;call    #Ldelay;
            ;call    #Ldelay;
            ret


;-----------------------------------------------------------------------------
DisHELLO;显示英文HELLO
;-----------------------------------------------------------------------------

call    #clrdipl;


            mov.b   #04eh,Data;
            call    #TX_HC164;                     
            call    #Delay;
            call    #Delay;


            mov.b   #0080h,Data;-
            call    #TX_HC164;                     
            call    #Delay;
            call    #Delay;



            mov.b   #0ech,Data;H
            call    #TX_HC164;                     
            call    #Delay;
            call    #Delay;

            mov.b   #0f3h,Data;E
            call    #TX_HC164;                     
            call    #Delay;
            call    #Delay;

            mov.b   #071h,Data;L
            call    #TX_HC164;                     
            call    #Delay;
            call    #Delay;


            mov.b   #070h,Data;L
            call    #TX_HC164;                     
            call    #Delay;
            call    #Delay;

            mov.b   #07eh,Data;O
            call    #TX_HC164;                     
            call    #Delay;
            call    #Delay;

            mov.b   #010h,Data;-
            call    #TX_HC164;                     
            call    #Delay;
            call    #Delay;

            mov.b   #010h,Data;-
            call    #TX_HC164;                     

            call    #Ldelay;
            call    #Ldelay;
            ;call    #Ldelay;
            ;call    #Ldelay;
            ;call    #Ldelay;
            ;call    #Ldelay;
            ;call    #Ldelay;
            ;call    #Ldelay;                     
            ;call    #Ldelay;

            ;call    #Ldelay;
            ;call    #Ldelay;      
            ret   
;-----------------------------------------------------------------------------            
P2_ISR;        
;-----------------------------------------------------------------------------
            xor.b   #001h,&P1OUT            ; Toggle P1.0
            call    #Delay;
            call    #DisPASS      ;显示英文PAS
            call    #Ldelay;
            reti                            ;       

;-----------------------------------------------------------------------------
;           Interrupt Vectors Used MSP430x11x1         
;-----------------------------------------------------------------------------
            ORG     0FFFEh                  ; MSP430 RESET Vector
            DW      RESET                   ;
            ORG     0FFE6h                  ; P2.x Vector
            DW      P2_ISR                  ;
            END


相关帖子

沙发
Snow7| | 2015-12-28 20:52 | 只看该作者
用汇编的都是大神啊
但是   ;call    #Ldelay;
            ;call    #Ldelay;
            ;call    #Ldelay;
call前为什么有分号

使用特权

评论回复
板凳
hxfxt| | 2015-12-28 21:06 | 只看该作者
Snow7 发表于 2015-12-28 20:52
用汇编的都是大神啊
但是   ;call    #Ldelay;
            ;call    #Ldelay;

分号就是把后面的注释了:)

使用特权

评论回复
地板
dirtwillfly|  楼主 | 2015-12-29 10:03 | 只看该作者
楼上正解。找一个汇编的例程停不容易的,所以分享给大家

使用特权

评论回复
5
pmp| | 2015-12-29 20:57 | 只看该作者
看不懂汇编的设计。

使用特权

评论回复
6
pmp| | 2015-12-29 20:59 | 只看该作者
有没有相关的c语言的设计。

使用特权

评论回复
7
dirtwillfly|  楼主 | 2015-12-29 21:06 | 只看该作者
pmp 发表于 2015-12-29 20:59
有没有相关的c语言的设计。

C语言的例程,论坛有很多

使用特权

评论回复
8
pmp| | 2015-12-29 22:14 | 只看该作者
这个真的看不懂。

使用特权

评论回复
9
pmp| | 2015-12-29 22:16 | 只看该作者
应该有匹配的原理图

使用特权

评论回复
10
lefeng| | 2015-12-29 22:25 | 只看该作者
分号就是把后面的注释了

不是//双斜杠是注释吗,话说这程序要是有注解就好了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:欢迎进入TI MCU论坛      21ic TI技术交流1群:61549143(已满),  21ic TI技术交流2群:311421422 我的博客:http://blog.timcu.com/

1179

主题

34649

帖子

1115

粉丝