📄 avr8100bluetooth.asm
字号:
MOV ZH, R0 ;GET FONT ADRESS
fixrom_to_ram:
CLC
ADD ZL, R7
ADC ZH, R6 ;FIGURE2 ADRESS + OFFSET
CLC
ROL ZL
ROL ZH
ORI ZL,0B00000001
LPM
ST X+, R0
ANDI ZL,0B11111110
LPM
ST X+, R0
ADIW ZL, 2
ORI ZL,0B00000001
LPM
ST X+, R0
ANDI ZL,0B11111110
LPM
ST X+, R0
ret
;=======================================================
/*
============================================================================
;================================================================================================
;DISP FM FREQUENCY, 128 * 20pixels, 16*8=128;4*8=32
;================================================================================================*/
tranphonecodedata_to_ram:
ldi r16,8
sts count,r16
lds r19,phonecodelen
cpi r19,8
brcs tranphonecodedata_to_ram_1
subi r19,8
mov r4,r19
rjmp tranphonecodedata_to_ram_2
tranphonecodedata_to_ram_1:
ldi r19,0
mov r4,r19
tranphonecodedata_to_ram_2:
LDI XL, LOW(DISP_DATA_RAM_START)
LDI XH, HIGH(DISP_DATA_RAM_START)
LDI R16, 0
MOV R6, R16 ;R6 = 0
MOV R7, R16 ;R7 = offset of the fOUR figures
LDI R16, 24
MOV R8, R16 ;18 LINE
ldi yl,low(phonecode)
ldi yh,high(phonecode)
tranphonecodedata_to_ram_3:
cpi r19,0
brne tranphonecodedata_to_ram_4
rjmp tranblanedata_to_ram
tranphonecodedata_to_ram_4:
ld r3,y+
LDI ZL,LOW(FONT_TAB)
LDI ZH,HIGH(FONT_TAB)
rcall rom_to_ram
lds r16,count
dec r16
sts count,r16
dec r19
rjmp tranphonecodedata_to_ram_3
tranblanedata_to_ram:
ST X+, R6
ST X+, R6
ST X+, R6
ST X+, R6
lds r16,count
dec r16
sts count,r16
cpi r16,0
brne tranblanedata_to_ram
tranphonecodedata_to_ram_6:
ldi yl,low(phonecode)
ldi yh,high(phonecode)
DEC R8
BREQ tranphonecodedata_to_ram_7
INC R7
INC R7
ldi r16,8
sts count,r16
mov r19,r4
RJMP tranphonecodedata_to_ram_3
tranphonecodedata_to_ram_7: ;TWO FRAMES DATA SENT TO RAM COMPLETED
ret
;;-----------------------------------------------------------------
;;DISP FM FREQUENCY, 128 * 20pixels, 16*8=128;4*8=32 第二次
;;================================================================================================
tranphonecodedata_to_ram1:
lds r19,phonecodelen
cpi r19,8
brcs tranphonecodedata_to_ram1_1
ldi r19,8
mov r4,r19
tranphonecodedata_to_ram1_1:
mov r4,r19
LDI XL, LOW(DISP_DATA_RAM_START)
LDI XH, HIGH(DISP_DATA_RAM_START)
LDI R16, 0
MOV R6, R16 ;R6 = 0
MOV R7, R16 ;R7 = offset of the fOUR figures
LDI R16, 24
MOV R8, R16
ldi r16,8
sts count,r16
;-----------------------------------------------------------------------------
tranphonecodedata_to_ram1_loop:
ldi yl,low(phonecode)
ldi yh,high(phonecode)
lds r16,phonecodelen
cpi r16,8
brcs tranphonecodedata_to_ram1_2
subi r16,8
clc
add yl,r16
adc yh,r6
tranphonecodedata_to_ram1_2:
cpi r19,0
brne tranphonecodedata_to_ram1_3
rjmp tranblanedata_to_ram1
tranphonecodedata_to_ram1_3:
ld r3,y+
LDI ZL,LOW(FONT_TAB)
LDI ZH,HIGH(FONT_TAB)
rcall rom_to_ram
lds r16,count
dec r16
sts count,r16
dec r19
rjmp tranphonecodedata_to_ram1_2
tranblanedata_to_ram1:
lds r16,count
cpi r16,0
brne tranblanedata_to_ram1_1
rjmp tranphonecodedata_to_ram1_4
tranblanedata_to_ram1_1:
ST X+, R6
ST X+, R6
ST X+, R6
ST X+, R6
lds r16,count
dec r16
sts count,r16
rjmp tranblanedata_to_ram1
tranphonecodedata_to_ram1_4:
DEC R8
BREQ tranphonecodedata_to_ram1_5
INC R7
INC R7
ldi r16,8
sts count,r16
mov r19,r4
RJMP tranphonecodedata_to_ram1_loop
tranphonecodedata_to_ram1_5: ;TWO FRAMES DATA SENT TO RAM COMPLETED
ret
/*
============================================================================
The display data is temporarily stored in the RAM, from $160 to $45F.
==============================================================================
*/
;*************************************************************************************************************************
disfrequency: ;SEND SetDisplay_Descriptor INSTRUCTION
clt
bld r10,1 ;set exit display status
LDI R17, $Ad
LDI R20, 10
LDI ZL,LOW(Instruction_SetDisplay_Descriptor)
LDI ZH,HIGH(Instruction_SetDisplay_Descriptor)
rCALL Uart_TX
rcall DISP_FRAM ;SEND ONE FRAM DISPLAY DATA
NEG R17 ;CHECK SUM
mov R16, r17
rcall Uart_TX_ONE_BYTE ;SEND SetDisplay_Descriptor COMPLETED
;--------------------------------------------------------------------------------------------
LDI R17, $Ac
LDI R20, 5 ;DATA1, THE SECOND FRAM DISPLAY DATA
LDI ZL,LOW(figurtab)
LDI ZH,HIGH(figurtab)
rcall Uart_TX
rcall DISP_FRAM1 ;SEND THE SECOND FRAM DISPLAY DATA
NEG R17 ;CHECK SUM
MOV R16, R17
rcall Uart_TX_ONE_BYTE ;SEND SetDisplay_Data COMPLETED
ret
;======================================================================================================== display phone code
;-------------------------------------------------------------------------------------------------- first
disphone: ;SEND SetDisplay_Descriptor INSTRUCTION
rcall tranphonecodedata_to_ram
LDI R17, $Ad
clt
bld r10,1 ;set into display status
LDI R20, 10
LDI ZL,LOW(displayphonefirsttab)
LDI ZH,HIGH(displayphonefirsttab)
rcall Uart_TX
rcall DISP_phone_firstfram ;SEND ONE FRAM DISPLAY DATA
NEG R17 ;CHECK SUM
mov R16, r17
rcall Uart_TX_ONE_BYTE
;--------------------------------------------------------------------------------------- second
LDI R17, $Ac
LDI R20, 5
LDI ZL,LOW(displayphonesecondtab)
LDI ZH,HIGH(displayphonesecondtab)
rcall Uart_TX
rcall DISP_phone_firstfram1 ;SEND THE SECOND FRAM DISPLAY DATA
NEG R17 ;CHECK SUM
MOV R16, R17
rcall Uart_TX_ONE_BYTE
;--------------------------------------------------------------------------------------------third
rcall tranphonecodedata_to_ram1
LDI R17, $Ac
LDI R20, 5
LDI ZL,LOW(displayphonethirdtab)
LDI ZH,HIGH(displayphonethirdtab)
rcall Uart_TX
rcall DISP_phone_firstfram ;SEND THE SECOND FRAM DISPLAY DATA
NEG R17 ;CHECK SUM
MOV R16, R17
rcall Uart_TX_ONE_BYTE
;-------------------------------------------------------------------------------------------- four
LDI R17, $Ac
LDI R20, 5
LDI ZL,LOW(displayphonefourtab)
LDI ZH,HIGH(displayphonefourtab)
rcall Uart_TX
rcall DISP_phone_firstfram1 ;SEND THE SECOND FRAM DISPLAY DATA
NEG R17 ;CHECK SUM
MOV R16, R17
rcall Uart_TX_ONE_BYTE
ret
;******************************************************************************
;-delay use r23, r24 ,r25
;------------------------------------------------------------
;----------------------------------------------------
delay3s:
LDI R23,150
rjmp delay_ms
delay1s:
LDI R23,50
rjmp delay_ms
delay_500ms:
LDI R23,25
rjmp delay_ms
delay_200ms:
LDI R23,10
rjmp delay_ms
delay_100ms:
LDI R23,5
rjmp delay_ms
Delay_40ms:
LDI R23,2
rjmp delay_ms
Delay_20ms:
LDI R23,1
rjmp delay_ms
delay_ms:
LDI R24,240
delay_ms_1:
ldi r25,200
delay_ms_2:
DEC R25
BRNE delay_ms_2
DEC R24
BRNE delay_ms_1
dec r23
brne delay_ms
RET
;----------------------------------------------------
delay3skey:
clt
bld r10,0
ldi r22,3
ldi r23,200
delay3skey_1:
ldi r24,200
delay3skey_2:
sbis pinc,upkey
rjmp exiedelay3key
sbis pinc,downkey
rjmp exiedelay3key
ldi r25,200
delay3skey_3:
dec r25
brne delay3skey_3
dec r24
brne delay3skey_2
dec r23
brne delay3skey_1
set ;set t
bld r10,0 ;set status
ret
exiedelay3key: ; 10 time 防KEY 抖
dec r22
brne delay3skey_2
ret
;==========================================================
banduangphoneexit:
clt
bld r10,0
; ldi r22,3
ldi r23,200
banduangphoneexit_1:
ldi r24,200
banduangphoneexit_2:
ldi r25,200
sbis pind,0
rjmp exitbanduangphoneexit
banduangphoneexit_3:
dec r25
brne banduangphoneexit_3
dec r24
brne banduangphoneexit_2
dec r23
brne banduangphoneexit_1
set ;set t
bld r10,0 ;set status
ret
exitbanduangphoneexit: ; 10 time 防KEY 抖
ret
;===========================================================
;---------------------------------------------------------
dly:
nop
nop
nop
nop
nop
nop
nop
ret
;------------------------------------------------------------------------
;*********************************************************************************************************
;-------------------------------------------------------------------
Uart_TX_ONE_BYTE: ;SENDING-DATA IN R16
SBIS UCSRA,UDRE
RJMP Uart_TX_ONE_BYTE
OUT UDR,R16
RET
Uart_RX_ONE_BYTE:
SBIS UCSRA,RXC
RJMP Uart_RX_ONE_BYTE
IN R16, UDR
RET
Uart_TX: ;THE LENGTH IS IN R20, THE DATA IS IN FLASH ADRESSED BY ZL,ZH, check_sum -> R17 ;FF+55+AC=$200
Uart_TX1:
CLC
ROL ZL
ROL ZH
Uart_TX2:
ORI ZL,0B00000001
LPM R16,Z
ADD R17,R16
rcall Uart_TX_ONE_BYTE
ANDI ZL,0B11111110
LPM R16,Z
ADD R17,R16
rcall Uart_TX_ONE_BYTE
ADIW ZL, 2
DEC R20
BRNE Uart_TX2
RET
;====================================================
pause:
LDI ZL,LOW(pausetab)
LDI ZH,HIGH(pausetab)
rjmp LINK_iPOD13
phone_link:
LDI ZL,LOW(phonelinktab)
LDI ZH,HIGH(phonelinktab)
rjmp LINK_iPOD13
exitexmodel:
SET
BLD R10,1
LDI ZL,LOW(exitexmodeltab)
LDI ZH,HIGH(exitexmodeltab)
rjmp LINK_iPOD13
playresume:
LDI ZL,LOW(playresumetab)
LDI ZH,HIGH(playresumetab)
rjmp LINK_iPOD13
LINK_iPOD:
LDI ZL,LOW(exttab)
LDI ZH,HIGH(exttab)
rjmp LINK_iPOD13
LINK_iPOD1:
LDI ZL,LOW(exttab1)
LDI ZH,HIGH(exttab1)
rjmp LINK_iPOD13
LINK_iPOD13:
CLC
ROL ZL
ROL ZH
LINK_iPOD_1:
ORI ZL,0B00000001
LPM R16,Z
cpi r16,0x88
brne LINK_iPOD_2
nop
;SEI
ret
LINK_iPOD_2:
cpi r16,0x99
brne LINK_iPOD_3
rcall delay_20ms
rjmp LINK_iPOD_4
LINK_iPOD_3:
rcall Uart_TX_ONE_BYTE
LINK_iPOD_4:
ANDI ZL,0B11111110
LPM R16,Z
cpi r16,0x88
brne LINK_iPOD_5
nop
;SEI
ret
LINK_iPOD_5:
cpi r16,0x99
brne LINK_iPOD_6
rcall delay_20ms
rjmp LINK_iPOD_7
LINK_iPOD_6:
rcall Uart_TX_ONE_BYTE
LINK_iPOD_7:
ADIW ZL, 2
rjmp LINK_iPOD_1
;================================================================================ frequency
DISP_FRAM:
LDI XL, LOW(DISP_DATA_RAM_START)
LDI XH, HIGH(DISP_DATA_RAM_START)
DISP_FRAM_1:
LD R16, X+
ADD R17, R16
rcall Uart_TX_ONE_BYTE
CPI XL, LOW(DISP_DATA_RAM_START1)
BRNE DISP_FRAM_1
CPI XH, HIGH(DISP_DATA_RAM_START1)
BRNE DISP_FRAM_1
RET
;-------------------------------------------------
DISP_FRAM1:
LDI XL, LOW(DISP_DATA_RAM_START1)
LDI XH, HIGH(DISP_DATA_RAM_START1)
DISP_FRAM1_1:
LD R16, X+
ADD R17, R16
rcall Uart_TX_ONE_BYTE
CPI XL, LOW(DISP_DATA_RAM_END)
BRNE DISP_FRAM1_1
CPI XH, HIGH(DISP_DATA_RAM_END)
BRNE DISP_FRAM1_1
RET
;-----------------------------------------------------------------------phone
DISP_phone_firstfram:
LDI XL, LOW(DISP_DATA_RAM_START)
LDI XH, HIGH(DISP_DATA_RAM_START)
DISP_phone_firstfram_1:
LD R16, X+
ADD R17, R16
rcall Uart_TX_ONE_BYTE
CPI XL, LOW(disp_phone_ram_start1)
BRNE DISP_phone_firstfram_1
CPI XH, HIGH(disp_phone_ram_start1)
BRNE DISP_phone_firstfram_1
RET
DISP_phone_firstfram1:
LDI XL, LOW(disp_phone_ram_start1)
LDI XH, HIGH(disp_phone_ram_start1)
DISP_phone_firstfram1_1:
LD R16, X+
ADD R17, R16
rcall Uart_TX_ONE_BYTE
CPI XL, LOW(disp_phone_ram_END)
BRNE dISP_phone_firstfram1_1
CPI XH, HIGH(disp_phone_ram_END)
BRNE dISP_phone_firstfram1_1
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -