代码工程与芯片pdf资料:
实现本功能的中颖单片机源码如下:
- /*************************************************************************************************
- 说明;SPI使用EEPROM存储芯片93C56A,256X8bit=2K的存储空间.在使用SPI通讯时通常使用端口进行仿真,为了符合
- 使用需要,本程序同样使用了端口进行仿真,当然也可以直接使用88F516自带的SPI总线进行通讯.
- 串口1用于观测93C56A的读写数据正确与否?写入成功接收到数据R,写入失败接收到数据E,读取成功接收到数据r,
- 读取失败接收到数据e.
- 要求:打开拨码开关J6的5,6,7,8,打开拨码开关J4
- *************************************************************************************************/
- #include <sh88f516.h>
- #include <INTRINS.H> //for use 51 instruction
- sbit cs_93=P1^4;
- sbit di_93=P1^5;
- sbit do_93=P1^6;
- sbit sk_93=P1^7;
- void UART1SendChar(unsigned char value)
- {
- IEN1 &= 0xFB; //ES1=0;
- SBUF1=value; //写SBUF1,激活发送
- while(TI1==0); //等待转换结束
- TI1=0; //清除发送标志位
- IEN1 = 0x04; //ES1=1;
- }
- /*-----------------------------------------------------
- SPI93cXX系列函数调用
- void high56(void)--------发送1
- void low56(void) --------发送0
- void wd56(unsigned char dd) --------写8位数据,输入参数address or data
- unsigned char rd56(void) --------读8位数据,返回值data
- -----------------------------------------------------*/
- void high56(void)
- {
- di_93=1;
- sk_93=1; _nop_();
- sk_93=0; _nop_();
- }
- void low56(void)
- {
- di_93=0;
- sk_93=1;_nop_();
- sk_93=0;_nop_();
- }
- void wd56(unsigned char dd)
- {
- unsigned char i;
- for (i=0;i<8;i++)
- {
- if (dd>=0x80) high56();
- else low56();
- dd=dd<<1;
- }
- }
- unsigned char rd56(void)
- {
- unsigned char i,dd=0;
- do_93=1;
- for (i=0;i<8;i++)
- {
- dd<<=1;
- sk_93=1;_nop_();
- sk_93=0;_nop_();
- if (do_93) dd|=1;
- }
- return(dd);
- }
- /*-----------------------------------------------------
- SPI93c56系列函数调用
- void ewen56(void)-----------写使能
- unsigned char read93c56_word(unsigned char address) ------------SPI读函数,输入参数为address,返回dat
- bit write93c56_word(unsigned char address,unsigned char dat)----SPI写函数,输入参数为address,dat,写入成功返回0,失败返回1
- -----------------------------------------------------*/
- void ewen56(void)
- {
- _nop_();
- cs_93=1;
- high56();
- low56();
- low56();
- //low56();
- high56();//add
- wd56(0xc0);
- //wd56(0x00);
- cs_93=0;
- }
- unsigned char read93c56_word(unsigned char address)
- {
- unsigned char dat;
- cs_93=sk_93=0;
- cs_93=1;
- high56(); //1 --start
- high56(); //1
- low56(); //0 --10 read
- low56(); //X --A8,
- wd56(address); //A7--A0
- dat=rd56(); //data
- cs_93=0;
- return(dat);
- }
- bit write93c56_word(unsigned char address,unsigned char dat)
- {
- unsigned char e;
- unsigned char temp=address;
- e=0;
- while (e<3)
- {
- cs_93=sk_93=0;
- cs_93=1;
- ewen56();
- _nop_();
- cs_93=1;
- _nop_();
- high56(); //1 --start
- low56(); //0
- high56(); //1 --01 write
- low56(); //X --A8,
- wd56(address); //A7--A0
- wd56(dat); //data
- cs_93=0;
- _nop_();
- cs_93=1;
- do_93=1;
- while (1)
- {
- if (do_93==1) break;
- }
- cs_93=0;
- if (read93c56_word(temp)==dat)
- {
- return(0);
- }
- e++;
- }
- return(1);
- }
- main()
- {
- unsigned char i;
- CLKCON = 0x60; //f=osc/12
- SCON1 = 0x50; //工作方式选择,此处为工作方式1
- SBRT1 = 0xFF; //波特率设置.工作在方式1时,BAUDRATE=(1/16)*Fsys/(32768-SBRT[1:0]) Fsys=16M
- SBRT0 = 0xF7; //Fsys=16M/12
- IEN1 = 0x04;
- EA = 1;
- for(i=0;i<200;i++)
- {
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
压缩包里面包含有中颖单片机sh88f516常用功能的源码,中文注释都很详细
下载地址:http://www.51hei.com/bbs/dpj-98300-1.html
|