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

📄 s3c9428 编写例程.src

📁 三星单片机源码例程,做家电比较适合 S3C9428 编写例程.rar
💻 SRC
📖 第 1 页 / 共 2 页
字号:
;;;================================================================;;;
;;;						                   ;;;
;;;	             KS86P4208 Micom Test Program                  ;;;
;;;						     		   ;;;
;;;			      	   	Programmed by SKID  	   ;;;
;;;								   ;;;
;;;	      Copyright (C) SAMSUNG ELECTRONICS CO. 1998           ;;;
;;;   	      ALL RIGHT RESERVED				   ;;;
;;;================================================================;;;

;;; Client-side program // Key scan,Time generation,Display service


	.include	"c:\smds2p\include\reg\86c4208.reg"
	
	org	0000h

	vector	00h,INT_4208	; 86C4208 has only one interrupt vector
	
	
;;;======================================================;;;

;;;======================================================;;;
;;;       Specific memory address renaming area          ;;;
;;;======================================================;;;

TimeBuf		.equ	07h	; To store time generated in Time_Gen() --> 07h ~ 0Fh
TransOrReceive	.equ	10h	; To separate trans mode and receive mode
T0Count		.equ	11h	; For multicall in timer0 interrupt
TimeCont	.equ	12h	; In Time_Gen(), to separate sec. min. ..
WhichDsp	.equ	13h	; Indicate that what kind of data be displayed

BeforeKey	.equ	14h	; For Key_Scan ruotine
KeyCnt		.equ	15h	; For Key_Scan ruotine

SioCnt		.equ	17h	; To count received data
KeyPTR		.equ	18h	; To point KEY Buffer

TestMode	.equ	19h	; Set by key-pressing (similar to DSP_BUF) --> 19h ~ 1Bh
TestMode1	.equ	1Ah	; sub test mode
TestMode2	.equ	1Bh	; Location of key 'F'
TransCnt	.equ	1Ch	; To count the number of trans
ReceiveData	.equ	1Dh	; To store received data from server-side --> 1Dh ~ 22h

KeyBuf		.equ	24h	; To store key data --> 24h ~ 37h
TransBuf	.equ	38h	; Trans data buffer --> 38h ~ 43h

BufOffset1	.equ	44h	; In Key_Srv routine
BufOffset2	.equ	45h	; In Key_Srv routine
TransIntv1	.equ	46h	; To control Transmit interval high 8-bit
TransIntv2	.equ	47h	; To control Transmit interval low 8-bit
ScanDelay	.equ	48h	; After storing key, some delay is required


;;;======================================================;;;

;;;======================================================;;;
;;;                   Define Word Area                   ;;;
;;;======================================================;;;

ConDat:		DW	0ffc0h,0fff9h,0bfe4h,0bff0h,0bfd9h,0bfd2h
		DW	0bfc2h,0ffd8h,0bfc0h,0bfd0h,0bfc8h,0bfc3h
		DW	0ffc6h,0bfe1h,0bfc6h,0bfceh 


;;;------------------------------------------------------;;;
SegDat:		DW	0dfffh,0efffh,0fff7h,0fffbh,0fffdh,0fffeh ; Which segment data


;;;------------------------------------------------------;;;
MenuDat:	DW	0bfd2h,0bfc7h,0bfe3h,0bfcch,0bfffh,0bfffh ; <-- 'STOP'
IDLE_DSP:	DW	0fff9h,0bfe1h,0ffc7h,0bfc6h,0bfffh,0bfffh
EXT_DSP:	DW	0bfc6h,0bfc7h,0bfffh,0fff9h,0bfebh,0bfc7h
BASIC_DSP:	DW	0bfc3h,0bfc8h,0bfd2h,0fff9h,0ffc6h,0bfc7h
CLK_DSP:	DW	0ffc6h,0ffc7h,0bfe3h,0ffc6h,0bfcbh,0bfffh
BUZ_DSP:	DW	0bfc3h,0ffc1h,0bfech,0bfech,0bfc6h,0bfefh
ZCD_DSP:	DW	0bfech,0ffc6h,0bfe1h,0bfffh,0bfffh,0bfffh
ADC_DSP:	DW	0bfc8h,0bfe1h,0ffc6h,0bfffh,0bfffh,0bfffh
T0_DSP:		DW	0bfc7h,0ffc0h,0bfffh,0bfffh,0bfffh,0bfffh
T1_DSP:		DW	0bfc7h,0fff9h,0bfffh,0bfffh,0bfffh,0bfffh
SIO_DSP:	DW	0bfd2h,0fff9h,0bfe3h,0bfffh,0bfffh,0bfffh
PWM_DSP:	DW	0bfcch,0ffc3h,0ffe1h,0ffcch,0ffd8h,0bfffh
IIC_DSP:	DW	0fff9h,0fff9h,0ffc6h,0bfffh,0bfffh,0bfffh
CHKSUM_DSP:	DW	0ffc6h,0bfc9h,0bfcbh,0bfd2h,0ffc1h,0bfffh


;;;======================================================;;;

;;;======================================================;;;
;;;        Initialize values of control registers        ;;;
;;;======================================================;;;

	org	0100h	
INITIAL:
	ld	sym,#00h		; Global/Fast interrupt disable -> sym
	ld	btcon,#10100010b	; Watch-dog disable
	ld	clkcon,#00011000b	; non-divided cpu clock
	ld	sp,#0c0h		; 4208 --> 00 ~ BF (After decrease, push data)

	ld	p0conh,#01101010b	; 0.7 - AD input(Key scan), rest - push-pull out
	ld	p0conl,#10010101b	; 0.2 ~ 0.0 - SIO setting
	ld	p1con,#10101010b	; p1 - push-pull out
	ld	p2conh,#11111010b	; 2.7,2.6 - IIC, 2.5,2.4 - push-pull out
	ld	p2conl,#10101010b	; 2.0 ~ 2.3 - push-pull out
	
	ld	t0data,#41h		; Interrupt interval == 1.667msec(10MHz base)
	ld	t0conl,#01000010	; Timer0 match interrupt
		
	ld	siocon,#00100110b	; Enable SIO, trans side (initial)
	ld	siops,#20		; setting baud rate

	ld	r0,#0	         	; RAM clear area setting
RAM_clr:
	clr	@r0
	inc	r0
	cp	r0,#0bfh
	jr	ule,RAM_clr
	
RAM_set:
	ld	KeyPTR,#0ffh
		
	ei


;;;======================================================;;;

;;;======================================================;;;
;;;						         ;;;
;;;                     MAIN  ROUTINE		         ;;;
;;;						         ;;;
;;;======================================================;;;

MAIN: 	
	nop

	call	Decision_WhichDsp	; What kind of data will be displayed?
	
	cp	TransOrReceive,#1	; Because of receive mode, the other routines
	jp	eq,MAIN			;  is not required.
	
	call	Key_Srv			; store key setting

	cp	TestMode1,#1		; Key setting complete?
	jp	ult,MAIN
	
	cp	TransCnt,#1		; Trans just one time
	jp	ult,Start_Trans
	
	ld	siocon,#10101110b	; Ready to receive data
	ld	p0conl,#10010100b	; SCK input mode
	ld	TransOrReceive,#1	; receive mode !
	jp	t,MAIN

Start_Trans:
	call	Trans_Data		; data trans to server-side

	jp	t,MAIN


;;;======================================================;;;

;;;======================================================;;;
;;;	             KEY SERVICE ROUTINE                 ;;;
;;;======================================================;;;

Key_Srv:
	ld	r3,KeyPTR
	cp	r3,#0ffh
	jp	eq,Key_Srv_End
	
	ld	r6,#KeyBuf[r3]	
	cp	TestMode,#0
	jp	ne,Chk_nextF
	
	cp	r6,#0fh
	jp	ne,Key_Srv_End
	ld	TestMode2,KeyPTR	; TestMode2 --> location of "F" in KEY BUFFER
	dec	r3
	cp	r3,#0ffh		; First data is 'F' ?
	jp	eq,Key_Srv_End
	
	ld	r6,#KeyBuf[r3]
	inc	r6
	ld	TestMode,r6		; main mode set
	jp	Key_Srv_End
	
Chk_nextF:
	cp	TestMode2,r3		; 'F' location? -- r3 --> KeyPTR
	jp	eq,Key_Srv_End
	
	cp	TestMode,#4
	jp	uge,Set_reg1
	
	ld	r11,#KeyBuf[r3]
	ld	TestMode1,r11
	inc	TestMode1		; sub mode set
	ld	r7,#TransBuf		; For indirect address
	ld	@r7,TestMode
	inc	r7
	ld	@r7,TestMode1		; STOP/IDLE/Ext.INT mode value set to TransBuf
	
	jp	Key_Srv_End
	
Set_reg1:				; 4 <= TestMode >= 8
	ld	r7,#TransBuf		; For indirect address
	add	r7,#2
	cp	TestMode,#8
	jp	ugt,Set_reg2
	ld	BufOffset1,#1
	ld	BufOffset2,#2
	jp	Set_TransBuf
Set_reg2:
	cp	TestMode,#0bh		; 9 <= TestMode >= B		
	jp	ugt,Set_reg3
	ld	BufOffset1,#3
	ld	BufOffset2,#4
	jp	Set_TransBuf
Set_reg3:
	cp	TestMode,#0ch		; TestMode == C		
	jp	ne,Set_reg4
	ld	BufOffset1,#5
	ld	BufOffset2,#6
	jp	Set_TransBuf
Set_reg4:
	cp	TestMode,#0dh		; TestMode == D		
	jp	ne,Set_reg5
	ld	BufOffset1,#7
	ld	BufOffset2,#8
	jp	Set_TransBuf
Set_reg5:				; Check-sum mode
	sub	r7,#2			; r7 <-- TransBuf base + 2
	ld	TestMode1,#1
	ld	@r7,TestMode
	inc	r7
	ld	@r7,TestMode1		
	jp	Key_Srv_End
	
Set_TransBuf:
	ld	r6,KeyPTR
	sub	r6,TestMode2		; r6 <-- KeyPTR - TestMode2
	cp	r6,BufOffset2		; Key input complete?
	jp	ne,Key_Srv_End
	
	sub	r3,BufOffset1		; r3 <-- KeyPTR - BufOffset1
Set_Transloop:
	ld	r6,#KeyBuf[r3]
	rl	r6			; shift to high 4-bit
	rl	r6
	rl	r6
	rl	r6
	or	r6,#00001111b
	inc	r3
	ld	r8,#KeyBuf[r3]
	or	r8,#11110000b
	and	r6,r8			; r6 <-- 1 byte register value
	ld	@r7,r6			; store to TransBuf
	inc	r3			; For extraction next data
	inc	r7
	ld	r9,TestMode2
	add	r9,BufOffset2
	cp	r3,r9
	jp	ult,Set_Transloop
	
	ld	r7,#TransBuf		; main test mode set & TestMode1 set
	ld	@r7,TestMode
	ld	TestMode1,#1
	inc	r7
	ld	@r7,TestMode1
	
Key_Srv_End:
	ret


;;;======================================================;;;

;;;======================================================;;;
;;;	           WhichDsp decision ROUTINE             ;;;
;;;======================================================;;;

Decision_WhichDsp:
	cp	TransOrReceive,#0	; In trans mode, menu and time are displayed
	jp	eq,Dsp_Trans
					; In receive mode, ADC/CAP/Check-Sum/time display
	cp	TestMode,#8		; display ADC data
	jp	eq,WhichDsp_adc
	
	cp	TestMode,#9		; display Capture data
	jp	eq,WhichDsp_cap
	
	cp	TestMode,#0dh		; display IIC data
	jp	eq,WhichDsp_iic
	
	cp	TestMode,#0eh		; display Check-Sum data
	jp	eq,WhichDsp_chksum		
	
	jp	Menu_Dsp
	
Dsp_Trans:
	cp	TestMode,#1
	jp	uge,Menu_Dsp
	ld	WhichDsp,#0		; time display --> trans mode & before ket set	
	jp	Decision_End	

Menu_Dsp:
	ld	WhichDsp,#1		; menu display --> trans mode & key setting
	jp	Decision_End		;                , receive mode & no dispaly data
	
WhichDsp_adc:
	ld	WhichDsp,#2
	jp	Decision_End
	
WhichDsp_cap:
	ld	WhichDsp,#3
	jp	Decision_End
	
WhichDsp_iic:
	ld	WhichDsp,#4
	jp	Decision_End
	
WhichDsp_chksum:
	ld	WhichDsp,#5

Decision_End:
	ret
	

;;;======================================================;;;

;;;======================================================;;;
;;;	           Data Transmit ROUTINE                 ;;;
;;;======================================================;;;

Trans_Data:
	cp	TransIntv2,#0ffh

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -