找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 520|回复: 5
打印 上一主题 下一主题
收起左侧

compiling 温度.c... 温度.C(75): error C202: 'ADC_CONTR': undefined identifier...

[复制链接]
跳转到指定楼层
楼主
ID:1080551 发表于 2023-5-28 23:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <REG51.H>




#define TXD_Pin P3_1       //定义TXD引脚为P3.1
#define BAUDRATE 9600      //定义波特率
#define FREQ_OSC 11059200  //定义外部晶振频率
#define TH 40              //定义温度阈值


void send_data(unsigned char dat);
void send_string(unsigned char *s);
void init_uart();
void init_adc();
int get_adc_value();
void delay(int time);
void display_temp(int temp);


void main()
{
    unsigned int adc_val = 0;
    int temp = 0;


    init_uart();   //初始化串口
    init_adc();    //初始化ADC


    while(1)
    {
        adc_val = get_adc_value();   //读取ADC值
        temp = (int)(adc_val / 2);   //将ADC值转换为温度(假设为50mV/℃)


        if(temp >= TH)   //如果温度超过阈值,则LED闪烁
        {
            display_temp(temp);
            delay(500);
        }
        else   //否则,LED显示当前温度
        {
            display_temp(temp);
        }
    }
}


void init_uart()
{
    //计算波特率预分频器的值
    unsigned char SCON_value = 0x50;       //定义串口控制寄存器的初始值
    unsigned int Baud_value = 0x10000 - (FREQ_OSC / (16 * BAUDRATE));


    //配置串口
    SCON = SCON_value;
    TMOD &= 0x0F;
    TMOD |= 0x20;                     //使用timer1作为波特率发生器,允许8位自动重载
    TH1 = (unsigned char)(Baud_value / 256);  //设置波特率预分频器的高8位
    TL1 = (unsigned char)Baud_value;         //设置波特率预分频器的低8位
    TR1 = 1;                        //启动timer1
}


void send_data(unsigned char dat)
{
    SBUF = dat;
    while(!TI);
    TI = 0;
}


void send_string(unsigned char *s)
{
    while(*s)
    {
        send_data(*s++);
    }
}


void init_adc()
{
    EA = 1;                       //使能全局中断
    ADC_CONTR = 0x80;             //设置ADC时钟源为系统时钟、ADC启动、ADC自动重载模式
}


int get_adc_value()
{
    ADC_CONTR |= 0x08;            //启动ADC转换
    while(!(ADC_CONTR & 0x10));   //等待ADC转换完成
    return ADC_RES * 256 + ADC_RESL;  //返回ADC转换结果
}


void delay(int time)
{
    int i, j;
    for (i = time; i > 0; i--)
    {
        for (j = 10; j > 0; j--);
    }
}


void display_temp(int temp)
{
    static unsigned char code digit_table[] = { //数码管显示表(0~9,A~F)
          0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90,
          0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e};


    int i;
    unsigned char dat[4] = {0, 0, 0, 0};   //定义一个数组,用于存放各个位的显示值


    dat[0] = digit_table[temp % 10];       //个位
    dat[1] = digit_table[(temp / 10) % 10];//十位
    dat[2] = digit_table[(temp / 100) % 10];//百位
    dat[3] = digit_table[temp / 1000];     //千位


    //依次点亮每个数码管,显示温度数值
    for(i = 0; i < 4; i++)
    {
        P2 = 1 << i;
        P0 = dat;
        delay(1);
    }
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1080551 发表于 2023-5-28 23:19 | 只看该作者
大神帮忙解决一下compiling 温度.c...
温度.C(75): error C202: 'ADC_CONTR': undefined identifier
温度.C(80): error C202: 'ADC_CONTR': undefined identifier
温度.C(81): error C202: 'ADC_CONTR': undefined identifier
温度.C(82): error C202: 'ADC_RES': undefined identifier
温度.c - 4 Error(s), 0 Warning(s). 这个问题
回复

使用道具 举报

板凳
ID:277531 发表于 2023-5-29 06:27 | 只看该作者
undefined identifier==未定义字符
回复

使用道具 举报

地板
ID:213173 发表于 2023-5-29 07:17 | 只看该作者
1538256872 发表于 2023-5-28 23:19
大神帮忙解决一下compiling 温度.c...
温度.C(75): error C202: 'ADC_CONTR': undefined identifier
温度 ...

//宏定义ADC的操作命令
#define ADC_POWER   0x80                        //ADC power control dit (宏定义ADC电源控制位)1000 0000
#define ADC_START   0x08                        //ADC start control dit (宏定义ADC启动控制位)0000 1000
#define ADC_FLAG    0x10                        //ADC complete flag (宏定义ADC完成标志位)    0001 0000
#define ADC_SPEEDLL 0x00                        //420 clocks (宏定义420时钟)速度控制         0000 0000
回复

使用道具 举报

5#
ID:213173 发表于 2023-5-29 07:23 | 只看该作者
1538256872 发表于 2023-5-28 23:19
大神帮忙解决一下compiling 温度.c...
温度.C(75): error C202: 'ADC_CONTR': undefined identifier
温度 ...

sfr  AUXR       =   0x8e;       //辅助寄存器                              

sfr ADC_CONTR   =   0xBC;           //ADC控制寄存器
sfr ADC_RES     =   0xBD;           //ADC高8位结果
sfr ADC_RESL    =   0xBE;           //ADC低2位结果
sfr P1ASF       =   0x9D;           //P1口第2功能控制寄存器

#define ADC_POWER   0x80            //ADC电源控制位
#define ADC_FLAG    0x10            //ADC完成标志
#define ADC_START   0x08            //ADC起始控制位
#define ADC_SPEEDLL 0x00            //540个时钟
#define ADC_SPEEDL  0x20            //360个时钟
#define ADC_SPEEDH  0x40            //180个时钟
#define ADC_SPEEDHH 0x60            //90个时钟
回复

使用道具 举报

6#
ID:123289 发表于 2023-5-29 09:51 | 只看该作者
学会自己解决问题。
查芯片手册,就会知道'ADC_??应该是什么值了。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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