历史上的今天
返回首页

历史上的今天

今天是:2024年12月31日(星期二)

正在发生

2019年12月31日 | PIC单片机对9346EEPROM程序的读写设计

2019-12-31 来源:elecfans

由于在使用时,找了很久也没找到相关的程序,因此把自己后来编写的程序贴出来,希望能给后来者借鉴参考!;实验目的:熟悉SPI总线以及9346EEPROM的读写


;RBO键按下时把DATA和DATA2写入到EEPROM中以EE—ADDR为地址的单元内,

;完成后,单个数码观显示“9”做为完成标志

;RB1键按下时,读取EEPROM中以EE—ADDR为地址的单元,并送数码管显示

;硬件要求:S3、S5、S6拨码管置ON,S1第7、8位置ON。

PIC单片机对9346EEPROM程序的读写设计

LIST P=16F877A, R=DEC

include “P16F877A.inc” ;包含头文件

__CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC

#DEFINE CS PORTC,2 ;片选信号

#DEFINE CLK PORTC,3 ;时钟信号输入

#DEFINE DI PORTC,5 ;数据输入脚

#DEFINE D0 PORTC,4 ;数据输出脚EE_ADDR EQU 05H ;待写EEPROM单元地址EE_DATA EQU 56H ;待写入的数据

EE_DATA2 EQU 78HTEMP1 EQU 30H ;读EEPROM结果存放单元

TEMP2 EQU 31H

DL1 EQU 77H ;延时用

DL2 EQU 78H ;延时用

;******************************************************

ORG 000H ;复位地址

NOP ;放置一条ICD必需的空操作指令

GOTO MAIN

ORG 0008H

TABLE

ADDWF PCL,1 ;PC值加上偏移地址

RETLW 0C0H ;0

RETLW 0F9H ;1的编码

RETLW 0A4H ;2的编码

RETLW 0B0H ;3的编码

RETLW 99H ;4的编码

RETLW 92H ;5的编码

RETLW 082H ;6

RETLW 0F8H ;7

RETLW 080H ;8

RETLW 090H ;9

RETLW 88H ;A

RETLW 083H ;b

RETLW 0C6H ;c

RETLW 0A1H ;d

RETLW 086H ;E

RETLW 08EH ;F

RETLW 0FFH

;********************主程序***************************

MAIN

MOVLW 0FFH

MOVWF PORTD

CLRF TEMP1

BANKSEL SSPSTAT

MOVLW b‘10000000’

MOVWF SSPSTAT ;SMP=1,CKE=0

MOVLW B‘11010000’

MOVWF TRISC ;D0输入,DI输出,CLK输出

MOVLW 0FFH

MOVWF TRISB

CLRF TRISD

CLRF TRISA

MOVLW 06H

MOVWF ADCON1

CLRF STATUS

CLRF INTCON ;清除所有中断使能位

CLRF PIR1 ;清除SSP中断标志位

BCF CS ;片选禁止

MOVLW B‘00110001’

MOVWF SSPCON ;CKP=1,SSPEN=1,SPI主模式Fosc/16LOOP

CLRF STATUS

BTFSC PORTB,0

GOTO EE_READ

CALL WRITE_EE

MOVLW 90H

MOVWF PORTD

MOVLW 0FEH

MOVWF PORTA

GOTO $

EE_READ

BTFSC PORTB,1

GOTO MAIN

CALL READ_EE

CALL DISPLAY

GOTO $-1

;**********************写使能*********************************

WRITE_EE

BSF CS ;片选使能

MOVLW B‘00000001’ ;发送起始位

; MOVLW

CALL SPI_COMM ;发送

MOVLW B‘00110000’ ;写使能命令代码

CALL SPI_COMM ;发送

BCF CS ;片选禁止

NOP

NOP ;延时一定时间;*********************写数据**********************************

;入口参数:EE_ADDR,EE_DATA,EE_DATA2

;出口参数:无

;*************************************************************

BSF CS ;片选使能

MOVLW B‘00000001’ ;发送起始位

CALL SPI_COMM ;发送

MOVLW EE_ADDR ;发送待写单元的地址

IORLW B‘01000000’ ;地址加上写命令代码

CALL SPI_COMM

MOVLW EE_DATA ;发送待写入的数据

CALL SPI_COMM

MOVLW EE_DATA2

