找回密码
 立即注册
查看: 629|回复: 3

请教STC8A8K64D4单片机ADC_DMA 串口1返回程序

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-13 10:35:09

1

主题

6

回帖

43

积分

新手上路

积分
43
发表于 2023-12-26 15:33:12 | 显示全部楼层 |阅读模式
#include "stc8a8k64d4.h"
#include "STOUT.H"

/*************        本地常量声明        **************/

#define MAIN_Fosc 24000000L        //定义主时钟

#define        ADC_SPEED        15                        /* 0~15, ADC转换时间(CPU时钟数) = (n+1)*32  ADCCFG */
#define        RES_FMT                (1<<5)        /* ADC结果格式 0: 左对齐, ADC_RES: D11 D10 D9 D8 D7 D6 D5 D4, ADC_RESL: D3 D2 D1 D0 0 0 0 0 */
                          /* ADCCFG     1: 右对齐, ADC_RES: 0 0 0 0 D11 D10 D9 D8, ADC_RESL: D7 D6 D5 D4 D3 D2 D1 D0 */

#define        ADC_CH                16                        /* 1~16, ADC转换通道数, 需同步修改 BMM_ADC_CHSW 转换通道 */
#define        ADC_DATA        12                        /* 6~n, 每个通道ADC转换数据总数, 2*转换次数+4, 需同步修改 BMM_ADC_CFG2 转换次数 */
#define        BMM_ADDR        0x800                /* BMM数据存放地址 */

/*************        本地变量声明        **************/

bit        BmmFlag;

u8 xdata BmmBuffer[ADC_CH][ADC_DATA] _at_ BMM_ADDR;

/*************        本地函数声明        **************/
u16                Get_ADC12bitResult(u8 channel);
void        delay_ms(u8 ms);
void        ADC_convert(u8 chn);        //chn=0~7对应P1.0~P1.7, chn=8~14对应P0.0~P0.6, chn=15对应BandGap电压
void        BMM_Config(void);

/**********************************************/
void main(void)
{
        u8        i,n;

        P0M1 = 0x7f;   P0M0 = 0x00;   //设置要做ADC的IO做高阻输入
        P1M1 = 0xff;   P1M0 = 0x00;   //设置要做ADC的IO做高阻输入

       
        ADC_CONTR = 0x80 + 0;        //ADC on + channel
        ADCCFG = RES_FMT + ADC_SPEED;

        UartStdOutInit();
        BMM_Config();
        EA = 1;

//        while (1)
//        {
                delay_ms(200);
                if(BmmFlag)
                {
                        BmmFlag = 0;
                        for(i=0; i<ADC_CH; i++)
                        {
                                for(n=0; n<ADC_DATA; n++)
                                {
                                        printf("0x%02bx ",BmmBuffer[i][n]);
                                }
                                printf("\r\n");
                        }
                        printf("\r\n");
                        BMM_ADC_CR = 0xc0;                //bit7 1:Enable ADC_BMM, bit6 1:Start ADC_BMM
                }
                while (1);
//        }
}


回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-13 10:35:09

1

主题

6

回帖

43

积分

新手上路

积分
43
发表于 2023-12-26 15:34:13 | 显示全部楼层
本帖最后由 jianjun 于 2023-12-26 15:37 编辑

这个范例程序有点看不明白:
打印的数据是这样的,是怎么排的?采集的是4次平均值吗?
printf("0x%02bx ",BmmBuffer[n]);这句话是怎么输出数据的?

0x02 0xff 0x03 0xa9 0x03 0xa9 0x03 0xaf 0x00 0x00 0x03 0x80
                    0x03 0xa0 0x03 0x9f 0x03 0xa0 0x03 0x9f 0x01 0x02 0x03 0x9f
                    0x02 0x66 0x02 0x66 0x02 0x66 0x02 0x65 0x02 0x03 0x02 0x65
                    0x00 0xd7 0x00 0xd7 0x00 0xd7 0x00 0xd7 0x03 0x00 0x00 0xd7
                    0x02 0x69 0x02 0x68 0x02 0x68 0x02 0x69 0x04 0x02 0x02 0x68
                    0x00 0x0a 0x00 0x0f 0x00 0x14 0x00 0x1a 0x05 0x03 0x00 0x11
                    0x01 0x1c 0x01 0x1e 0x01 0x1d 0x01 0x1d 0x06 0x00 0x01 0x1d
                    0x01 0x31 0x01 0x31 0x01 0x31 0x01 0x31 0x07 0x00 0x01 0x31
                    0x01 0xa4 0x01 0x6b 0x01 0x9c 0x02 0x6e 0x08 0x01 0x01 0xc6
                    0x02 0x6d 0x02 0x68 0x02 0x18 0x02 0x8a 0x09 0x03 0x02 0x5d
                    0x00 0x0a 0x00 0x0e 0x00 0x12 0x00 0x18 0x0a 0x02 0x00 0x10
                    0x00 0x09 0x00 0x0c 0x00 0x11 0x00 0x17 0x0b 0x01 0x00 0x0f
                    0x01 0x36 0x01 0xeb 0x02 0x00 0x01 0x6c 0x0c 0x01 0x01 0xa3
                    0x01 0x9e 0x02 0x91 0x02 0xa4 0x02 0x22 0x0d 0x01 0x02 0x3d
                    0x01 0xb4 0x02 0x2b 0x02 0x23 0x01 0xbd 0x0e 0x03 0x01 0xef
                    0x03 0xc1 0x03 0xc2 0x03 0xc1 0x03 0xc4 0x0f 0x00 0x03 0xc2



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6845

积分

论坛元老

积分
6845
发表于 2023-12-26 17:06:43 | 显示全部楼层
printf("0x%02bx ",BmmBuffer[n]);
其中的"0x"是直接打印的内容;
%后面的"02"指这个数据长度为2,如果数据长度小于2的话用0填充。例如数据"3"会输出"03";
b表示数据为8位数据(c51编译器需要,c251编译器8位数据不需要写b),默认16位数据用h或不填,32位数据用l;
x表示输出类型为无符号十六进制整数。
后面的BmmBuffer[n]就是按照以上格式输出的内容。
截图202312261652128649.jpg
截图202312261652242192.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-13 10:35:09

1

主题

6

回帖

43

积分

新手上路

积分
43
发表于 2023-12-26 18:08:01 | 显示全部楼层
乘风*** 发表于 2023-12-26 17:06
printf("0x%02bx ",BmmBuffer[n]);
其中的"0x"是直接打印的内容;
%后面的"02"指这个数据长度为2,如果数据 ...

受教
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-4 23:11 , Processed in 0.114572 second(s), 67 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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