导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[goo]神啊,救救我吧。(程序很奇怪的问题,恳求



No.33723
作者:goo
邮件:larnk@netease.com
ID:12895
登陆:3次
文章数:5篇
最后登陆IP:210.14.179.251
最后登陆:2003/6/16 17:49:16
注册:2003/6/9 9:29:15
财富:83
发帖时间:2003/6/9 9:58:34
发贴者IP:210.14.179.251
标题:goo:神啊,救救我吧。(程序很奇怪的问题,恳求高手)
摘要:No.33723神啊,救救我吧。(程序很奇怪的问题,恳求高手) 我学着用Keil C,CPU是AT89C52,写的是一个AD转换。
源码如下:
#--------------------------------------------adc0809.h----------------------------------------
#define XBYTE ((unsigned char volatile xdata *)0x0)
#define AdcAddress  XBYTE[0] //ADC0809编在地址0,用P1.4做片选信号。
                                              //中断用IT1

/*typedef struct
{
 unsigned char ADC_DATA_READY;
 unsigned char CHANNEL;
 unsigned char ADC_DATA; 
}ADC_DATA;*/

unsigned char startadc(unsigned char channel);
void init_adc(void);

#-------------------------------------------adc0809.c------------------------------------------
#include "reg591.h"
#include "adc0809.h"
unsigned char adc_data_ready,adc_data;
void init_adc(void)
{
 adc_data_ready=1;
 IT1=1;//下降延触发。
 T2CON_1=0; //以下用T2产生clock信号给ADC0809.//大约700khz.
 T2CON_2=1;
 T2MOD=0x02;
 RCAP2L=0xfa;
 RCAP2H=0xff;
}

unsigned char startadc(unsigned char channel)
{
 if(adc_data_ready==0) return 0;
 EX1=1;//Enable ADC Interrupt;
 P1_4=0;
 adc_data_ready=0; //ADC工作中
 AdcAddress=channel;
 P1_4=1;
 return 1;
}

void interrupt_read_adc(void) interrupt 2
{
// toggle_red_led(1); 我测试用的,亮个灯而已。
 EX1=0; //Disable ADC Interrupt
 P1_4=0;
 adc_data=AdcAddress;
 P1_4=1;
 adc_data_ready=1; //问题就处在这里啊这里啊。
}

#-----------------------------------------------main.c--------------------------------------------
#include "reg591.h"
#include "adc0809.h"

extern unsigned char adc_data_ready,adc_data;
unsigned int timer1tick;//定时器用的。
unsigned int t1reload;

void init_timer1 (unsigned int  reload)
{
    t1reload = reload;
    timer1tick = 0;
    TR1      =  0;                   /* timer 1: stop */
    TMOD     |= 0x10;                /* mode 1 */
    IP1      |= 2;                   /* priority */
    TH1      =  reload / 256;
    TL1      =  reload % 256;
    TR1      =  1;                   /* timer 1: start */
    ET1      =  1;                   /* enable timer 1 int */
    EA        =  1;
}

void t1isr (void) interrupt 3
{
    TR1 =  0;                   /* timer 1: stop */
    TH1 = t1reload / 256;
    TL1 = t1reload % 256;       /* reload value */
    TR1 =  1;                   /* timer 1: restart */
    timer1tick++;
}

void main(void)
{
                init_adc();
 init_timer1(45535); 
                while(1){
  if (timer1tick>  =100)
  {
        if (startadc(0)){
   timer1tick=0;
   while(adc_data_ready==0);//问题是这里永远都是0,郁闷啊。
                                                //adc_data然后我们就可以处理ADC_DATA了。
                                     }
                                }
               }
}

#-----------------------------------reg591.h-------------------------------------------------------
/* (c) Copyright PHYTEC ELEKTRONIK GmbH.  1999, All rights reserved. */
/* 80591 Processor Declarations */
/* PWM names corrected by ESAcademy, June 2000 */

/*  BYTE Registers  */
sfr P0    = 0x80;
sfr P1    = 0x90;
sfr P2    = 0xA0;
sfr P3    = 0xB0;

sfr PSW   = 0xD0;
sfr ACC   = 0xE0;
sfr B     = 0xF0;
sfr SP    = 0x81;
sfr DPL   = 0x82;
sfr DPH   = 0x83;
sfr PCON  = 0x87;
sfr TCON  = 0x88;
sfr TMOD  = 0x89;
sfr TL0   = 0x8A;
sfr TL1   = 0x8B;
sfr TH0   = 0x8C;
sfr TH1   = 0x8D;
sfr IEN0  = 0xA8;
sfr IEN1  = 0xE8;

sfr IP0   = 0xB8;
sfr IP0H  = 0xB7;
sfr IP1   = 0xF8;
sfr IP1H  = 0xF7;

sfr S0CON = 0x98;
sfr S0BUF = 0x99;
sfr S0ADDR= 0xCB;
sfr S0ADEN= 0xF9;
sfr S0PSL = 0xFA;
sfr S0PSH = 0xFB;

sfr S1CON = 0xD8;
sfr S1ADR = 0xDB;
sfr S1DAT = 0xDA; ......

>>返回讨论的主题



  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:31毫秒 最大:5186毫秒 查询6次