导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→KEIL C中出现的问题,在线等![guest]

 *第30442篇: KEIL C中出现的问题,在线等!

  
楼 主:guest 2005年3月20日15:53
 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
{}

谢谢!

  
2楼:哈佛 2005年3月21日22:48
 是不是执行中断指令了??
  
3楼:guest 2005年3月23日15:01
 Re:
为什么要开TC1的中断使能啊?如果使用TC1为串口波特率发生器,好象不要开中断的;要是TC1要中断,中断函数没定义吧?

>>>>>>对该主题发表你的看法

本主题贴数3,分页: [第1页]


[上一篇主题]:求教????

[下一篇主题]:DS12887 [求助]