CALL SPI_COMM ;再次发送8位数据,组成16位数据

BCF CS ;片选禁止

NOP

NOP

NOP ;延时一定时间

BSF CS ;片选使能

NOP

NOP

BTFSS D0 ;判断内部写操作是否完成

GOTO $-1 ;正在操作,等待完成

BCF CS ;片选禁止

NOP

NOP ;延时一定时间

RETURN;*********************读数据***********************************

;入口参数:EE_ADDR

;出口参数:TEMP1,TEMP2

;**************************************************************

READ_EE

BSF CS ;片选使能

NOP

NOP ;延时一定时间

MOVLW B‘00000001’ ;发送起始位

CALL SPI_COMM

MOVLW EE_ADDR ;发送待读单元地址

IORLW B‘10000000’ ;地址加上读命令代码

CALL SPI_COMM

MOVLW 00H

CALL SPI_COMM ;读取EEPROM中指定单元高8位数据

MOVWF TEMP1 ;保存到结果存放单元

MOVLW 00H

CALL SPI_COMM ;读取EEPROM中指定单元低8位数据

MOVWF TEMP2

NOP

BCF CS ;片选禁止

NOP

NOP

MOVLW 0FH

ANDWF TEMP1,0

MOVWF 61H

SWAPF TEMP1,0

ANDLW 0FH

MOVWF 60H

MOVLW 0FH

ANDWF TEMP2,0

MOVWF 63H

SWAPF TEMP2,0

ANDLW 0FH

MOVWF 62H

RETURN

;*****************发送命令/数据和读取数据子程序*************

SPI_COMM

MOVWF SSPBUF ;SSPBUF中写入数据,启动发送接收过程

BTFSS PIR1,SSPIF ;判断是否发送/接收完成

GOTO $-1 ;等待完成

BCF PIR1,SSPIF ;清除中断标志位

MOVF SSPBUF,W ;清空SSPBUF,以便下一次通信

RETURN ;子程序返回;**********************延时程序******************************

DELAY10MS

MOVLW 0CH

MOVWF DL1

DELAY2

MOVLW 0FFH

MOVWF DL2

DELAY1

DECFSZ DL2,1

GOTO DELAY1

DECFSZ DL1,1

GOTO DELAY2

RETURN

;**********************显示程序******************************

;入口参数:60H-63H

;无

;***********************************************************DISPLAY

MOVFW 60H

CALL TABLE

MOVWF PORTD

BCF PORTA,0

CALL DELAY10MS

BSF PORTA,0 MOVFW 61H

CALL TABLE

MOVWF PORTD

BCF PORTA,1

CALL DELAY10MS

BSF PORTA,1 MOVFW 62H

CALL TABLE

MOVWF PORTD

BCF PORTA,2

CALL DELAY10MS

BSF PORTA,2 MOVFW 63H

CALL TABLE

MOVWF PORTD

BCF PORTA,3

CALL DELAY10MS

BSF PORTA,3

RETURN;********************************************

end ;源程序结束

推荐阅读

史海拾趣

Component General Inc公司的发展小趣事

在技术创新的基础上,Component General Inc公司开始积极拓展市场。公司不仅在国内市场取得了良好的销售业绩,还积极开拓国际市场,与多家海外企业建立了合作关系。同时,公司也注重品牌建设,通过参加各种行业展会、举办技术研讨会等方式,提升公司的知名度和影响力。

Gilway Technical Lamp公司的发展小趣事
如果确认压缩机损坏且无法修复,需要更换新的压缩机。在更换过程中,需要注意选择与冰箱型号相匹配的压缩机,并确保正确安装和连接。
Adafruit公司的发展小趣事
如果确认压缩机损坏且无法修复,需要更换新的压缩机。在更换过程中,需要注意选择与冰箱型号相匹配的压缩机,并确保正确安装和连接。
Hisetec Electronic Co Ltd公司的发展小趣事

背景:随着全球化进程的加速,电子产品的供应链越来越复杂,国际合作成为必然趋势。Hisetec Electronic Co Ltd公司敏锐地洞察到这一点,开始实施国际化战略。

发展:公司首先在欧洲设立研发中心,与当地高校和科研机构合作,共同开发新技术。随后,又在亚洲多个国家和地区建立生产基地和销售网络,实现了全球范围内的资源配置和市场覆盖。通过这一系列举措,Hisetec公司不仅降低了生产成本,还提升了品牌知名度,实现了业务的高速增长。

