单片机c语言编程的问题?

kill000000 2004-04-29 11:34:35
#include<absacc.h>
#include<reg51.h>
#include<intrins.h>
#define OUT1 XBYTE[0x8100]

unsigned char i;
unsigned char a[22],b[22];
unsigned char j;
bit flag;
void initiate()
{ i=0;
a=[0xa5,0x05,0x5f,0x50,0xf5,0x05,0xf5,0x05,0xf5,0x05,0xf5,0x5a,0x50,0x5f,0x50,0x5f,0x50,0x5f,0x50,0x5f,0x50,0x5f];
b=[200,10,10,10,10,10,10,10,10,10,10,200,10,10,10,10,10,10,10,10,10,10];
j=b[0];
OUT1=a[0];
TMOD=0x11;
TH0=0x76;
TL0=0;
IE=0x82;
TR0=1;
flag=1;
}
void main()
{
bit data flag;
void initiate();
while(flag){};
}
void int_1(void) interrupt 1 using 3
{
EA=0;
TF0=0;
TMOD=0x11;
TH0=0x76;
TL0=0;
TR0=1;
if(!j--)
{
i++;
j=b[i];
OUT1=a[i];
}
EA=1;
}
...全文
20 7 点赞 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
seawave03 2004-05-03
看j的初值,j=b[0]=200,而数组a的下标只能到21啊!当然越界了!
  • 打赏
  • 举报
回复
seawave03 2004-04-30
i,j是两个函数的变量,若定义为局部变量必须在两个函数中都定义!
数组的操作与标准c语言无多大差别!
  • 打赏
  • 举报
回复
fufu89 2004-04-30
a=[0xa5,0x05,0x5f,0x50,0xf5,0x05,0xf5,0x05,0xf5,0x05,0xf5,0x5a,0x50,0x5f,0x50,0x5f,0x50,0x5f,0x50,0x5f,0x50,0x5f];
有这么给数组赋值的吗?不对。
  • 打赏
  • 举报
回复
tjjack 2004-04-30
那肯定不对了!如果你要在void int_1(void)函数中用i,j。那么你的给他把这两个值传过来。如果你不想传的话,你只能把他们定义成全局变量了。
  • 打赏
  • 举报
回复
kill000000 2004-04-30
if(!j--)
{
i++;
j=b[i];
OUT1=a[i];
}
程序总是报错,程序i++可能越界,应该还要加一个条件才行

OUT1=a[i];
这个语句应该没问题吧,为什么这里也有错误呢?
  • 打赏
  • 举报
回复
kill000000 2004-04-30
不是
我是用的a={0xa5,0x05,0x5f,0x50,0xf5,0x05,0xf5,0x05,0xf5,0x05,0xf5,0x5a,0x50,0x5f,0x50,0x5f,0x50,0x5f,0x50,0x5f,0x50,0x5f};
被我同学该成这样了我没改过来
  • 打赏
  • 举报
回复
kill000000 2004-04-29
i,j为什么非要定义成全局变量,否则void int_1(void)会说ij未定义?
还有数组究竟应该怎么定义,怎么赋初值,是不是非要用指针实现?
按道理程序应该没有什么问题的啊 !!!!!!!!!!!!11
  • 打赏
  • 举报
回复
相关推荐
发帖
单片机/工控
加入

2.6w+

社区成员

硬件/嵌入开发 单片机/工控
申请成为版主
帖子事件
创建了帖子
2004-04-29 11:34
社区公告
暂无公告