⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 avr8100bluetooth.asm

📁 通过篮牙将手机号码显示在IPOD机器上
💻 ASM
📖 第 1 页 / 共 3 页
字号:
.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 + -