找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC8G单片机adc发送串口报错这里怎么写?

[复制链接]
跳转到指定楼层
楼主
/*************  功能说明    **************
程序适用:STC8G全系列和STC8H全系列
选择晶振:内部11.0592MH
复位电路:内部复位
参考电压:VCC

功能:3通到AD采集功能,P1.2、P1.3、P1.4为输入脚(开发板上排针为RT、30,31脚)
      通过杜邦线把RT连接开发板AD脚进行电位器进行电压变化
          30,31可以接外部0到5V电压输入。 接GND,VCC,3V,做测试

******************************************/

#include "STC8G.H"
#include "system.h"
#include "STC8G_10AD.h"
#include "USART.h"
typedef unsigned int WORD;           //延时函数

#define ADCTIM  (*(unsigned char volatile xdata *)0xfea8)
#define A P11

#define     MAIN_Fosc       11059200UL  //定义主时钟
#define Timer0_Reload   (MAIN_Fosc / 1000)      //Timer 0 中断频率, 1000次/秒

//unsigned int GetADCResult(unsigned char channel);

u8 t0_ct;                                  //延时函数
u8 Vdat1,channel;
unsigned int adc_temp;         //延时函数标记使用
unsigned int temp_ad;

bit AD_change_bit;

//u8 data lcd_buff_1[16];
//u8 data lcd_buff_2[16];

void IO_init_config(void);
void display_buff(void);

//========================================================================
// 函数: void timer0_int (void) interrupt TIMER0_VECTOR
// 描述:  timer0中断函数.
//========================================================================
void timer0_int (void) interrupt 1
{
        if(++t0_ct >= 100)  //0.1S           延时可调
        {
                t0_ct = 0;                   //延时函数
                AD_change_bit = 1;
        }
}

void    Timer0_init(void)
{
        TR0 = 0;    //停止计数
        ET0 = 1;    //允许中断
    //  PT0 = 1;    //高优先级中断
        TMOD &= ~0x03;
        TMOD |= 0;  //工作模式, 0: 16位自动重装, 1: 16位定时/计数, 2: 8位自动重装, 3: 16位自动重装, 不可屏蔽中断
    //  TMOD |=  0x04;  //对外计数或分频
        TMOD &= ~0x04;  //定时
    //  INTCLKO |=  0x01;  //输出时钟
        INTCLKO &= ~0x01;  //不输出时钟

//        AUXR |=  0x80;  //1T mode
//        TH0 = (u8)((65536UL - Timer0_Reload) / 256);
//        TL0 = (u8)((65536UL - Timer0_Reload) % 256);

        AUXR &= ~0x80;  //12T mode
        TH0 = (u8)((65536UL - Timer0_Reload/12) / 256);
        TL0 = (u8)((65536UL - Timer0_Reload/12) % 256);
        TR0 = 1;    //开始运行
                EA = 1;
}

void main()
{
        unsigned int res=0;
        unsigned char result[4]={0}; //unsigned char result[4]={0};
//        unsigned int temp;        //全局变量

    P1M1 = 0x01;   
        P1M0 = 0x00;;   //P1设置为准双向口


        InitSerialPort();                 //初始化串口,波特率9600,8bit数据位,1停止位,无校验
        IO_init_config();
        Timer0_init();
        STC8G_ADC_Iint();                           //STC8G系列10位AD初始化函数
        P_SW2 |= 0x80;                        //打开          外设端口切换寄存器
    P_SW2 &= 0x7f;                        //关闭          外设端口切换寄存器
    ADCTIM = 0x3f;                      //设置ADC内部时序
    ADCCFG = 0x0f;                      //设置ADC时钟为系统时钟/2/16
         
        while(1)
        {



                if(AD_change_bit) //0.1S改变显示一次
                {
                SendByte('\t');                                  //发送数据采集结果
                SendString("AD_Value = ");          //发送数据采集结果
        //        SendByte(HEX2ASCII(disbuff[0]));
            GetADC10bitResult_Char(channel,result);
        SendByte(channel);   
                SendByte(result);
                SendByte('\n');                                   //发送数据采集结果




                        AD_change_bit = 0;
                        ADC_CONTR = 0x80; //打开ADC电源
                        temp_ad = Get_ext_Vx(1);
                        GetADC10bitResult( channel);   //读取ADC结果
                        ADC_CONTR|=0x01;               // 设定转换的通道,P3.3是0011
            ADC_CONTR|=0x40;               // 开始AD转换,即ADC_START=1
                        temp_ad =ADC_RES;                          //读取转换结果
                        temp_ad=temp_ad<<2;            //左移2位
                temp_ad=temp_ad|ADC_RESL;          //读取ADC_FLAG保存软件
                       adc_temp=temp_ad;                          //adc加载寄存器数据

//                        display_buff();
//                        for(k=11;k<16;k++)
//                        {
//                                LCD_Write_Char(k,0,lcd_buff_1[k]); //显示通道2--P1.2
//                        }
                  
                   if(temp_ad>10)         //ADC采集电压范围 210=1V
                  {
                  P55=0;
                  }
                  else                  //表示如果满足if条件则不执行else,否则执行else
                  {         
                  P55=1;
                  }


                }
        }
}

