当前位置: 网站首页 > 技术应用 > 单片机应用 > 应用范例

MCU与93C46应用范例


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;93c46的时钟接atw8p56的portb7
;93c46的数据输入接atw8p56的portb6
;93c46的数据输出接atw8p56的portb5
;93c46的片选通接atw8p56的portb0
;以16bit读写
;文件名:93c46.asm
;日期:  2006-11-27
;mcu:   8P53/56
;eeprom:93c46 
;FSYS:  4mhz
;oscd:   4t
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 
        c       equ	00h	;进位标志位
        z       equ	02h	;零标志位
        indf    equ	00h	;间接寻址
        tmr0    equ	01h	;定时器0
        pcl     equ	02h	;程序计数器
        status  equ	03h	;状态寄存器
        fsr     equ	04h	;间接寻址地址寄存器
	porta	equ	05h	;
        portb	equ	06h	;端口数据寄存器
        pcon    equ	08h	;电源控制寄存器
        wucon   equ	09h	;唤醒/电平变化中断控制寄存器
        pchbuf  equ	0ah	;程序高位寄存器
        pdcon	equ	0bh	;下拉电阻
        odcon   equ	0ch	;开漏极输出
        phcon   equ	0dh	;上拉电阻
        int_en  equ	0eh	;中断控制
        intflag equ	0fh	;中断标志
 
	address equ	11h	;地址
	data0	equ	12h	;数据
	data1	equ	13h	;数据
	temp	equ	14h	;临时寄存器		
	temp1	equ	15h	;临时寄存器
	bit	equ	16h	;数据个数
 
 
	sk	equ	7	;时钟
	di	equ	6	;数据输入
 	do	equ	5	;数据输出
 	cs	equ	0	;ic选通
 		
 
	read	equ	10000000b;控制命令 
	ewen	equ	00110000b
	erase	equ	11000000b
	write	equ	01000000b
	eral	equ	00100000b
	wral	equ	00010000b
	ewds	equ	00000000b
 
	org	00		;绝对地址
	call	initial		;初始化ic
	goto	main		
 
	org	08h
	retfie			;退出中断
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;in  register address 		地址寄存器
;in  register data0   		数据寄存器
;in  register data1   		数据寄存器
;out register temp		数据寄存器
;out register temp1		数据寄存器
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
main:
	movia	0a0h		;数据
	movar	data0
	movia	0ah		;数据
	movar	data1
	movia	00h		;地址
	movar	address
	call	write93c46	;写93c46
	movia	00h		;地址
	movar	address
	call	read93c46	;读93c46
	movr	temp,0
	subar	data0,0
	btrss	status,z	;检查数据是否正确
	goto	main		;错误重写
	movr	temp1,0
	subar	data1,0
	btrss	status,z
	GOTO	main		;错误重写
complete:
	goto	complete	;写入完成
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;in  register address 		地址寄存器
;in  register data0   		数据寄存器
;in  register data1   		数据寄存器
;out register
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
write93c46:	
	bcr	portb,cs
	call	ewen93c46	;允许读写
	call	write_93c46	;写93c46
	bcr	portb,cs
	call	busy_test	;检查是否写完成
	return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;in     register address  	地址寄存器
;in     register data0    	数据寄存器
;in     register data1    	数据寄存器
;buffer	register bit		数据个数
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
write_93c46:			;写入数据
	movia	2
	movar	bit
	bsr	portb,cs
	call	st_93c46	;开始信号	
	movia	write
	call	transfor
	movia	6		;发送六位地址
	movar	bit
	rlr	address,0
	movar	temp
	rlr	temp,0
	call	transfor
	movia	8		;发送八位数据
	movar	bit
	movr	data1,0
	call	transfor
	movia	8		;发送八位数据
	movar	bit
	movr	data0,0
	call	transfor
	return
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;检测写入是否完成
;in   register    
;out  register     
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
busy_test:
	bsr	portb,cs
	call	delay4us
