代碼工程與芯片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.zg4o1577.cn/bbs/dpj-98300-1.html
|