//void display_buff(void)
//{        
//        lcd_buff_1[11] = (temp_ad/1000)+0x30;         //通到2
//        lcd_buff_1[12] = '.';
//        lcd_buff_1[13] = (temp_ad%1000/100)+0x30;
//        lcd_buff_1[14] = (temp_ad%1000%100/10)+0x30;
//        lcd_buff_1[15] = (temp_ad%1000%100%10)+0x30;
//
//}

/*****************
STC8系列任何型号必须初始化配置IO口模式,
其它IO口的功能设置,可以不用初始化。
原因:上电除了P3.1和P3.0为准双向IO口模式外,其它为高阻输入模式
*************/
void IO_init_config(void)
{        //PxM1和PxM0必须要初始化配置,不然IO口不能正常输入输出
        A=0;
    P0M1 = 0x00;   
        P0M0 = 0x00;;   //P0设置为准双向口

    P1M1 = 0x00;   
        P1M0 = 0x00;;   //P1设置为准双向口

    P2M1 = 0x00;   
        P2M0 = 0x00;;   //P2设置为准双向口

    P3M1 = 0x00;   
        P3M0 = 0x00;;   //P3设置为准双向口

    P4M1 = 0x00;   
        P4M0 = 0x00;;   //P4设置为准双向口

    P5M1 = 0x00;   
        P5M0 = 0x00;;   //P5设置为准双向口

//        P0PU = 0x00;        //0禁内部上拉4.1K电阻,1打开内部上拉4.1K电阻
//        P1PU = 0x00;        //0禁内部上拉4.1K电阻,1打开内部上拉4.1K电阻
//        P2PU = 0x00;        //0禁内部上拉4.1K电阻,1打开内部上拉4.1K电阻
//        P3PU = 0x00;        //0禁内部上拉4.1K电阻,1打开内部上拉4.1K电阻
//        P4PU = 0x00;        //0禁内部上拉4.1K电阻,1打开内部上拉4.1K电阻
//        P5PU = 0x00;        //0禁内部上拉4.1K电阻,1打开内部上拉4.1K电阻
//
//        P0NCS = 0x00;   //0使能施密特触发功能,1禁止施密特触发功能
//        P1NCS = 0x00;   //0使能施密特触发功能,1禁止施密特触发功能
//        P2NCS = 0x00;   //0使能施密特触发功能,1禁止施密特触发功能
//        P3NCS = 0x00;   //0使能施密特触发功能,1禁止施密特触发功能
//        P4NCS = 0x00;   //0使能施密特触发功能,1禁止施密特触发功能
//        P5NCS = 0x00;   //0使能施密特触发功能,1禁止施密特触发功能
//
//        P0SR  = 0xff;        //0电平转换速度快,1电平转换速度慢
//        P1SR  = 0xff;        //0电平转换速度快,1电平转换速度慢
//        P2SR  = 0xff;        //0电平转换速度快,1电平转换速度慢
//        P3SR  = 0xff;        //0电平转换速度快,1电平转换速度慢
//        P4SR  = 0xff;        //0电平转换速度快,1电平转换速度慢
//        P5SR  = 0xff;        //0电平转换速度快,1电平转换速度慢
//
//        P0DR  = 0xff;   //0增强驱动能力,1一般驱动能力
//        P1DR  = 0xff;   //0增强驱动能力,1一般驱动能力
//        P2DR  = 0xff;   //0增强驱动能力,1一般驱动能力
//        P3DR  = 0xff;   //0增强驱动能力,1一般驱动能力
//        P4DR  = 0xff;   //0增强驱动能力,1一般驱动能力
//        P5DR  = 0xff;   //0增强驱动能力,1一般驱动能力
//
//        P0IE  = 0xff;        //0禁止数字信号输入,1使能数字信号输入
//        P1IE  = 0xff;        //0禁止数字信号输入,1使能数字信号输入
//        P3IE  = 0xff;        //0禁止数字信号输入,1使能数字信号输入
}


51hei图片_20221008104624.jpg (84.34 KB, 下载次数: 9)

51hei图片_20221008104624.jpg

STC8ADC.rar

85.3 KB, 下载次数: 8

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

使用道具 举报

沙发
ID:1034262 发表于 2022-10-9 12:17 | 只看该作者
建议先测试STC官方历程。
回复

使用道具 举报

板凳
ID:290373 发表于 2022-10-9 13:19 | 只看该作者
你的程序里面没这个GetADC10bitResult_Char函数
回复

使用道具 举报

地板
ID:936755 发表于 2022-10-12 18:41 | 只看该作者
田贺 发表于 2022-10-9 13:19
你的程序里面没这个GetADC10bitResult_Char函数

加了还是别的报错,可以帮我看看怎么可以运行?
回复

使用道具 举报

5#
ID:384109 发表于 2022-10-12 21:39 | 只看该作者
最好把错误提示发上来吧,另外result是数组,sendbyte只是发送一个字节吧
回复

使用道具 举报

6#
ID:936755 发表于 2022-10-14 14:22 | 只看该作者
目前就是发送不了ADC采集端口的数据,

51hei图片_20221014142752.jpg (157.43 KB, 下载次数: 11)

51hei图片_20221014142752.jpg
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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