| 
				打卡等级:以坛为家III打卡总天数:600最近打卡:2025-10-31 06:34:52  已绑定手机超级版主 
 
	积分12070 
 | 
 
 发表于 2024-8-31 13:45:53
|
显示全部楼层 
| 8H8K64U有DMA呀,用DMA
 
 
 
 #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                3                        // 1~16, ADC转换通道数, 需同步修改 DMA_ADC_CHSW 转换通道
 #define                ADC_NUM                256                        // 每个通道ADC转换次数, 需同步修改DMA_ADC_CFG2 转换次数
 #define                DMA_ADDR        0x800                // DMA数据存放地址
 
 
 unsigned char xdata DMA_Buffer[ADC_CH][ADC_NUM*2+4] _at_ DMA_ADDR;
 unsigned long ADC_Value[ADC_CH];
 
 //初始化:
 
 DMA_ADC_STA=0x00;
 DMA_ADC_CFG=0x80;                                                        //bit7 1:Enable Interrupt
 DMA_ADC_RXAH=(unsigned char)(DMA_ADDR>>8);        //ADC转换数据存储地址
 DMA_ADC_RXAL=(unsigned char)DMA_ADDR;
 DMA_ADC_CFG2=0x0F;                                                        //每个通道ADC转换次数:256
 DMA_ADC_CHSW0=0x07;                                                        //ADC通道使能寄存器 ADC7~ADC0
 DMA_ADC_CHSW1=0x00;                                                        //ADC通道使能寄存器 ADC15~ADC8
 DMA_ADC_CR=0xc0;                                                        //bit7 1:Enable ADC_DMA, bit6 1:Start ADC_DMA
 
 void DMA_ADC_Isr(void) interrupt 13        //重映射中断向量
 {
 DMA_ADC_STA=0;
 Dma_Flag=1;
 }
 
 
 | 
 |