KEIL C中出现的问题,在线等!
新手c语言编的一个单片机小程序(程序见下面),在KEIL C中调试的时候老是跑飞:FOR循环运行几十次之后会突然跑到地址为0x0001a后面的语句去执行一次,然后返回到for循环。烧录到单片机执行有问题。
望各位达人给小弟指点一二。在线等。不胜感激!
下面是KEIL C生成的0x000f~0x0001a之间的汇编语句。这段语句在每次链接之后会自动执行。不知道是不是有问题?
......
C:0x000C 120085 LCALL sysset(C:0085)
40: }
C:0x000F 80FB SJMP C:000C
C:0x0011 787F MOV R0,#0x7F
C:0x0013 E4 CLR A
C:0x0014 F6 MOV @R0,A
C:0x0015 D8FD DJNZ R0,C:0014
C:0x0017 758120 MOV SP(0x81),#0x20
C:0x001A 020003 LJMP main(C:0003)
85: void buf_cfg(unsigned char n)
C:0x001D 8F0A MOV 0x0A,R7
86: { ......
C源程序
-------------------------------------------------------------------------------------
#include <reg51.h>
#include <stdio.h>
#include <absacc.h>
#include <string.h>
#define uchar unsigned char;
sbit ts0=P2^0;
sbit ts1=P2^1;
sbit ts2=P2^2;
sbit ts3=P2^3;
sbit ts4=P2^4;
sbit ts5=P2^5;
sbit cs=P1^2;
sbit sw_pc=P1^3;
sbit run=P1^6;
sbit wdog=P1^7;
uchar tsn_sw;
void intial();
void sw_cfg();
void buf_cfg(unsigned char n);
void unfrm();
unsigned char count(bit c4,bit c3,bit c2,bit c1,bit c0);
void sysset();
void main()
{
intial();
if(sw_pc==0)
sw_cfg();
else
{
for(;;)
{
sysset();
}
}
}
void intial()
{
//===================系统初始化====================//
//单片机内部寄存器初始化
IE=0x00; // 屏蔽所有中断
TMOD=0x20; //设置TC1,选择模式1
TH1=0xfd; //设置 TH1,但是我计算的是 FB ??????????
IE=0x98; // 1 0 0 1 1 0 0 0,CUP、SERIAL、TC1中断使能
PCON=0x00; //SMOD=0
TR1=1; //计数器1开始计数
SCON=0x50; //采用串口模式1,接收到RI就置位,串口接收允许,TB8,RB8,RI,TI=0
//7235内部寄存器初始化
cs=0;
XBYTE[0x00]=0xaa; //写保护寄存器置有效
XBYTE[0x01]=0xfe; //采用信令总线模式
XBYTE[0x02]=0x10; //7235控制优先级高、伪随即测试无效、无环回
//不成帧的程序
XBYTE[0x0d]=0x1e;
XBYTE[0x0e]=0xf7;
XBYTE[0x0f]=0x07;
XBYTE[0x10]=0x01;
cs=1;
}
void sw_cfg()
{
if(ts5==0)
{
tsn_sw=count(ts4,ts3,ts2,ts1,ts0);
buf_cfg(tsn_sw);
}
else
unfrm();
}
void buf_cfg(unsigned char n)
{
}
void unfrm()
{}
unsigned char count(bit c4,bit c3,bit c2,bit c1,bit c0)
{
return 0;
}
void sysset()
{
}
void serial() interrupt 4 using 3
{}
谢谢!
发表时间:2005年3月20日15:53:08