busy_test1:
	btrss	portb,do	;是否写入完成
	goto	busy_test1
	bcr	portb,cs	;完成
	return
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;允许写操作
;in    register   
;out   register    
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
ewen93c46:			;写入允许
	bsr	portb,cs
	call	st_93c46
	movia	8
	movar	bit
	movia	ewen
	call	transfor
	call	cs_clr
	return
	
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;read data from 93c46		从93c46读数据
;in   register address 		地址寄存器
;out  register temp    		数据寄存器
;out  register temp1   		数据寄存器
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
read93c46:	
	bcr	portb,cs
	call	read_93c46	;读93c46
	call	cs_clr		;命令结束
	return
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;in     register  address  	地址寄存器
;out    register  temp     	数据寄存器
;out    register  temp1   	数据寄存器
;buffer	register  bit		数据个数
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
read_93c46:	
	bsr	portb,cs	;允许操作
	movia	2
	movar	bit
	call	st_93c46	;开始信号
	movia	read		;发送读命令
	call	transfor
	movia	6		;发送六位地址
	movar	bit
	rlr	address,0
	movar	temp
	rlr	temp,0
	call	transfor
	call	byte_read	;读数据
	bcr	portb,cs	;完成
	return
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;in     register 
;out    register  temp     	数据寄存器
;out    register  temp1    	数据寄存器
;buffer	register  bit		数据个数
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
byte_read:			;读16bit
	movia	16
	movar	bit
byte_read1:
	bsr	portb,sk
	call	delay4us
	bcr	portb,sk
	bcr	status,c	;时钟下降沿读取数据
	btrsc	portb,do
	bsr	status,c
	rlr	temp,1
	rlr	temp1,1
	decrsz	bit,1
	goto	byte_read1
	nop
	bcr	portb,sk
	return
	
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;操作完成信号
;in    register   
;out   register    
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
cs_clr:				;操作完成
	bcr	portb,cs	
	call	delay4us
	bsr	portb,cs
	return
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;in     register   temp		数据
;buffer	register   bit 		数据个数
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
transfor:			;发送八位数据
	movar	temp
transfor1:	
	bcr	portb,sk
	btrsc	temp,7		;检测数据
	goto	set_di
	bcr	portb,di
	goto	out_data
set_di:
	bsr	portb,di
	goto	out_data
out_data:
	nop
	rlr	temp,1
	bsr	portb,sk
	decrsz	bit,1
	goto	transfor1
	nop			;发送完成
	bcr	portb,sk
	bcr	portb,di
	nop
	return
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;开始信号
;in    register   
;out   register    
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
st_93c46:			;开始信号
	bcr	portb,sk
	call	delay2us
	bsr	portb,di
	call	delay2us
	bsr	portb,sk
	call	delay2us
	bcr	portb,sk
	return
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;延迟4微秒
;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
delay4us:
	nop
	nop
	nop
	nop
	return
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;延迟2微秒
;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
delay2us:
	return
	
	
 
initial:
	movia	020h		;打开lvd
	movar	pcon	
	movia	000h		;关闭portb口电平变化唤醒
	movar	wucon
	movia	0ffh		;关闭下拉电阻
	movar	pdcon
	movia	00h		;关闭开漏极输出
	movar	odcon
	movia	0ffh		;关闭上拉电阻
	movar	phcon
	movia	000h		;分频器给time0
	option		
	movia	00h		;端口设为输出
	iost	porta	
	movia	20H		;端口设为输出
	iost	portb	
	movia	00h		;输出低电平
	movar	porta
	movia	00h		;输出低电平
	movar	portb
	movia	00h		;关闭中断功能
	movar	int_en
	return	
 
点击次数:  【关闭
  • 壹零零单片机©版权所有 2008-2023 粤ICP备17151077号

Powered by  xinfuke  5.2.5 ©2008-2024  www.100mcu.com