📄 485_a.s43.bak
字号:
;
;
;
;
;
#include "msp430x44x.h"
;------------------------------------------------
; 定义数据
;
;-------------------------------------------------
Receive_Buf equ 20CH
Send_Buf equ 20DH
R_Flag equ 20EH
LED_Buf equ 20FH
LED_CTRL equ 215H
KEY_Pressed equ 216H
KEY_Val equ 217H
KEY_Flag equ 218H
main:
push.w R10
mov.w #0x5A80,&WDTCTL
call #init_Keyboard
call #init_LED
call #init_BT
call #init_485
eint
MainLoop call #key_Event
cmp.b #0x1,&KEY_Flag
jne T12
mov.b &KEY_Val,&Send_Buf
call #rs485_SendData
clr.b &KEY_Flag
T12 cmp.b #0x1,&R_Flag
jnc MainLoop
clr.b R10
T14 cmp.b #0x5,R10
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 mov.b &Receive_Buf,&0x214
clr.b &R_Flag
jmp T12
init_BT:
mov.b #0x16,&BTCTL
bis.b #0x80,&IE2
ret
BT_Interrupt:
push.w R13
push.w R12
push.w R15
push.w R14
call #led_Display
pop.w R14
pop.w R15
pop.w R12
pop.w R13
reti PC
Shift_L:
tst.b R14
jeq 0x13DA
SHIFT rla.w R12
dec.b R14
jne SHIFT
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 PC
init_485:
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
and.b #0xCF,&P2DIR
bis.b #0x10,&P2DIR
clr.b &Receive_Buf
clr.b &Send_Buf
bis.b #0x4,&P4DIR
bic.b #0x4,&P4SEL
bic.b #0x4,&P4OUT
ret
rs485_SendData:
bis.b #0x4,&P4OUT
mov.b &Send_Buf,&U0TXBUF
T3 bit.b #0x1,&U0TCTL
jnc T3
bic.b #0x4,&P4OUT
ret
data_Receive:
mov.b &U0RXBUF,&Receive_Buf
mov.b #0x1,&R_Flag
reti PC
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
and.w #0xFF,R15
clr.b LED_Buf(R15) ;-----
inc.b R14
jmp T4
EXIT_I ret
led_Display:
mov.w #0x1,R15
mov.b &LED_CTRL,R14
and.w #0xFF,R14
mov.b LED_Buf(R14),R14
and.w #0xFF,R14
mov.b NUM_LED(R14),&P3OUT
bis.b #0x2,&P4OUT
bic.b #0x2,&P4OUT
mov.b R15,R12
mov.b &LED_CTRL,R14
call #Shift_L
inv.b R12
mov.b R12,&P3OUT
bis.b #0x1,&P4OUT
bic.b #0x1,&P4OUT
inc.b &LED_CTRL
cmp.b #0x6,&LED_CTRL
jnc EXIT_D
clr.b &LED_CTRL
EXIT_D ret
init_Keyboard:
and.b #0x1,&P1DIR
bis.b #0xE,&P1DIR
bis.b #0xE,&P1OUT
clr.b &KEY_Flag
clr.b &KEY_Pressed
ret
check_Key:
push.w R10
push.w R11
push.w R8
push.w R9
mov.b #0x8,R8
clr.b R10
T9 cmp.b #0x3,R10
jc T5
bis.b #0xE,&P1OUT
sub.b R8,&P1OUT
clrc
rrc.b R8
mov.b &P1IN,R14
and.b #0xF0,R14
cmp.b #0xF0,R14
jc T6
mov.b #0x80,R9
clr.b R11
T8 cmp.b #0x4,R11
jc T6
mov.b &P1IN,R14
and.b R9,R14
tst.b R14
jne T7
mov.b R10,R12
and.w #0xFF,R12
mov.w #0x4,R14
call #H_Mul
mov.b R11,R14
and.w #0xFF,R14
add.w R12,R14
mov.b 0x200(R14),&KEY_Val
jmp T5
T7 clrc
rrc.b R9
inc.b R11
jmp T8
T6 inc.b R10
jmp T9
T5 pop.w R9
pop.w R8
pop.w R11
pop.w R10
ret
delay:
mov.w #0xFF,R14
T10 tst.w R14
jeq EXIT_Delay
add.w #0xFFFF,R14
jmp T10
EXIT_Delay ret
key_Event:
push.w R10
and.b #0x1,&P1OUT
mov.b &P1IN,R10
tst.b &KEY_Pressed
jne T11
mov.b R10,R14
and.b #0xF0,R14
cmp.b #0xF0,R14
jc T11
mov.b #0x1,&KEY_Pressed
call #delay
call #check_Key
jmp EXIT_K
T11 cmp.b #0x1,&KEY_Pressed
jne EXIT_K
and.b #0xF0,R10
cmp.b #0xF0,R10
jne EXIT_K
clr.b &KEY_Pressed
mov.b #0x1,&KEY_Flag
EXIT_K pop.w R10
ret
NUM_LED
db 0xd7
db 0x14
db 0xcd
db 0x5d
db 0x1E
db 0x5b
db 0xdb
db 0x15
db 0xdf
db 0x5f
db 0x9f
db 0xda
db 0xc3
db 0xcc
db 0xcf
db 0x8b
db 0x00
KEY_MAP
db 0x01
db 0x02
db 0x03
db 0x0A
db 0x04
db 0x05
db 0x06
db 0x00
db 0x07
db 0x08
db 0x09
db 0x0b
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -