久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1854|回復: 1
打印 上一主題 下一主題
收起左側

51驅動93c46程序,8位16位通用

[復制鏈接]
跳轉到指定樓層
樓主
ID:309610 發表于 2022-8-12 21:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
自學51中,用到了93c46。網上公布的93c46驅動程序不多,找大神的程序修修改改,希望幫到初學者。

/*/-------------主程序93c46main--舉例--------------------
/*/-------------主程序93c46main----------------------
          cwei(1);           //16位存儲模式
      //  cwei(0);    8位存儲模式
         En_93C46();                       //寫入允許
         EE_93C46();                           //擦除93C46所有數據函數
     for(ia=0;ia<10;ia++)    //從0地址開始寫入10個數據  
       {            
         W93c46Data(ia,datacode16[ia]); //寫93C46(地址,數據)函數
         }
     for(ia=0;ia<10;ia++)
       {  
                num= Read93c46(ia); //讀93C46(地址,數據)函數                   */          
//*****************************************************************/
//=================93c46.h====================
#ifndef  __93C46_H__
#define  __93C46_H__
//extern  org;
// sbit OG=P1^7;//存儲結構選擇
//sbit org=P1^0;
//bit org;
void En_93C46(void);                                                            //寫入允許
void W93c46pc_addr(unsigned char opcode,unsigned char addr);  //合并操作碼和地址寫入
void E_93C46(unsigned char eraseaddr);                                //擦除93C46某地址數據函數
void EE_93C46(void);                                                                 //擦除93C46所有數據函數
void W93c46Data(unsigned char waddr,unsigned int wdata); //寫93C46(地址,數據)函數
unsigned int Read93c46(unsigned int raddr); //讀93C46(地址,數據)函數
void cwei(unsigned char idata ww);           //數據結構設置,0=8位存儲結構,1=16位存儲結構
#endif


//============子程序93c46.c====================
#include <reg52.h>
#include "delay.h"
#include "93c46.h"

sbit CS=P1^7;//片選,高電平有效
sbit SK=P1^6;//時鐘a
sbit DI=P1^5;//數據輸入
sbit DO=P1^4;//數據輸出
  //sbit org=P1^3;
bit  org;                                //extern  org;//存儲結構選擇
#define uchar unsigned char
#define uint unsigned int

unsigned int raddr;

void En_93C46(void);                      //寫入允許
void W93c46pc_addr(uchar opcode,uchar addr);  //合并操作碼和地址寫入
void E_93C46(uchar eraseaddr);//擦除93C46某地址數據函數
void EE_93C46(void);        //擦除93C46所有數據函數
void W93c46Data(uchar waddr,uint wdata); //寫93C46(地址,數據)函數
unsigned int Read93c46 (unsigned int raddr);  //讀93C46(地址,數據)函數       

void cwei(unsigned char idata ww) //數據結構設置,0=8位存儲結構,1=16位存儲結構
        {org=ww;}

//--------------93C46寫使能函數--------------------------------------
void En_93C46(void)  //93C46寫使能函數:          
{           uchar wad=0x60; //8位結構地址碼01100000
   if (org==1)
       wad=0X30;           //16位結構地址碼110000
       CS=1;//選通
    W93c46pc_addr(0x04,wad);//使能寫允許100 ,110000
       CS=0;//選通禁止
}
//----------------------------------------------------------------------

//------------擦除93C46某地址數據函數--------------------------------
void E_93C46(unsigned char eraseaddr)//擦除93C46某地址數據函數
{          
   if(org==1)
       eraseaddr= eraseaddr&0x3f;  //16位結構擦除地址xxxxxx
           CS=1;//選通
   W93c46pc_addr(0x07,eraseaddr);//操作碼1000 ,擦除地址xxxxxxx
       CS=0;//選通禁止
       CS=1;//選通
    while(!DO);//等待擦除完成
        CS=0;
}
//-------------------------------------------------------------------------

//---------------擦除93C46所有數據函數-----------------------------
void EE_93C46(void)        //擦除93C46所有數據函數
{          
     uchar wad=0x40;   //8位結構擦除所有地址碼        1000000
   if (org==1)
       wad=0X20;           //16位結構擦除所有地址碼         100000
       CS=1;//選通
   W93c46pc_addr(0x04,wad);//使能寫允許100 ,110000
       CS=0;//選通禁止
       CS=1;//選通
    while(!DO);//等待擦除完成
        CS=0;
}
//-----------------------------------------------------------------------
//---------------合并操作碼和地址寫入----------------------------------
void W93c46pc_addr(unsigned char opcode,unsigned char addr) //合并操作碼和地址寫入
  {
    unsigned char i;
    unsigned int temp;
    uchar wt=7,wi=10;                     //OG=0表示8位結構  地址7位合成10位操作數
        uint wd=0x0200;
if (org==1)                                        //16
    {
        wt=6;wi=9;wd=0x0100; }       //OG=1表示16位結構 地址6位合成9位操作數  
          temp=opcode;                            //操作碼
    temp=(temp<<wt)|addr;           //把起始位、操作碼和地址合成一個數置入int型數
for(i=0;i<wi;i++)                  
   {                          
                          //注意:93C56/66芯片地址是9位,合并以后是一個12位的int型數據                 
    DI=(temp&wd)?1:0;       //OG=0從int型數據的第10位(0x0200)開始取數                     
    SK=0;//產生時鐘                    //OG=1從int型數據的第9位(0x0100)開始取數
    SK=1;                   //如果是12位數,從int型數據的第11位(0x0800)開始取數
    temp<<=1;//取下一位   
     }
   }

//---------------寫93C46數據函數----------------------------------------
void W93c46Data(unsigned char waddr,unsigned int wdata)        //寫93C46(地址,數據)函數
{
        uchar i, wi=16;                //OG=1  16位結構
                uint  wd=0x8000;        //
if (!org==1)
    {                                            //8位結構
         wi=8; wd=0x80;
         wdata=wdata&0xff;
          }
        CS=1;//選通
     W93c46pc_addr(0x05,waddr);//寫入寫操作碼101和地址
  for(i=0;i<wi;i++)//寫入8位數據
     {
         DI=(wdata&wd)?1:0;//逐位寫入
                 SK=0;//產生時鐘
         SK=1;
         wdata<<=1;//取下一位
       }
        CS=0;//選通禁止
        CS=1;
        while(!DO);//等待寫完
        CS=0;
}
//-------------------------------------------------------------------------
//----------------讀93C46(地址,數據)函數--------------------------------
unsigned int Read93c46(unsigned int raddr)  //讀93C46(地址,數據)函數
{
       uchar i, wi=8;                //OG=1  16位結構
           uint rdata=0;
if (org==1)
       {wi=16; }                                    //8位結構                  
        CS=1;
        W93c46pc_addr(0x06,raddr);//寫入寫操作碼110和地址
for(i=0;i<wi;i++)//讀取8/16位數據
     {
                   SK=0;//
        SK=1;   
                   rdata<<=1;//存下一位
  if(DO==1)rdata|=0x01;//逐位讀取數據并處理
  else rdata&=(~0x01);
        }

        CS=0;//選通禁止
if (!org==1)
       rdata=rdata&0x00ff;
        return rdata;
}
//--------------------------------------------------------------------------------------


評分

參與人數 2黑幣 +45 收起 理由
wpppmlah + 15 共享資料的黑幣獎勵!
崇慶陽光 + 30 贊一個!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:907675 發表于 2022-8-13 07:52 | 只看該作者
支持共享。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩高清国产一区在线 | 一本大道久久a久久精二百 国产成人免费在线 | 久久久91| 在线观看欧美一区 | 成人精品鲁一区一区二区 | 丝袜一区二区三区 | 日本欧美在线观看视频 | 日日天天 | 中文字幕成人 | 成人深夜福利 | 国产精品久久久久国产a级 欧美日韩国产免费 | 韩国av电影网 | 国产精品美女视频 | 天堂一区 | 五月天国产| 欧美精品1区2区3区 精品国产欧美一区二区 | 老司机狠狠爱 | 四色永久 | 亚洲天堂中文字幕 | 黄色一级大片视频 | 色爱av| 97国产精品视频人人做人人爱 | 一区二区高清 | 久久久久亚洲 | 国产亚洲精品区 | 夜夜爽99久久国产综合精品女不卡 | 日韩中文字幕一区二区 | 亚洲色综合 | 国产免费看 | 一区二区三区国产精品 | 亚洲精品成人 | av一二三区 | 久久久久久久久久久爱 | 精品综合久久 | 久色网| 亚洲国产精品久久久久秋霞不卡 | 视频三区 | 日日爽 | 久久久久久久久久久久91 | 亚洲欧美在线视频 | 日韩精品在线播放 |