?? 485_a.s43
字號(hào):
;------------------------------------------------------------------------------
;文件名稱(chēng):
; 485_a.s43
;文件說(shuō)明:
; 用于兩個(gè)對(duì)等的實(shí)驗(yàn)板通過(guò)485接口進(jìn)行通訊,本方發(fā)送的
; 數(shù)據(jù)現(xiàn)在在對(duì)方的LED上,實(shí)驗(yàn)使用波特率為9600
;------------------------------------------------------------------------------
#include "msp430x44x.h"
;------------------------------------------------------------------------------
; 定義數(shù)據(jù)
;------------------------------------------------------------------------------
Receive_Buf equ 200H ;485接收緩沖區(qū)
Send_Buf equ 201H ;485發(fā)送緩沖區(qū)
R_Flag equ 202H ;接收到數(shù)據(jù)標(biāo)識(shí)
LED_Buf equ 203H ;LED顯示數(shù)據(jù)緩存,共六個(gè)字節(jié)
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 ;關(guān)看門(mén)狗
call #init_Keyboard ;初始化鍵盤(pán)
call #init_LED ;初始化LED
call #init_BT ;初始化Basic Timer
call #init_485 ;初始化485
eint ;開(kāi)中斷
MainLoop call #key_Event ;檢測(cè)鍵盤(pán)
cmp.b #0x1,&KEY_Flag ;如果有鍵值可讀取
jne T12
mov.b &KEY_Val,&Send_Buf
call #rs485_SendData ;發(fā)送數(shù)據(jù)
clr.b &KEY_Flag ;清除鍵值標(biāo)識(shí)
T12 cmp.b #0x1,&R_Flag ;是否收到數(shù)據(jù)
jnc MainLoop
clr.b R10
T14 cmp.b #0x5,R10 ;LED_Buf的數(shù)據(jù)移動(dòng)
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) ;把收到的數(shù)據(jù)放到LED_Buf[5]
pop.b R14
clr.b &R_Flag ;清除收到數(shù)據(jù)標(biāo)識(shí)
jmp T12
;------------------------------------------------------------------------------
; 初始化Basic Timer
;------------------------------------------------------------------------------
init_BT:
mov.b #0x16,&BTCTL
bis.b #0x80,&IE2
ret
;-------------------------------------------------------------------------------
; Basic timer的中斷函數(shù)
;-------------------------------------------------------------------------------
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
mov.w &RESHI,R13
reti
;------------------------------------------------------------------------------
; 初始化RS485
;------------------------------------------------------------------------------
init_485:
bic.b #0x40,&FLL_CTL0 ;
bis.b #0x1,&U0CTL ;
bis.b #0x10,&U0CTL ;8-bit 字符
bis.b #0x34,&FLL_CTL1 ;開(kāi)啟第二個(gè)振蕩器
CLEAR_F bic.b #0x2,&IFG1 ;清除OSCFault標(biāo)識(shí)
mov.b #0xFF,R14 ;
T1 cmp.b #0x1,R14 ;
jnc T2
add.b #0xFF,R14
jmp T1
T2 bit.b #0x8,&FLL_CTL0 ;檢測(cè)第二個(gè)振蕩器是否正常工作
jc CLEAR_F ;
bis.b #0x1,&U0CTL ;
bis.b #0x10,&U0CTL ;
mov.b #0x30,&U0TCTL ;uclk=smclk
mov.b #0xA0,&U0BR0 ;在4MHz下進(jìn)行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 ;設(shè)置TX,RX
and.b #0xCF,&P2DIR
bis.b #0x10,&P2DIR
clr.b &Receive_Buf ;清零接收緩沖
clr.b &Send_Buf ;清零發(fā)送緩沖
bis.b #0x4,&P4DIR ;
bic.b #0x4,&P4SEL ;
bic.b #0x4,&P4OUT ;
ret
;------------------------------------------------------------------------------
; 發(fā)送數(shù)據(jù)
;------------------------------------------------------------------------------
rs485_SendData:
bis.b #0x4,&P4OUT ;使能發(fā)送
mov.b &Send_Buf,&U0TXBUF
T3 bit.b #0x1,&U0TCTL
jnc T3
bic.b #0x4,&P4OUT ;禁止發(fā)送
ret
;------------------------------------------------------------------------------
; 接收數(shù)據(jù)
;------------------------------------------------------------------------------
data_Receive:
mov.b &U0RXBUF,&Receive_Buf
mov.b #0x1,&R_Flag
reti
;------------------------------------------------------------------------------
; 初始化LED
;------------------------------------------------------------------------------
init_LED:
mov.b #0xFF,&P3DIR ;設(shè)置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
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -