- 打卡等级:初来乍到
- 打卡总天数:1
- 最近打卡:2023-12-13 10:35:09
新手上路
- 积分
- 43
|
#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);
// }
}
|
|