亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
STC8G1K08A單片機ADC多通道采樣數據不正確
[打印本頁]
作者:
1665655951
時間:
2026-6-2 10:59
標題:
STC8G1K08A單片機ADC多通道采樣數據不正確
STC8G1K08A
ADC 多通道 進行采樣時,獲取到得數據與實際不一致,單通道時是對的
#include "config.h"
#include "STC8G_H_GPIO.h"
#include "STC8G_H_Timer.h"
#include "STC8G_H_ADC.h"
#include "STC8G_H_NVIC.h"
#include "STC8G_H_Delay.h"
#include "STC8G_H_UART.h"
#include "STC8G_H_Switch.h"
//==================== 硬件引腳定義 ====================
sbit CHONG = P3^3; // 充電控制(0=開啟充電,1=關閉充電)
sbit FANG = P3^2; // 放電控制(0=開啟放電,1=關閉放電)
//==================== ADC 通道定義 ====================
#define ADC_CH_BAT 4 // P5.4 電池電壓 → 通道4
#define ADC_CH_POWER 5 // P5.5 外部電源檢測 → 通道5
//==================== 閾值參數 ====================
#define BAT_MAX 651 // 電池≥651 → 關充電 P3.2=1
#define BAT_MIN 512 // 電池≤512 → 關放電 P3.3=1
//==================== 全局變量 ====================
volatile u16 bat_adc = 0; // 電池電壓ADC
volatile u16 pwr_adc = 0; // 電源檢測ADC
volatile u16 TIME_COUNT = 0;
volatile u16 adc_flag = 0;
//==================== IO初始化 ====================
void GPIO_CONFIG(void)
{
P3_MODE_OUT_PP(GPIO_Pin_2); // P3.2 充電控制
P3_MODE_OUT_PP(GPIO_Pin_3); // P3.3 放電控制
P5_MODE_IN_HIZ(GPIO_Pin_4); // P5.4 電池ADC輸入
P5_MODE_IN_HIZ(GPIO_Pin_5); // P5.5 電源ADC輸入
}
//==================== ADC初始化 ====================
void ADC_CONFIG(void)
{
ADC_InitTypeDef ADC_InitStructure;
ADC_InitStructure.ADC_SMPduty = 31;
ADC_InitStructure.ADC_CsSetup = 0;
ADC_InitStructure.ADC_CsHold =1;
ADC_InitStructure.ADC_Speed = ADC_SPEED_2X16T;
ADC_InitStructure.ADC_AdjResult = ADC_RIGHT_JUSTIFIED;
ADC_Inilize(&ADC_InitStructure);
ADC_PowerControl(ENABLE);
}
//==================== TIMER0 1MS 中斷 ====================
void TIM_CONFIG(void)
{
TIM_InitTypeDef TIM_InitStructure;
TIM_InitStructure.TIM_Mode = TIM_16BitAutoReload;
TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_12T;
TIM_InitStructure.TIM_ClkOut = DISABLE;
TIM_InitStructure.TIM_Value = 65536UL - (MAIN_Fosc / 2400); // 1ms中斷
TIM_InitStructure.TIM_Run = ENABLE;
Timer_Inilize(Timer0,&TIM_InitStructure);
NVIC_Timer0_Init(ENABLE,Priority_1);
}
void UART_CONFIG(void)
{
COMx_InitDefine COMx_InitStructure;
COMx_InitStructure.UART_Mode = UART_8bit_BRTx;
COMx_InitStructure.UART_BRT_Use = BRT_Timer1;
COMx_InitStructure.UART_BaudRate = 115200ul;
COMx_InitStructure.UART_RxEnable = DISABLE;
UART_Configuration(UART1,&COMx_InitStructure);
NVIC_UART1_Init(ENABLE,Priority_2);
UART1_SW(UART1_SW_P30_P31);
}
//==================== 主函數 ====================
void main(void)
{
EAXSFR();
GPIO_CONFIG();
ADC_CONFIG();
TIM_CONFIG();
UART_CONFIG();
EA = 1;
// // 上電默認關閉充放電
// CHONG = 1;
// FANG = 1;
while(1)
{
// ================== 有外部電源:充電模式 ==================
if(pwr_adc > 100)
{
FANG = 1; // 關閉放電
if(bat_adc < BAT_MAX)
{
CHONG = 0; // 開啟充電
}
else
{
CHONG = 1; // 滿電,關閉充電
}
}
// ================== 無外部電源:放電模式 ==================
else
{
CHONG = 1; // 關閉充電
if(bat_adc > BAT_MIN)
{
FANG = 0; // 開啟放電
}
else
{
FANG = 1; // 欠壓,關閉放電
}
}
}
}
//==================== 1MS 中斷:ADC 單次采樣 ====================
// 全局區新增一個切換標記
//==================== 1MS 中斷 ====================
//==================== 1MS 中斷:ADC 單次采樣 ====================
void Timer0_ISR_Handler (void) interrupt TMR0_VECTOR
{
TF0 = 0;
if(++TIME_COUNT >=20)
{
TIME_COUNT=0;
if(adc_flag == 0)
{
// //本次只采電源
pwr_adc = Get_ADCResult(ADC_CH_POWER);
adc_flag = 1;
}
else
{
//下次只采電池
bat_adc = Get_ADCResult(ADC_CH_BAT);
adc_flag = 0;
}
//異常值修正
if(pwr_adc>=4096) pwr_adc=0;
if(bat_adc>=4096) bat_adc=0;
//打印不變
TX1_write2buff('P');
TX1_write2buff(':');
TX1_write2buff((pwr_adc / 1000) % 10 + '0');
TX1_write2buff((pwr_adc / 100) % 10 + '0');
TX1_write2buff((pwr_adc / 10) % 10 + '0');
TX1_write2buff(pwr_adc % 10 + '0');
TX1_write2buff('\r');
TX1_write2buff('\n');
TX1_write2buff('B');
TX1_write2buff(':');
TX1_write2buff((bat_adc / 1000) % 10 + '0');
TX1_write2buff((bat_adc / 100) % 10 + '0');
TX1_write2buff((bat_adc / 10) % 10 + '0');
TX1_write2buff(bat_adc % 10 + '0');
TX1_write2buff('\r');
TX1_write2buff('\n');
}
}
捕獲.PNG
(14.47 KB, 下載次數: 0)
下載附件
2026-6-2 10:57 上傳
讀取打印的值,但打印的值出來時反的
作者:
coody_sz
時間:
2026-6-2 23:00
怎么個不對法?問問題要說清楚,別人沒法猜的。
電源電壓多少V?輸入電壓多少V?對應ADC讀數多少?
作者:
joyb
時間:
2026-6-3 08:13
#include "config.h"
#include "STC8G_H_GPIO.h"
#include "STC8G_H_Timer.h"
#include "STC8G_H_ADC.h"
#include "STC8G_H_NVIC.h"
#include "STC8G_H_Delay.h"
#include "STC8G_H_UART.h"
#include "STC8G_H_Switch.h"
會用庫,不簡單
作者:
WL0123
時間:
2026-6-3 10:03
樓主代碼是由AiCube生成,目前AiCube包含的MCU型號有限,雖然可以借用同系列型號MCU生成代碼,但同系列的MCU之間還是有所差別的。如果對庫函數底層代碼一無所知,怎么可能一蹴而就。
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1