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

📄 icprg.asm

📁 TTR056单片机控制代码!台湾通泰单片机接口转换应用代码!
💻 ASM
字号:
;===================================================================================
;
;	通泰MCU 通讯 DVD MCU 应用(V1.00)
;
;					2005/10/20
;============== CPU WORKING REGISTER ===============================================
.EQ   	DP		$0
.EQ   	ACC     	$1
.EQ   	TB1     	$2
.EQ   	TB2     	$3
.EQ   	TB3     	$4
.EQ   	DPL     	$5
.EQ   	DPM     	$6
.EQ   	DPH     	$7      ;DEFAULT
;===================================================================================
.EQ   	PS      	$8      ;PS    R/W 1100  CPU power saving register
.EQ   	INTF    	$9      ;INTF  R/W 0000  Interrupt request flag register
.EQ   	INTC    	$A      ;INTC  R/W 0000  Interrupt control register
;============== I/O Port SFR Define ================================================
.EQ   	PAC     	$0B     ;PAC   R/W 1111  I/O port A control register
.EQ   	PA      	$0C     ;PA    R/W 1111  I/O port A register
.EQ   	PBC     	$0D     ;PBC   R/W 1111  I/O port B control register
.EQ   	PB      	$0E     ;PB    R/W 1111  I/O port B register
.EQ   	PCC     	$0F     ;PCC   R/W 1111  I/O port C control register
.EQ   	PC      	$10     ;PC    R/W 1111  I/O port C register
;===================================================================================
.EQ   	TBC     	$15     ;TBC   R/W 0000  Time base control register
.EQ   	TMRAL   	$16     ;TMAL  R/W 0000  Timer/counter A data low register
.EQ   	TMRAH   	$17     ;TMAH  R/W 0000  Timer/counter A data high register
.EQ   	TMRAC   	$18     ;TMAC  R/W 0000  Timer/counter A control register
.EQ   	TMRBL   	$19     ;TMBL  R/W 0000  Timer/counter B data low register
.EQ   	TMRBH   	$1A     ;TMBH  R/W 0000  Timer/counter B data high register
.EQ   	TMRBC   	$1B     ;TMBC  R/W 0000  Timer/counter B control register
;============== SFR REGISTER =======================================================
.EQ	MFC     	$1F     ;MFC   R/W 0010  Multi-function control register
;============== USER RAM DEFINE RANGE ->20h~9Fh ====================================
.EQ	PIN_DAT		#$1	;数据 PA0
.EQ	PIN_CLK		#$2	;时钟 PA1
.EQ	PIN_STB		#$4	;片选 PA2
.EQ	PIN_TST		#$8	;测试 PA3
;===================================================================================
;必须使用的变量
;===================================================================================
.EQ	DATA_HI		$21
.EQ	DATA_LO		$22
.EQ	LOOP_COUNT		$23
;====================================================================================
.ORG 	$0
	;程序开始
	JMP LAB_MAIN

	;中断处理,(无须中断,所以不做处理)
INIT_PROG:
	NOP
	NOP
	NOP
	RET

LAB_MAIN:
	;程序开始,清零
	STX #$0,ACC
	STX #$0,DPL
	STX #$0,DPM
	STX #$0,DPH

	STX #$0,TB1
	STX #$0,TB2
	STX #$0,TB3

	STX #$0,INTF
	STX #$0,INTC
	STX #$0,TBC

	STX #$0,TMRAL
	STX #$0,TMRAH
	STX #$0,TMRAC

	STX #$0,TMRBL
	STX #$0,TMRBH
	STX #$0,TMRBC

LAB_INIT_IO_PIN:
	;A0,A1,A2 三个脚位输入其它都输出!
	STX #$7,PAC	
	STX #$0,PBC	
	STX #$0,PCC	

LAB_LOOP_BEGIN:
	;清除数据
	STX #$0,DATA_LO
	STX #$0,DATA_HI

	;循环8次
	STX #$8,LOOP_COUNT

LAB_STB_LOOP_HIGH:
	;读入数据,等待 STB=LOW
	;LDA PA
	;XOR PIN_TST,ACC,A
	;STX PA
	
	LDA PA
	TST PIN_STB,ACC
	JPZ LAB_CLK_LOOP_HIGH
	JMP LAB_STB_LOOP_HIGH

LAB_CLK_LOOP_HIGH:
	;等待CLK变底
	LDA PA
	TST PIN_CLK,ACC
	JPZ LAB_DATA_LEFT_SHIFT
	JMP LAB_CLK_LOOP_HIGH

LAB_DATA_LEFT_SHIFT:
	;循环移位
	;DATA_LO <<= 1
	;DATA_HI <<= 1

	CLC
	RLC DATA_LO,M
	RLC DATA_HI,M

LAB_DATA_READ:	
	;读出数据
	LDA PA
	TST PIN_DAT,ACC
	JPZ LAB_CLK_LOOP_LOW

	;高位放入数据 80
	;DATA_LO |= 1
	ORI #$1,DATA_LO,M

LAB_CLK_LOOP_LOW:
	;等待CLK变高
	LDA PA
	TST PIN_CLK,ACC
	JPZ LAB_CLK_LOOP_LOW

	;计数器递减
	LDA LOOP_COUNT
	SUB #$1,ACC,A
	STX LOOP_COUNT

	;退出循环
	JPZ LAB_STB_LOOP_LOW
	;继续循环
	JMP LAB_CLK_LOOP_HIGH

LAB_STB_LOOP_LOW:
	;等待STB变高
	LDA PA
	TST PIN_STB,ACC
	JPZ LAB_STB_LOOP_LOW

LAB_CMP_FIRST:
	;比较数据高位是否为 = 1
	LDA DATA_HI
	CMP #$1,ACC
	JPZ LAB_STX_PA
	JMP LAB_CMP_NEXT

LAB_STX_PA:
	LDA DATA_LO
	STX PA
	NOP
	JMP LAB_CMP_END

LAB_CMP_NEXT:
	;比较数据高位是否为 = 2
	CMP #$2,ACC
	JPZ LAB_STX_PB
	JMP LAB_CMP_LAST

LAB_STX_PB:
	LDA DATA_LO
	STX PB
	NOP
	JMP LAB_CMP_END
	
LAB_CMP_LAST:
	;比较数据高位是否为 = 3
	CMP #$3,ACC
	JPZ LAB_STX_PC
	JMP LAB_CMP_END

LAB_STX_PC:
	LDA DATA_LO
	STX PC
	NOP

LAB_CMP_END:
	;比较结束,准备循环,加上部分延时
	NOP
	
	;重新循环
	JMP LAB_LOOP_BEGIN

.END

⌨️ 快捷键说明

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