找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

Flux电机有限元分析教程西莫团购入口 | 奖励入口当当网购物入口 | 奖励入口欢迎使用!西莫论坛App开放下载Motor-CAD电机多物理域设计教材购买入口 | 奖励入口
★新会员论坛须知★《西莫电机技术》第39期发售火热进行中Flux电机电磁阀有限元分析教程团购入口 | 奖励入口论坛微信公众平台欢迎入驻
西莫电机及相关产品供需交流群开放邀请★ 论坛VIP会员申请 ★Motor-CAD.MANATEE电磁热振动噪声教程 | 奖励入口西莫团队欢迎您的加盟!
宣传推广合作请联系QQ:25941174西莫电机论坛微信群正式开放Flux变压器与电抗器有限元分析团购入口 | 奖励入口西莫电机论坛技术版区QQ群汇总
查看: 2615|回复: 3

[原创] 93c46源程序

[复制链接]

该用户从未签到

发表于 2009-10-27 16:37 | 显示全部楼层 |阅读模式 来自: 中国江苏镇江

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
1:
     2: /***************************************************************************
     3: * 文件名:93c46.c
     4: * 功  能:SPI总线以及9346EEPROM的读写
     5: * 作  者:TXMCU
     6: * 日  期:
     7: * 备  注:
     8:         //软件思路:
     9:         // KEY0键按下时把0x32和0x36写入到EEPROM中以EE—ADDR为地址的单元内,
    10:         //完成后,单个数码观显示“0”做为完成标志
    11:         //KEY1键按下时,读取EEPROM中以EE—ADDR为地址的单元,并送数码管显示         
    12:         //开发板连接方法:将JP10 JP11 JP12 JP13这4个跳线帽分别接到93c46位置
    13:         //                                      把JP8的的跳线帽跳到DPY位置上,JP14选择在IO口位置上
    14:         //注意:                        atmel93c46      JP9跳转到16位端
    15: ****************************************************************************/
    16: #include<pic.h>
    17: __CONFIG(0x1832);
    18: //芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡
    19:
    20: #define   c_s      RC2
    21: #define   d0       RC4
    22: #define   ee_addr  0x5
    23: #define   nop() asm("nop")
    24:
    25: const char ee_data_write[] = {0x32, 0x36};
    26: unsigned char ee_date[4];
    27: const unsigned char table[] = {0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f};
    28:
    29: unsigned int temp;
    30:
    31: void init();
    32: void ee_write();
    33: void ee_read();
    34: void display();
    35: void delay();
    36: void ee_write_enable();
    37: void spi_comm(unsigned char x);
    38:
    39: void main()
    40: {
    41:         int flag=100;
    42:         init();
    43: //      ee_write();
    44: //      ee_read();
    45:         while (1)
    46:         {
    47:                 if (!RB0)
    48:                 {
    49:                         ee_write();//write();//先写后读
    50:                         flag=1; //写完标志
    51:                 }
    52:                 if (!RB1)   //读按钮被按下
    53:                 {
    54:                         ee_read();//read();
    55:                         ee_read();
    56:                         flag=0;  //写标志清零,
    57:                 }
    58:                 if(flag==1)             //如果写完
    59:                 {
    60:                         PORTD = table[0];                       //送D口显示0
    61:                         PORTA = 0x01;                           //点亮第一个位
    62:                         delay();                                        //延长一段时间,保证亮度
    63:                 }
    64:                 if(flag==0)             //如果读数完毕
    65:                 {
    66:                         display();  //显示读出的数据
    67:                 }
    68:                 
    69:         }
    70: }
    71:
    72: /****************************************************************************
    73: * 名    称:init()
    74: * 功    能:引脚初始化
    75: * 入口参数:
    76: * 出口参数:
    77: * 说    明:
    78: ****************************************************************************/
    79: void init()
    80: {
    81:         ADCON1 = 0X07;
    82:         TRISA = 0X00;
    83:         RA4=0;
    84:         TRISB = 0X03;
    85:         TRISC = 0X10;
    86:         TRISD = 0X00;
    87:         PORTD = 0XFF;
    88:         SSPSTAT = 0X80;
    89:         SSPCON = 0X32;//Fosc/64
    90:         INTCON = 0X00;
    91:         PIR1 = 0X00;
    92:         c_s = 0;
    93: }
    94:
    95: /****************************************************************************
    96: * 名    称:write()
    97: * 功    能:将写缓冲区的数据写到93c46中
    98: * 入口参数:
    99: * 出口参数:
   100: * 说    明:
   101: ****************************************************************************/
   102: void ee_write()
   103: {
   104:         int i, j;
   105:         ee_write_enable();                      //写使能
   106:         c_s = 1;                                        //选中
   107:         spi_comm(0x1);                          //以下两条发送写地址
   108:         spi_comm(ee_addr | 0x40);   
   109:         for (i = 0;i < 2;i++)           //写入两个字节数据
   110:         {
   111:                 j = ee_data_write[i];
   112:                 spi_comm(j);
   113:         }
   114:         c_s = 0;
   115:         nop();
   116:         nop();
   117:         c_s = 1;
   118:         nop();
   119:         nop();
   120:         while (!d0);            
   121:         c_s = 0;
   122:         nop();
   123:         nop();
   124:         PORTD = 0Xff;
   125:         PORTA = 0Xff;
   126: }
   127:
   128: /****************************************************************************
   129: * 名    称: ee_read()
   130: * 功    能:把存储器某地址的数据读到缓冲区
   131: * 入口参数:
   132: * 出口参数:
   133: * 说    明:
   134: ****************************************************************************/
   135: void ee_read()
   136: {
   137:         int i;
   138:         c_s = 1;
   139:         nop();
   140:         nop();
   141:         spi_comm(0x01);                         //发送要读的地址
   142:         spi_comm(ee_addr | 0x80);
   143:         for (i = 0;i < 2;i++)           //读两个字节到缓冲区
   144:         {
   145:                 spi_comm(0);
   146:                 ee_date[i] = temp;
   147:         }
   148:         nop();
   149:         c_s = 0;
   150:         nop();
   151: }
   152:
   153: /****************************************************************************
   154: * 名    称:ee_write_enable()
   155: * 功    能:eeprom写诗能使能
   156: * 入口参数:
   157: * 出口参数:
   158: * 说    明:
   159: ****************************************************************************/
   160: void ee_write_enable()
   161: {
   162:         c_s = 1;                //选中存储器
   163:         spi_comm(0x01); //发送写命令
   164:         spi_comm(0x30);
   165:         c_s = 0;                        
   166:         nop();
   167:         nop();
   168: }
   169:
   170: /****************************************************************************
   171: * 名    称:spi_comm()
   172: * 功    能:spi总线上发送一个字节的数据
   173: * 入口参数:unsigned char x 待发送的数据
   174: * 出口参数:
   175: * 说    明:
   176: ****************************************************************************/
   177: void spi_comm(unsigned char x)
   178: {
   179:         SSPBUF = x;                     //写入数据
   180:         while (!SSPIF);         //等待发送完毕
   181:         SSPIF = 0;                      //清楚标志位
   182:         temp = SSPBUF;          //数据发送以后SSPBUF中的数据是接收到的,请看数据手册
   183: }
   184:
   185: /****************************************************************************
   186: * 名    称:display()
   187: * 功    能:数码管显示
   188: * 入口参数:
   189: * 出口参数:
   190: * 说    明:
   191: ****************************************************************************/
   192: void display()
   193: {
   194:         int i;
   195:         i = ee_date[0] & 0xf0;  //取出数据
   196:         i = i >> 4;                             //取出低位
   197:         PORTD = table[i];               //送D口显示
   198:         PORTA = 0x01;                   //点亮第一个位
   199:         delay();                                //延长一段时间,保证亮度
   200:                                                         //以下注释原理同上
   201:                                 
   202:         i = ee_date[0] & 0x0f;
   203:         PORTD = table[i];
   204:         PORTA = 0x02;
   205:         delay();
   206:
   207:         i = ee_date[1] & 0xf0;
   208:         i = i >> 4;
   209:         PORTD = table[i];
   210:         PORTA = 0x04;
   211:         delay();
   212:         i = ee_date[1] & 0x0f;
   213:         PORTD = table[i];
   214:         PORTA = 0x08;
   215:         delay();
   216: }
   217:
   218: /****************************************************************************
   219: * 名    称:delay()   
   220: * 功    能:延时
   221: * 入口参数:
   222: * 出口参数:
   223: * 说    明:
   224: ****************************************************************************/
   225: void delay()
   226: {
   227:         int i;
   228:         for (i = 100;i > 0;i--);
   229: }

评分

参与人数 1西莫币 +4 收起 理由
eecomes + 4 谢谢分享

查看全部评分

西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
头像被屏蔽

该用户从未签到

发表于 2009-10-27 19:35 | 显示全部楼层 来自: 中国湖南长沙
支持楼主分享程序
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2010-1-21 12:37 | 显示全部楼层 来自: 中国辽宁营口
看不太懂 不过慢慢研究研究
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

签到天数: 41 天

连续签到: 2 天

[LV.5]常住居民I

发表于 2014-7-24 16:20 | 显示全部楼层 来自: 中国广东东莞
给简单讲解一下怎么用,谢谢!!
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

西莫电机论坛微信公众平台欢迎您的关注!

QQ|Archiver|手机版|小黑屋|西莫电机圈 ( 浙ICP备10025899号-3|浙公网安备:33028202000436号 )

GMT+8, 2025-1-22 18:46 , Processed in 0.077356 second(s), 30 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表