找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4741|回复: 1
收起左侧

请教一个关于单片机系统多参数的存取问题,高手留步!

[复制链接]
ID:24568 发表于 2010-6-18 14:16 | 显示全部楼层 |阅读模式

  这种问题对于做过的朋友来说是相当简单,但是还是请走过路过的高手朋友,耽搁几秒看一下,留个脚印!:)新手在此感谢!


#include< reg51.h> #include< intrins.h> #define uint unsigned int #define uchar unsigned char sbit parameter=P0^4;//if parameter=1;set parameter mode,if parameter=0;finish set parameter uchar team_data[2]={0,0}; uchar i=0; void main() { init(); while(1) { while(!parameter)//按键参数设置 { init_uart();//打开串口 //两个51单片机双机通信 } current(); //显示电流 } } //-----------------------------this is the intrrupt to receive data----------------------- void init_uart(void) { SCON=0X50; TMOD=0x20; TL1=0xfa; TH1=0xfa; PCON=0x00; TR1=1; ES=1; EA=1; } void uart(void) interrupt 4 //这里怎么不用interrupt“0、1、2、3” { if(RI==1) { RI=0; team_data=SBUF; i++; if(i>1) i=0; if(i==0) switch(team_data[0]) { case 0xb1: AAA();break; case 0xa1: BBB();break; case 0xa2: CCC();break; case 0xa3: DDD();break; case 0xa4: EEE();break; case 0xa5: FFF();break; default: ;break; } write_add(0xa0,team_data[0]);//这里的存储是原作者写的,但是我试过了还是存不住。 delay_ms(100); read_add(0xa0); } } 哪位朋友能帮我看看这程序,我要把每一次 switch(team_data[0])的team_data[0]值存起来(放在24C02当中),但是switch每选一个值就发送出去了一次,到最后只能存住一个switch内的参数, 我想过如下分开写: ...... case 0xa1: dis(); write_add(team_data[0]); break; ...... 但还是不行,请指教, 主程序内我想改成如下: void main() { init(); while(1) { if(!parameter)//按键参数设置 { init_uart();//打开串口 //两个51单片机双机通信 } else { read_add();//读出存储参数 } current(); //显示电流 } } 不知这种结构是否存在问题??? ...... 还有几个其它的问题也想问一下: 1,为什么team_data[0]定义为两个零? 2,i++; if(i>1) i=0; if(i==0) 这怎么理解? ......




  以前刚学单片机的时候都是写的己知,且单个数据,最近接触一个大程序有点生硬,我知道这是一个多参数的存储与读取,由于没有做过,在思绪方面太模糊,这件事又很急,一下子又找不到怎么办,才来请教大家,请大家多多指点,多多指点!
......
有时间的朋友帮我写一个参考程序,万分感激!
......
急急急~~~~~~~~~~~~~~~~

回复

使用道具 举报

ID:23004 发表于 2010-6-18 23:20 | 显示全部楼层

void uart(void) interrupt 4    //这里怎么不用interrupt“0、1、2、3”  这个是定义串口中断函数的,当然用4啦!0123分别对应不同的中断或者定时器。
{
   if(RI==1)
{
   RI=0;
   team_data=SBUF;
   i++;
   if(i>1) i=0;
   if(i==0)

uchar team_data[2]={0,0};//这个里面的0是把数组team_data内的每个参数初始化为0的意思

 

i++;
   if(i>1) i=0;
   if(i==0)    //这里的i是用来计数用的,因为你前面定义了一个只有可以存放2个变量的数组team_data,所以在串口接收到的数就分别存到了team_data[0]和team_data[1]中,当i>1的时候,就要把数重新放到team_data[0]中,这就需要把i重新赋值为0。

 

回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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