用PIC16f877A单片机读写93LC46B的汇编程序 pic16f877a rs232 ccs

由于在使用时,找了很久也没找到相关的程序,因此把自己后来编写的程序贴出来,希望能给后来者借鉴参考!(此程序配合WWW.PIC16.COM单片机学习网的QL200开发板使用);实验目的:熟悉SPI总线以及9346EEPROM的读写
;RBO键按下时把DATA和DATA2写入到EEPROM中以EE—ADDR为地址的单元内,
;完成后,单个数码观显示“9”做为完成标志
;RB1键按下时,读取EEPROM中以EE—ADDR为地址的单元,并送数码管显示
;硬件要求:S3、S5、S6拨码管置ON,S1第7、8位置ON。
LISTP=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 CSPORTC,2;片选信号
#DEFINE CLKPORTC,3;时钟信号输入
#DEFINE DIPORTC,5;数据输入脚
#DEFINE D0PORTC,4;数据输出脚EE_ADDR EQU05H;待写EEPROM单元地址EE_DATA EQU56H;待写入的数据
EE_DATA2 EQU 78HTEMP1EQU30H;读EEPROM结果存放单元
TEMP2EQU 31H
DL1EQU77H;延时用
DL2EQU78H;延时用
;******************************************************
ORG000H;复位地址
NOP;放置一条ICD必需的空操作指令
GOTO MAIN
ORG 0008H
TABLE
ADDWFPCL,1;PC值加上偏移地址
RETLW0C0H;0
RETLW0F9H;1的编码
RETLW0A4H;2的编码
RETLW0B0H;3的编码
RETLW99H;4的编码
RETLW92H;5的编码
RETLW082H;6
RETLW0F8H;7
RETLW080H;8
RETLW090H;9
RETLW88H;A
RETLW083H;b
RETLW0C6H;c
RETLW0A1H;d
RETLW086H;E
RETLW08EH;F
RETLW0FFH
;********************主程序***************************
MAIN
MOVLW0FFH
MOVWFPORTD
CLRFTEMP1
BANKSEL SSPSTAT
MOVLWb'10000000'
MOVWFSSPSTAT;SMP=1,CKE=0
MOVLWB'11010000'
MOVWFTRISC;D0输入,DI输出,CLK输出
MOVLW0FFH
MOVWFTRISB
CLRFTRISD
CLRFTRISA
MOVLW06H
MOVWFADCON1
用PIC16f877A单片机读写93LC46B的汇编程序 pic16f877a rs232 ccs
CLRFSTATUS
CLRFINTCON;清除所有中断使能位
CLRFPIR1;清除SSP中断标志位
BCFCS;片选禁止
MOVLWB'00110001'
MOVWFSSPCON;CKP=1,SSPEN=1,SPI主模式Fosc/16LOOP
CLRFSTATUS
BTFSCPORTB,0
GOTOEE_READ
CALLWRITE_EE
MOVLW90H
MOVWFPORTD
MOVLW0FEH
MOVWFPORTA
GOTO $
EE_READ
BTFSCPORTB,1
GOTOMAIN
CALLREAD_EE
CALLDISPLAY
GOTO$-1
;**********************写使能*********************************
WRITE_EE
BSFCS;片选使能
MOVLWB'00000001';发送起始位
; MOVLW
CALLSPI_COMM;发送
MOVLWB'00110000';写使能命令代码
CALLSPI_COMM;发送
BCFCS;片选禁止
NOP
NOP;延时一定时间;*********************写数据**********************************
;入口参数:EE_ADDR,EE_DATA,EE_DATA2
;出口参数:无
;*************************************************************
BSFCS;片选使能
MOVLWB'00000001';发送起始位
CALLSPI_COMM;发送
MOVLWEE_ADDR;发送待写单元的地址
IORLWB'01000000';地址加上写命令代码
CALLSPI_COMM
MOVLWEE_DATA;发送待写入的数据
CALLSPI_COMM
MOVLWEE_DATA2
CALLSPI_COMM;再次发送8位数据,组成16位数据
BCFCS;片选禁止
NOP
NOP
NOP;延时一定时间
BSFCS;片选使能
NOP
NOP
BTFSSD0;判断内部写操作是否完成
GOTO$-1;正在操作,等待完成
BCFCS;片选禁止
NOP
NOP;延时一定时间
RETURN;*********************读数据***********************************
;入口参数:EE_ADDR
;出口参数:TEMP1,TEMP2
;**************************************************************
READ_EE
BSFCS;片选使能
NOP
NOP;延时一定时间
MOVLWB'00000001';发送起始位
CALLSPI_COMM
MOVLWEE_ADDR;发送待读单元地址
IORLWB'10000000';地址加上读命令代码
CALLSPI_COMM
MOVLW00H
CALLSPI_COMM;读取EEPROM中指定单元高8位数据
MOVWFTEMP1;保存到结果存放单元
MOVLW00H
CALLSPI_COMM;读取EEPROM中指定单元低8位数据
MOVWFTEMP2
NOP
BCFCS;片选禁止
NOP
NOP

MOVLW0FH
ANDWFTEMP1,0
MOVWF61H
SWAPFTEMP1,0
ANDLW0FH
MOVWF60H
MOVLW0FH
ANDWFTEMP2,0
MOVWF63H
SWAPFTEMP2,0
ANDLW0FH
MOVWF62H
RETURN
;*****************发送命令/数据和读取数据子程序*************
SPI_COMM
MOVWFSSPBUF;SSPBUF中写入数据,启动发送接收过程
BTFSSPIR1,SSPIF;判断是否发送/接收完成
GOTO$-1;等待完成
BCFPIR1,SSPIF;清除中断标志位
MOVFSSPBUF,W;清空SSPBUF,以便下一次通信
RETURN;子程序返回;**********************延时程序******************************
DELAY10MS
MOVLW 0CH
MOVWF DL1
DELAY2
MOVLW 0FFH
MOVWF DL2
DELAY1
DECFSZDL2,1
GOTODELAY1
DECFSZDL1,1
GOTODELAY2
RETURN
;**********************显示程序******************************
;入口参数:60H-63H
;无
;***********************************************************DISPLAY
MOVFW 60H
CALLTABLE
MOVWF PORTD
BCFPORTA,0
CALLDELAY10MS
BSFPORTA,0MOVFW 61H
CALLTABLE
MOVWF PORTD
BCFPORTA,1
CALLDELAY10MS
BSFPORTA,1MOVFW 62H
CALLTABLE
MOVWF PORTD
BCFPORTA,2
CALLDELAY10MS
BSFPORTA,2MOVFW 63H
CALLTABLE
MOVWF PORTD
BCFPORTA,3
CALLDELAY10MS
BSFPORTA,3
RETURN;********************************************
end;源程序结束

  

爱华网本文地址 » http://www.413yy.cn/a/25101012/116834.html

更多阅读

团支书用英语怎么说写 团支书用英语怎么说

团支书用英语怎么说写?团支书用英语翻译是什么?团支书用英语怎么说?团支书用英语怎么写?团支书用英语怎么说写 League Secretary“我当过班里的团支书,学习委员,和英语协会的副会长” I used to act as the secre

如何提高U盘的读写速度 如何提高磁盘读写速度

如何提高U盘的读写速度——简介为了让U盘速度读写的更快,用户可以在Windows7系统将U盘的读写策略更改“NTFS”格式如何提高U盘的读写速度——工具/原料win7系统如何提高U盘的读写速度——方法/步骤如何提高U盘的读写速度 1、点击桌

机械硬盘的读写速度 机械硬盘和ssd的区别

在网上选购硬盘时,上面都标有惹人眼球的信息,如下图SATA 6Gb/s=6x1024/8=768MB/s,市面上的固态硬盘才500MB/s左右的速度,你觉得机械硬盘可能达到这个速度吗?/修正上面斜体这一部分,关于SATA 6Gb/s这部分指的是硬盘接口的速度,而非硬盘

教学研究:对高中语文读写结合教学的实践与反思

对高中语文读写结合教学的实践与反思黄蔚玲【摘要】读写结合教学模式,是新课程改革的需要,也是高考改革的需要,更是提升学生学习语文能力的需要。本文通过对高中语文教学的现状思考,以及读写结合教学的实践与反思,对如何实现读写

声明:《用PIC16f877A单片机读写93LC46B的汇编程序 pic16f877a rs232 ccs》为网友雪夜圣诞分享!如侵犯到您的合法权益请联系我们删除