Crane Connectors公司的发展小趣事

在日益严峻的环保形势下,Crane Connectors公司积极响应国家环保政策,将绿色环保理念融入企业的生产经营活动中。公司采用环保材料和节能技术,减少生产过程中的污染物排放和资源消耗。同时,公司还加强废弃物的回收和处理工作,实现资源的循环利用。这些环保举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实的基础。

Cooper Industries公司的发展小趣事

在照明领域,Cooper Industries同样展现出了强大的实力。1987年,公司收购了英国McGraw-Edison,并成立了“库柏照明”事业部,这一举措使库柏照明迅速成为世界上最大的商业、工业、道路和住宅照明装置的制造商之一。此后,公司不断在照明领域进行创新和突破,如在2007年成功收购以LED灯具著称的io Lighting灯具公司,进一步巩固了其在节能灯具市场的地位。这些努力使得库柏照明在全球范围内享有极高的声誉和市场份额。

问答坊 | AI 解惑

u盘坏了自己修

虽然外壳写着清华紫光,但这个年头没有什么是可信的。 拆开一看flash是三星的K9G8G08U0M,不知道是不是黑芯片改装的,控制芯片是CBM2080。 U盘的指示灯不亮,就先检查了电源芯片,是一个sot-89封装的,看不出型号,结果输出没有3.3v,外接了一 ...…

查看全部问答>

两片FPGA顺序连接?

两片FPGA顺序连接,应该怎么连接啊?都需要连接那些管脚呢?求助各位高手!…

查看全部问答>

关于ad9833的问题

    问ad9833能产生方波吗?看了它的控制寄存器功能表,好像不能直接产生方波啊,而且框图里面也没有比较器嘛,但看关于它的主要特点,都说可以直接产生正弦、三角、方波三种波形    恳请赐教…

查看全部问答>

单片机最小系统

实验五、模数转换 一、实验目的 1、掌握A/D转换与单片机的接口方法; 2、掌握A/D芯片TLC549的编程方法; 3、掌握数据采集程序的设计方法; 二、实验内容 利用实验开发装置上的TLC549做A/D转换器,对电位器提供的模拟电压信号进行定时中断 ...…

查看全部问答>

在消费电子设备中如何选择和集成MEMS运动处理方案

本帖最后由 jameswangsynnex 于 2015-3-3 20:02 编辑 对设备在三维空间中的运动进行测量及智能处理的运动处理技术,将是下一个重大的**性技术,会对未来的手持消费电子设备、人机接口、及导航和控制产生重大影响。 这场变革的推动力量是基于微机电 ...…

查看全部问答>

求购 S3C4510B 的开发板(只要能用就行)

求购 S3C4510B 的开发板,最好微芯力的 最近找了份4510b的资料,看着不错可惜没有板子练。真是郁闷啊!不知道哪为高手还有收藏! 有的话留个言! 电话:13141280460 qq:406672875…

查看全部问答>

ActiveSync连接 造成电脑死机 问题

我调试wince的时候使用ActiveSync进行连接 有时候调试到一般,连接突然中断,但是电脑右下脚的小图标仍然是绿色,这个时候我一拔出USB电缆,电脑就会死机 这个问题困扰了我很久 希望有人能帮我解决,谢谢!…

查看全部问答>

香兄请指点一下:TIM1不能翻转管脚。

原固件库中的例子FWLibexamplesTIMOCToggle使用TIM2,无问题。将其中的TIM2改为TIM1,并修改了相应的设置(如下),发现可进中断,但各输出管脚(pin8、9、10、11)一直为低电平,不能翻转,不知何故?请指教。改为tim1后的main.c/*********** ...…

查看全部问答>

有谁用FFT呀

人谁用过FFT,我也想作一个音乐的显示屏,但是知道FFT怎么作…

查看全部问答>

显示负载电流大小显示灯电路图

显示负载电流大小显示灯电路图     图中LED的发光强度与负载电流成正比,该电路的设计目的是提供一个非常紧凑的电路来替代某些天文学设备中12V电源线上的电表。这种设备包含工作状况不可视的小功率加热元件(防露元件)。不过,当加热器接 ...…

查看全部问答>