⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 232_a.s43

📁 MSP340例程 适合入门 欢迎大家下载共享
💻 S43
📖 第 1 页 / 共 2 页
字号:
;------------------------------------------------------------------------------
;文件名称:
;          232_a.s43
;文件说明:
;         用于两个对等的实验板通过232接口进行通讯,本方通过行列扫描键盘发送的
;     数据现在在对方的LED上,波特率使用9600
;------------------------------------------------------------------------------

#include "msp430x44x.h"

;------------------------------------------------------------------------------
;  定义数据
;------------------------------------------------------------------------------
Receive_Buf  equ   200H                          ;232接收缓冲区
Send_Buf     equ   201H                          ;232发送缓冲区
R_Flag       equ   202H                          ;接收到数据标识
LED_Buf      equ   203H                          ;LED显示数据缓存,共六个字节

LED_CTRL    equ    209H                          ;LED显示位控制
KEY_Pressed equ    20AH                          ;按键是否按下
KEY_Val     equ    20BH                          ;键值
KEY_Flag    equ    20CH                          ;键值是否可以读取

;------------------------------------------------------------------------------
            ORG     08000h                  ; 程序开始
;------------------------------------------------------------------------------
RESET       mov.w   #0600h,SP               ; 初始化堆栈   
main:
             push.w  R10
             mov.w   #0x5A80,&WDTCTL        ;关看门狗
             call    #init_Keyboard         ;初始化键盘
             call    #init_LED              ;初始化LED
             call    #init_BT               ;初始化Basic Timer
             call    #init_232              ;初始化232
             eint                           ;开中断
MainLoop     call    #key_Event             ;检测键盘
             cmp.b   #0x1,&KEY_Flag         ;如果有键值可读取
             jne     T12                    
             mov.b   &KEY_Val,&Send_Buf
             call    #rs232_SendData        ;发送数据
             clr.b   &KEY_Flag              ;清除键值标识
T12          cmp.b   #0x1,&R_Flag           ;是否收到数据
             jnc     MainLoop
             clr.b   R10
T14          cmp.b   #0x5,R10               ;LED_Buf的数据移动
             jc      T13
             mov.b   R10,R14
             and.w   #0xFF,R14
             mov.w   #LED_Buf,R15
             mov.b   R10,R12
             and.w   #0xFF,R12
             add.w   R12,R15
             mov.b   0x1(R15),LED_Buf(R14)
             inc.b   R10
             jmp     T14
T13          push.b  R14
             mov.b   #0x05,R14
             mov.b   &Receive_Buf,LED_Buf(R14) ;把收到的数据放到LED_Buf[5]
             pop.b   R14
             clr.b   &R_Flag                   ;清除收到数据标识
             jmp     T12
;------------------------------------------------------------------------------
;   初始化Basic Timer
;------------------------------------------------------------------------------
init_BT:
            mov.b   #0x16,&BTCTL     ; 初始化BT       
            bis.b   #0x80,&IE2       ; 使能中断
            ret 
;-------------------------------------------------------------------------------
;  Basic timer的中断函数
;-------------------------------------------------------------------------------    
BT_Interrupt:
                 push.w  R13                   ;保存寄存器
                 push.w  R12                   ;
                 push.w  R15                   ;
                 push.w  R14                   ;
                 call    #led_Display          ;LED显示
                 pop.w   R14                   ;
                 pop.w   R15                   ;寄存器值出栈
                 pop.w   R12
                 pop.w   R13
                 reti    
;------------------------------------------------------------------------------
; 移位操作
;------------------------------------------------------------------------------   
Shift_L:
                 tst.b   R14
                 jeq     EXIT_S
SHIFT            rla.w   R12        ; 左移
                 dec.b   R14
                 jne     SHIFT  
EXIT_S           ret
;------------------------------------------------------------------------------
;  硬件乘法器操作
;------------------------------------------------------------------------------     
H_Mul:
                 push.w  SR          ;
                 dint                ;
                 nop                 ;
                 mov.w   R12,&MPY    ;
                 mov.w   R14,&OP2    ;
                 mov.w   &RESLO,R12  ; R12,R13返回数据
                 mov.w   &RESHI,R13  ;
                 reti    
;------------------------------------------------------------------------------
;   初始化RS232
;------------------------------------------------------------------------------
init_232:
         bic.b   #0x40,&FLL_CTL0       ;
         bis.b   #0x1,&U0CTL           ;
         bis.b   #0x10,&U0CTL          ;8-bit 字符
         bis.b   #0x34,&FLL_CTL1       ;开启第二个振荡器
CLEAR_F  bic.b   #0x2,&IFG1            ;清除OSCFault标识
         mov.b   #0xFF,R14             ;
T1       cmp.b   #0x1,R14              ;
         jnc     T2
         add.b   #0xFF,R14
         jmp     T1
T2       bit.b   #0x8,&FLL_CTL0        ;检测第二个振荡器是否正常工作
         jc      CLEAR_F               ;
         bis.b   #0x1,&U0CTL           ;
         bis.b   #0x10,&U0CTL          ;
         mov.b   #0x30,&U0TCTL         ;uclk=smclk
         mov.b   #0xA0,&U0BR0          ;在4MHz下进行9600波特率通讯
         mov.b   #0x1,&U0BR1           ;
         mov.b   #0x5E,&U0MCTL         ;
         bic.b   #0x1,&U0CTL           ;
         bis.b   #0xC0,&ME1
         bis.b   #0x40,&IE1            ;使能接收中断
         clr.b   &IFG1
         bis.b   #0x30,&P2SEL          ;设置 TX,RX
         and.b   #0xCF,&P2DIR
         bis.b   #0x10,&P2DIR
         clr.b   &Receive_Buf          ;清零接收缓冲
         clr.b   &Send_Buf             ;清零发送缓冲
         ret
;------------------------------------------------------------------------------
;  发送数据
;------------------------------------------------------------------------------              
rs232_SendData:
          mov.b   &Send_Buf,&U0TXBUF
T3        bit.b   #0x1,&U0TCTL       ; 是否发送成功了?
          jnc     T3
          ret     
;------------------------------------------------------------------------------
;   接收数据
;------------------------------------------------------------------------------
data_Receive:
         mov.b   &U0RXBUF,&Receive_Buf ; 接受数据 
         mov.b   #0x1,&R_Flag          ; 设置标识
         reti  
;------------------------------------------------------------------------------
;   初始化LED
;------------------------------------------------------------------------------
init_LED:
         mov.b   #0xFF,&P3DIR        ; 设置输出模式
         clr.b   &P3OUT              ;
         bis.b   #0x3,&P4DIR         ;
         and.b   #0xFC,&P4OUT        ;
         clr.b   &LED_CTRL           ;
         clr.b   R14                 ; 
T4       cmp.b   #0x6,R14            ;
         jc      EXIT_I              ;
         mov.b   R14,R15             ; 初始化LED_Buf
         and.w   #0xFF,R15           ;
         clr.b   LED_Buf(R15)        ;
         inc.b   R14                 ;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -