📄 ic_card.s43
字号:
#include "msp430xW42x.h" ; standard definition include file
#include "global_vars.h" ; global variables include file
;********************************************************************/
; Main program
;********************************************************************/
ORG 0E000h
MAIN_T
MOV #WDTHOLD+WDTPW,&WDTCTL
mov.w #300h,SP
MOV.B #OSCCAP1+OSCCAP0,&FLL_CTL0
lo BIT.B #002h,&FLL_CTL0
JNZ lo
mov #0F000h,R5
osc_wait
dec R5
jnz osc_wait
clr R5
clr_ram_field
clr.b ram_start(R5)
inc R5
cmp #1000,R5
jnz clr_ram_field
init_port
mov.b #0FFh,&P1DIR
mov.b #0FFh,&P2DIR
mov.b #0FFh,&P3DIR
mov.b #0FFh,&P4DIR
mov.b #0FFh,&P5DIR
mov.b #0FFh,&P6DIR
clr.b &P6OUT
clr.b &P5OUT
clr.b &P4OUT
clr.b &P3OUT
clr.b &P2OUT
clr.b &P1OUT
bic.b #ic_key_bit,&P1DIR
bis.b #ic_key_bit,&P1IES
bis.b #ic_key_bit,&P1IE
bis.b #ic_rst+ic_clk+ic_vcc+ic_data,&P1DIR
clr.b &P1IFG
Init_real_LCD
mov.b #0AEh,&BTCTL
bic.b #BTIFG,&IFG2
bis.b #BTIE,&IE2
call #totle_water_display
eint
main_loop
BIS #CPUOFF+SCG1+SCG0+GIE,SR
jmp main_loop
;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
rtc_deal
bit #view_display_bit,&system_flag1
jnz view_information
bit #view_display_bit1,&system_flag1
jz rtc_deal_end
dec.b &information_delay
jnz rtc_deal_end
bic #view_display_bit1,&system_flag1
bic.b #LCDON,&LCDCTL
call #show_clr
rtc_deal_end
reti
view_information
dec.b &information_delay
jnz rtc_display_loop
clr.b &lcd_display_type
bic #view_display_bit,&system_flag1
bic.b #LCDON,&LCDCTL
call #show_clr
reti
rtc_display_loop
inc.b &lcd_display_type
cmp.b #1h,&lcd_display_type
jz totle_display
cmp.b #4h,&lcd_display_type
jz remain_display
cmp.b #07h,&lcd_display_type
jz buy_display
clr.b &lcdmem+8
reti
totle_display
call #totle_water_display
reti
remain_display
call #remain_water_display
reti
buy_display
call #buy_water_display
reti
;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
port_int1
bit.b #ic_key_bit,&P1IFG
jnz ic_card_deal
clr.b &P1IFG
reti
;;------------------
ic_card_deal
br #ic_card_operation
;;++++++++++++++++++++++++++++++++++++++++++++++++++++++
ic_card_operation
dint
bis.b #ic_rst+ic_clk+ic_vcc+ic_data,&P1DIR
bic.b #ic_rst+ic_clk+ic_vcc+ic_data,&P1OUT
bic.b #ic_key_bit,&P1IFG
call #key_delay
bit.b #ic_key_bit,&P1IN
jz ic_card_operation_end_1
bic.b #ic_key_bit,&P1IFG
eint
reti
ic_card_operation_end_1
call #ic_reset
call #ic_read
;;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
cmp #07070h,ic_data_buffer(R8)
jz add_card_operation
;;-------------------------------------
error_card
bic.b #ic_rst+ic_clk+ic_vcc+ic_data,&P1OUT
mov.b #0FCh,&P5SEL
mov.b #LCDON+LCD4MUX+LCDP1,&LCDCTL
call #show_clr
bis.b #f,&lcdmem+9
bis.b #h,&lcdmem+8
bis #view_display_bit1,&system_flag1
bic #view_display_bit,&system_flag1
mov.b #03h,&information_delay
bic.b #ic_key_bit,&P1IFG
eint
reti
add_card_operation
call #add_value_card
bis #view_display_bit,&system_flag1
bic #view_display_bit1,&system_flag1
mov.b #0Ah,&information_delay
clr.b &lcd_display_type
bic.b #ic_key_bit,&P1IFG
eint
reti
;;-------------------------------------
add_value_card
bic.b #ic_rst+ic_clk+ic_data+ic_vcc,&P1OUT
add #64h,&water_remain1
adc &water_remain2
jc add_negative_bit_clr
bit #negative_water_1stbit,&system_flag1
jz add_negative_bit_clr
sub #64h,&water_negative1
subc #0h,&water_negative2
jmp add_water_deal_end
add_negative_bit_clr
bic #negative_water_1stbit+negative_water_2ndbit,&system_flag1
clr &water_negative1
clr &water_negative2
add_water_deal_end
ret
;;---------------------
key_delay
mov #1000h,R9
key_delay1
dec R9
jnz key_delay1
ret
;;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ic_write
mov.b #38h,command_byte ;erase的命令字
call #ic_command_mode
call #processing_256
ret
ic_read
mov.b #030h,&command_byte
mov.b #030h,&command_address
mov.b #0FFh,&command_data
call #ic_command_mode
call #outgoing_main_data
ret
;;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;;复位程序
;;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ic_reset
bis.b #ic_rst+ic_clk+ic_vcc,&P1DIR
bic.b #ic_data,&P1DIR
bic.b #ic_rst+ic_clk,&P1OUT
bis.b #ic_vcc,&P1OUT
call #delay_50us
bis.b #ic_rst,&P1OUT
call #delay_8us
bis.b #ic_clk,P1OUT
call #delay_50us
bic.b #ic_clk,P1OUT
call #delay_8us
bic.b #ic_rst,&P1OUT
mov.b #32,&counter
next_rst_bit
bis.b #ic_clk,P1OUT
nop
nop
nop
bit.b #ic_data,P1IN
jnz rst_data_1
clrc
jmp rst_data_deal
rst_data_1
setc
rst_data_deal
rrc R6
rrc R5
nop
bic.b #ic_clk,P1OUT
dec.b &counter
jz rst_data_deal_end
call #delay_8us
jmp next_rst_bit
rst_data_deal_end
ret
;;----------------------------------------------------
ic_command_mode
bis.b #ic_clk+ic_data,&P1DIR
command_start
bic.b #ic_clk,&P1OUT
bis.b #ic_data,&P1OUT
call #delay_8us
bis.b #ic_clk,&P1OUT
call #delay_8us
bic.b #ic_data,&P1OUT
call #delay_8us
bic.b #ic_clk,&P1OUT
call #delay_8us
command_operation
mov.b &command_byte,&com_byte
call #command_bit_transe
mov.b &command_address,&com_byte
call #command_bit_transe
mov.b &command_data,&com_byte
call #command_bit_transe
command_stop
bic.b #ic_data,&P1OUT
call #delay_8us
bis.b #ic_clk,&P1OUT
call #delay_8us
bis.b #ic_data,&P1OUT
call #delay_8us
ret
;;----------------------------------------------------
command_bit_transe
mov.b #08h,&counter
command_bit_test
bit.b #01h,&com_byte
jz command_transe_0
bis.b #ic_data,&P1OUT
jmp bit_transe
command_transe_0
bic.b #ic_data,&P1OUT
bit_transe
nop
nop
bis.b #ic_clk,&P1OUT
call #delay_8us
bic.b #ic_clk,&P1OUT
rrc.b com_byte
dec.b &counter
jnz command_bit_test
ret
;;----------------------------------------------------
outgoing_main_data
bic.b #ic_data,&P1DIR
bic.b #ic_clk,&P1OUT
clr R9
call #out_8data
call #out_last_data
ret
;;-----------------------------------------------
out_8data
mov.b #08h,&counter
readout_8bit
bis.b #ic_clk,&P1OUT
nop
nop
nop
bit.b #ic_data,&P1IN
jz out_bit_0
bis.b #80h,&com_byte
jmp out_bit_deal
out_bit_0
bic.b #80h,&com_byte
out_bit_deal
bic.b #ic_clk,&P1OUT
dec.b &counter
jz out_valid_end
rrc.b &com_byte
nop
nop
jmp readout_8bit
out_valid_end
mov.b &com_byte,ic_data_buffer(R9)
inc.b &command_address
inc R9
cmp #96,R9
jnz out_8data
ret
;;-----------------------------------------------
out_last_data
mov.b #08h,&counter
out_next_plus
bis.b #ic_clk,&P1OUT
call #delay_8us
bic.b #ic_clk,&P1OUT
call #delay_8us
dec.b &counter
jnz out_next_plus
inc.b &command_address
tst.b &command_address
jnz out_last_data
bis.b #ic_clk,&P1OUT
call #delay_8us
bic.b #ic_clk,&P1OUT
call #delay_8us
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -