📄 avr8100bluetooth.asm
字号:
.include "m8def.inc"
.list
;----------------------------------------------------------------------------------------
;常量定义
;-----------------------------------------------------------------
.EQU INIT_RAD = 780
.EQU INIT_RAD_DEC = $0780
.EQU INIT_RAD_MAX = 1200
.EQU DISP_DATA_RAM_START = $100
.EQU DISP_DATA_RAM_START1 = $220
.equ disp_phone_ram_start1 =$280
.equ disp_phone_ram_end =$400
.EQU DISP_DATA_RAM_END = $340 ;DISPLAY DATA 384 X 2 BYTES($180)
.EQU Length_Identify_RF_device = 5
.EQU Length_ContextPlay_Pause = 4
.EQU Length_ContextButtonStatus_Clear = 5
.EQU Length_ContextPlay_Resume = 4
.EQU Length_IdentiyDeviceLingoes = 9
.EQU Length_EnterRemoteUIMode = 3
.EQU Length_ExitRemoteUIMode = 3
.EQU Length_SetDisplay_Descriptor = 10
.EQU Length_SetDisplay_Data = 5
.EQU PIXEL_HEIGHT = 48
.EQU PIXEL_WIDTH = 128
.EQU ROW_SIZE = PIXEL_WIDTH/4
.EQU LENGTH_Descriptor = PIXEL_HEIGHT*ROW_SIZE/4+14
.EQU LENGTH_Data = PIXEL_HEIGHT*ROW_SIZE/4+5
.EQU LENGTH_Disp_Data = PIXEL_HEIGHT*ROW_SIZE/4+1 ;DISPLAY DATA + CHECKSUM
;-------------------------------------------------------
;I\O define
.equ REM = 2 ; Portd Data Register bit 2
.equ upkey = 3 ; Pin b Data Register bit 3
.equ downkey = 4 ; Pin b Data Register bit 4
.equ BTPIO =2 ; Pin b Data Register bit 2
.equ ce = 5 ; Port D Data Register bit 5
.equ ck = 6 ; Port D Data Register bit 6
.equ da = 7 ; Port D Data Register bit 7
.equ POWERCL =4 ;portD D Data Register bit4
;-----------------------------------------------------------
;变量定义
.equ i2cda_h =0x00c0
.equ i2cda_l =0x00c1
.equ bcdda1000 =0x00c2
.equ bcdda100 =0x00c3
.equ bcdda10 =0x00c4
.equ bcdda1 =0x00c5
.equ irdata =0x00c6
.equ keytime =0x00c7
.equ phonecodedata =0x00c8; a8--bc 20 byte
.equ phonecodelen =0x00c9
.equ phonecode =0x00ca
.equ count =0x00dd
;.equ status_user =r10
; status_user.0 =0 no lose key , =1 lose key,
; status_user.1 =0 display status , =1 no display status
; status_user.2 =0 remote lose ,status_user.2 =1 remote no lose
; status_user.3 =0 phone display exit ex_model,=1 phone display no exit ex_model
; r10,4=0 tran data to ram 0,; r10,4=1 tran data to ram 1
; r10,5=0 up ; r10,5=1 down
; r10,6=0 requency ;r10,6=1 phone
;delay resig
; r23 24 25
;-------------------------------------------------------------------------------------------------------------------------
;main program
.ORG $0000
rjmp RESET
;.ORG $0002
; rjmp int0program
.ORG $100
RESET:
ldi r16,$ff
ldi xl,$60
ldi xh,$00
Init_SRAM1: ;SRAM <- 0
ST X+,R16
CPI XL,$50
BRNE Init_SRAM1
CPI XH, 4
BRNE Init_SRAM1
;------------------------------------------------------------------------------
LDI R16,$bf
OUT SPL,R16 ;SP <- $0080
ldi r16,$00
out sph,r16
rcall INITIALIZE
rcall delay1s
;--------------------------------------------------------------------------------
; ldi r16,8
; sts phonecodelen,r16
; ldi r16,0
; sts phonecodelen+1,r16
; sts phonecodelen+2,r16
; sts phonecodelen+3,r16
; sts phonecodelen+4,r16
; sts phonecodelen+5,r16
; sts phonecodelen+6,r16
; sts phonecodelen+7,r16
; sts phonecodelen+8,r16
; sts phonecodelen+9,r16
; rcall delay_40ms
; rcall playresume
; rcall delay_40ms
; rcall playresume
; rcall LINK_iPOD
; rcall disphone
; rcall delay1s
; rcall delay1s
; rcall delay1s
; rcall delay1s
; rcall delay1s
; rcall delay1s
; rcall delay1s
; rcall delay1s
; rcall delay1s
; rcall delay1s
; rcall delay1s
; rcall delay1s
; rcall exitexmodel
; rcall delay_40ms
; rcall playresume
; rcall playresume
;*********************************************************************debug end
readeeprom:
rcall EEPROM_read
lds r16,i2cda_h
cpi r16,0x03
brne readeeprom_1
lds r16,i2cda_l
cpi r16,0x6b
brcc readeepromexit
ldi r16,0x03
sts i2cda_h,r16
ldi r16,0x6b
sts i2cda_l,r16
rjmp readeepromexit
readeeprom_1:
cpi r16,0x4
breq readeeprom_2
ldi r16,0x03
sts i2cda_h,r16
ldi r16,0x6b
sts i2cda_l,r16
rjmp readeepromexit
readeeprom_2:
lds r16,i2cda_l
cpi r16,0x39
brcs readeepromexit
ldi r16,0x03
sts i2cda_h,r16
ldi r16,0x6b
sts i2cda_l,r16
readeepromexit:
rcall hextobcd
rcall tranfrequencydata_to_ram
rcall delay_40ms
rcall playresume
rcall delay_40ms
rcall playresume
rcall LINK_iPOD
rcall disfrequency
RCALL DELAY3s
CBI PORTD,POWERCL
RCALL DELAY_200MS
rcall bh1418
;***********************************************************************************************
main:
rcall EEPROM_write
RCALL DELAY_100ms
rcall delay3skey
sbrc r10,0
rjmp main_1 ;key lose
sbis pinc,downkey
rjmp downkeyprogram
sbis pinc,upkey
rjmp upkeyprogram
main_1:
rcall exitexmodel
rcall delay_40ms
rcall playresume
rcall playresume
main_0:
sbis pinc,upkey
rjmp main_2 ;upkey
sbis pinc,downkey
rjmp main_3
sbis pind,0
rjmp readphone
rjmp main_0
main_2:
rcall Delay_40ms
sbis pinc,upkey
rjmp main_2_0
rjmp main_0
main_2_0:
sbrs r10,1
rjmp upkeyprogram
rcall LINK_iPOD1
rcall tranfrequencydata_to_ram
rcall disfrequency
rcall delay_40ms
rcall playresume
rcall playresume
main_2_1:
sbis pinc,upkey
rjmp main_2_1
rjmp main
;----------------------------------------------------------------------------------------
main_3:
rcall Delay_40ms
sbis pinc,downkey
rjmp main_3_0
rjmp main_0
main_3_0:
sbrs r10,1
rjmp downkeyprogram
rcall LINK_iPOD1
rcall tranfrequencydata_to_ram
rcall disfrequency
rcall delay_40ms
rcall playresume
rcall playresume
main_3_1:
nop
sbis pinc,downkey
rjmp main_3_1
rjmp main
;------------------------------------------------ 判断是打电话还是接电话
;rcalphone:
; sbic pind,0
;-------------------------------------
upkeyprogram:
clt
bld r10,5
rjmp updownprogram
downkeyprogram:
set
bld r10,5
updownprogram:
ldi r16,0
sts keytime,r16
updownprogram_0:
lds r16,keytime
inc r16
cpi r16,4
breq updownprogram_1
sts keytime,r16
updownprogram_1:
sbrc r10,5
rjmp updownprogram_2
rcall frequencyadd
rjmp updownprogram_3
updownprogram_2:
rcall frequencymius
updownprogram_3:
lds r16,keytime
cpi r16,2
brcc updownprogram_4
rcall delay_100ms
updownprogram_4:
lds r16,keytime
cpi r16,2
brne updownprogram_4_1
rcall delay_500ms
updownprogram_4_1:
rcall hextobcd
rcall tranfrequencydata_to_ram
rcall disfrequency
rcall bh1418
rcall playresume
sbrc r10,5
rjmp updownprogram_5
sbis pinc,upkey
rjmp updownprogram_6
rjmp main
updownprogram_5:
sbis pinc,downkey
rjmp updownprogram_7
rjmp main
updownprogram_6:
sbis pinc,downkey
rjmp updownprogram_4
rjmp updownprogram_0
updownprogram_7:
sbis pinc,upkey
rjmp updownprogram_4
rjmp updownprogram_0
;----------------------------------------------
frequencymius:
clc
lds r16,i2cda_l
subi r16,1
sts i2cda_l,r16
lds r16,i2cda_h
ldi r17,0
sbc r16,r17
sts i2cda_h,r16
lds r16,i2cda_h
cpi r16,3
brne frequencymius_1
lds r16,i2cda_l
cpi r16,0x6a
brne frequencymius_1
ldi r16,0x04
sts i2cda_h,r16
ldi r16,0x38
sts i2cda_l,r16
frequencymius_1:
ret
;---------------------------------------------------------
frequencyadd:
clc
lds r16,i2cda_l
ldi r17,1
add r16,r17
sts i2cda_l,r16
lds r16,i2cda_h
ldi r17,0
adc r16,r17
sts i2cda_h,r16
cpi r16,4
brne frequencyadd_1
lds r16,i2cda_l
cpi r16,0x39
brne frequencyadd_1
ldi r16,0x03
sts i2cda_h,r16
ldi r16,0x6b
sts i2cda_l,r16
frequencyadd_1:
ret
;************************************************************************************ read phone code
readphone:
ldi xl,low(phonecodedata)
ldi xh,high(phonecodedata)
LDI R16,47
OUT UBRRL,R16 ;SET BAUD-RATE 9600, USING CRYSTAL 7.3728
rcall Uart_RX_ONE_BYTE
cpi r16,05
brne readphoneexie
st x+,r16
rcall Uart_RX_ONE_BYTE
st x+,r16
mov r17,r16
readphone_1:
rcall Uart_RX_ONE_BYTE
subi r16,0x30
st x+,r16
dec r17
cpi r17,0
brne readphone_1
rcall Uart_RX_ONE_BYTE
cpi r16,0xff
brne readphone
; brne readphoneexie
st x+,r16
nop
;------------------------------------------------------
LDI R16,$07
OUT UBRRL,R16 ;SET BAUD-RATE 9600, USING CRYSTAL 7.3728MHZ
rcall delay_20ms
rcall pause
rcall delay_20ms
rcall pause
;rcall LINK_iPOD1
rcall phone_link
rcall disphone
rcall pause
rcall delay_20ms
rcall pause
rcall delay_20ms
readphone_2:
rcall banduangphoneexit
;sbic pinb,BTPIO
sbrs r10,0
rjmp readphone_2
rcall playresume
rcall playresume
rcall exitexmodel
rcall playresume
rcall playresume
readphoneexie:
LDI R16,$07
OUT UBRRL,R16 ;SET BAUD-RATE 9600, USING CRYSTAL 7.3728MHZ
rjmp main_0
;***************************************************************************************************************
;sub-program
;------------------------------------------------------------------------------------------
bh1418:
cli
lds r18,i2cda_l
lds r3,i2cda_h
ldi r16,0x08
ldi r17,0x02
W1415:
sbi portd,CE
W1415_1:
lsr r18
brcs W1415_2
cbi portd,DA ;0
rjmp WR11415
W1415_2:
sbi portd,DA ;1
WR11415 :
rcall dly
cbi portd,CK
rcall dly
sbi portd,CK
rcall dly
dec r16
cpi r16,0
brne W1415_1
dec r17
cpi r17,0
breq writeto1415END
WR11415_1:
ldi r16,8
mov r18,r3
ori r18,0B01001000
rjmp W1415_1
writeto1415END:
cbi portd,ce
rcall dly
cbi portd,da
rcall dly
cbi portd,ck
;SEI
RET
;================================================================================================
;DISP FM FREQUENCY, 128 * 18 pixels, 7+4+4+4+4+4+5=32
;================================================================================================
tranfrequencydata_to_ram:
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 six figures
mov r9,r16 ; dot offset of the two figures
LDI R16, 24
MOV R8, R16 ;24LINE
;------------------------------------------------------------
SET_DISP_RAM_FIGURE00:
st x+,r6
st x+,r6
lds r3,bcdda1000
cp r3,r6
brne SET_DISP_RAM_FIGURE00_00
st x+,r6
st x+,r6
st x+,r6
st x+,r6
rjmp SET_DISP_RAM_FIGURE
SET_DISP_RAM_FIGURE00_00:
LDI ZL,LOW(FONT_TAB)
LDI ZH,HIGH(FONT_TAB)
rcall rom_to_ram
;---------------------------------------------------
SET_DISP_RAM_FIGURE:
lds r3,bcdda100
LDI ZL,LOW(FONT_TAB)
LDI ZH,HIGH(FONT_TAB)
rcall rom_to_ram
SET_DISP_RAM_FIGURE3:
lds r3,bcdda10
LDI ZL,LOW(FONT_TAB)
LDI ZH,HIGH(FONT_TAB)
rcall rom_to_ram
SET_DISP_RAM_DOT:
LDI ZL,LOW(FONT_DOT)
LDI ZH,HIGH(FONT_DOT)
rcall fixrom_to_ram
SET_DISP_RAM_FIGURE4:
lds r3,bcdda1
LDI ZL,LOW(FONT_TAB)
LDI ZH,HIGH(FONT_TAB)
rcall rom_to_ram
st x+,r6
st x+,r6
DISPLY_ONE_LINE_END:
DEC R8
BREQ DISPLY_FIGURE_END
INC R7
INC R7
RJMP SET_DISP_RAM_FIGURE00
DISPLY_FIGURE_END: ;TWO FRAMES DATA SENT TO RAM COMPLETED
ret
;--------------------------------
rom_to_ram:
CLC
ADD ZL, R3
ADC ZH, R6 ;FIGURE2 ADRESS
CLC
ROL ZL
ROL ZH
LPM R1, Z+
LPM R0, Z+
MOV ZL, R1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -