久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1454|回復: 13
收起左側

請教一下,為什么我的單片機ADC_DMA進不了中斷

[復制鏈接]
ID:298743 發表于 2024-7-12 13:47 | 顯示全部樓層 |閱讀模式
#include "stc8h.h"
#include "eeprom.h"
#include "stdio.h"
#include "intrins.h"



typedef         unsigned char        u8;
typedef         unsigned int        u16;
typedef         unsigned long        u32;

/*************        ±¾µØ³£Á¿ÉùÃ÷        **************/
//1~16,使用的ADC轉換通道數量,必須和[ADC_DMA通道使能寄存器(DMA_ADC_CHSWx)]中啟用的ADC通道數量一致
#define ADC_CH_NUM          1  
//ADC轉換次數,必須和[ADC_DMA配置寄存器2(DMA_ADC_CFG2)]設置的一致
#define ADC_SAMPLES_NUM     8   
//每個通道ADC轉換數據總字節數=2*轉換次數+4
#define ADC_DATA_SIZE       (ADC_SAMPLES_NUM*2 + 4)   

//存儲ADC DMA轉換結果,即ADC DMA的目的地址
u8 xdata adc_samples_buff[ADC_CH_NUM][ADC_DATA_SIZE];   
//ADC DMA轉換完成標志
bit DmaFlag;





void Uart1_Init(void);        //4800bps@11.0592MHz
void sendByte(char dat);
void sendString(unsigned char *dat);
char putchar(char c);
void adc_dma_config(void);  
void Delay500ms(void);        //@11.0592MHz
void ADC_Init(void);


void main()
{
   u8 i,j;  
   u16 adc_value;   
   float voltage;
   Uart1_Init();
   ADC_Init();

   EA = 1;  
   printf("Hello");  

   while(1)
   {   
           if(DmaFlag)  
           {  
                      DmaFlag = 0;  
         
                      adc_value=(adc_samples_buff[0][16]<<8)+adc_samples_buff[0][17];
                      voltage   = (5*adc_value)/4096;         
                       printf("voltage: %.2fV\r\n",voltage);   

                     DMA_ADC_CR = 0xC0;      
           }
           Delay500ms();
        }

}



void adc_dma_config(void)  
{  
   P_SW2 = 0x80;  
   DMA_ADC_STA = 0x00;         //清零ADC DMA狀態寄存器
   DMA_ADC_CFG = 0x80;         //開啟ADC DMA中斷
   DMA_ADC_RXAH = (u8)((u16)(&adc_samples_buff) >> 8); //ADC轉換數據存儲地址,即ADC DMA目的地址
   DMA_ADC_RXAL = (u8)((u16)(&adc_samples_buff));  
   DMA_ADC_CFG2 = 0x0A;    //每個通道ADC轉換次數:8
   DMA_ADC_CHSW0 = 0x01;   //使能ADC通道1
   DMA_ADC_CHSW1 = 0x00;   
   DMA_ADC_CR = 0xC0;      //啟動ADC DMA轉換
}  

void ADC_Init(void)
{
        P1M0=0x00;                 //設置P10為高阻輸入
        P1M1=0x01;

           ADCTIM = 0x3F;                  //設置ADC內部時許
        ADCCFG = 0x2F;                  //設置ADC時鐘為系統時鐘,數據右對齊
        ADC_CONTR = 0x80;    //使能ADC模塊

}

void Uart1_Init(void)        //4800bps@11.0592MHz
{
        PCON &= 0x7F;                //波特率不倍速
        SCON = 0x50;                //8位數據位,可變波特率
        AUXR &= 0xBF;                //定時器時鐘12T模式
        AUXR &= 0xFE;                //串口1選擇定時器1為波特率發生器
        TMOD &= 0x0F;               
        TMOD |= 0x20;               
        TL1 = 0xFA;                       
        TH1 = 0xFA;                       
        ET1 = 0;                       
        TR1 = 1;                       
}



void sendByte(char dat)
{
        SBUF = dat;
        while(!TI);
        TI = 0;      
}

void sendString(unsigned char *dat)
{
        while(*dat != '\0')
        {
                sendByte(*dat++);
        }
}

char putchar(char c)
{
        sendByte(c);
        return c;
}

void ADC_DMA_Interrupt(void) interrupt 13
{
        DMA_ADC_STA = 0;
        DmaFlag = 1;
}


void Delay500ms(void)        //@11.0592MHz
{
        unsigned char data i, j, k;

        _nop_();
        _nop_();
        i = 22;
        j = 3;
        k = 227;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}
回復

使用道具 舉報

ID:1034262 發表于 2024-7-12 17:40 | 顯示全部樓層
試試STC官方的例子:
STC8H系列-ADC相關程序.rar (918.47 KB, 下載次數: 3)
回復

使用道具 舉報

ID:1109793 發表于 2024-7-12 17:49 | 顯示全部樓層
8G和8H的ADC中斷向量號好像是5吧,我看工具里面的示例里面的是5
void ADC_Isr() interrupt 5
{
    ADC_CONTR &= ~0x20;                         //清中斷標志
    P2 = ADC_RES;                               //讀取ADC結果
    ADC_CONTR |= 0x40;                          //繼續AD轉換
}
回復

使用道具 舉報

ID:624769 發表于 2024-7-13 13:04 | 顯示全部樓層
看你你中斷號用的 13
那么……, 你 LJMP 那段匯編 寫了沒有?
并且,是否用的 .A51 格式? 是否正確插入了項目?
回復

使用道具 舉報

ID:298743 發表于 2024-7-14 14:44 | 顯示全部樓層
xiaobendan001 發表于 2024-7-12 17:49
8G和8H的ADC中斷向量號好像是5吧,我看工具里面的示例里面的是5
void ADC_Isr() interrupt 5
{

STC的官方程序寫的是13
回復

使用道具 舉報

ID:298743 發表于 2024-7-14 14:46 | 顯示全部樓層
188610329 發表于 2024-7-13 13:04
看你你中斷號用的 13
那么……, 你 LJMP 那段匯編 寫了沒有?
并且,是否用的 .A51 格式? 是否正確插入 ...

這個"stc8h.h"這個頭文件沒有嗎?我程序里還有中斷12 開的定時器2也能正常工作
回復

使用道具 舉報

ID:1109793 發表于 2024-7-14 15:00 | 顯示全部樓層
asdadqw2 發表于 2024-7-14 14:44
STC的官方程序寫的是13

改成5試試啊,你的官方歷程截圖看看吧
回復

使用道具 舉報

ID:161164 發表于 2024-7-14 17:36 | 顯示全部樓層
asdadqw2 發表于 2024-7-14 14:44
STC的官方程序寫的是13

例程是13沒錯,但還要加中斷號48跳到13的附加操作
2024-07-14_173556.png


回復

使用道具 舉報

ID:1109793 發表于 2024-7-14 20:07 | 顯示全部樓層
lkc8210 發表于 2024-7-14 17:36
例程是13沒錯,但還要加中斷號48跳到13的附加操作

那是處理大于31號的手段。ADC的就是5,又不大于31,為何要借用13號?13號就是保留的,讓編譯器把服務代碼放到13號的位置,然后在不如32號的位置人為添加LJMP跳轉到13號。借用其他不使用的也一樣啊。但是ADC的就是5號,直接用就行了啊,不懂為何要借用,然后還得添加匯編代碼。這不是那啥?
回復

使用道具 舉報

ID:624769 發表于 2024-7-14 20:31 | 顯示全部樓層
asdadqw2 發表于 2024-7-14 14:46
這個"stc8h.h"這個頭文件沒有嗎?我程序里還有中斷12 開的定時器2也能正常工作

你如果看得是官方例程,你繼續往下翻,應該會有類似這樣的代碼:
ISR.ASM
CSEG  AT  0183H
LJMP  0063H
END
你把他做成 ASM 文件 加入到項目里才可以。
回復

使用道具 舉報

ID:161164 發表于 2024-7-14 22:19 | 顯示全部樓層
xiaobendan001 發表于 2024-7-14 20:07
那是處理大于31號的手段。ADC的就是5,又不大于31,為何要借用13號?13號就是保留的,讓編譯器把服務代碼 ...

因為他用的是DMA_ADC,而不是單純的ADC
回復

使用道具 舉報

ID:1109793 發表于 2024-7-15 07:28 | 顯示全部樓層
lkc8210 發表于 2024-7-14 22:19
因為他用的是DMA_ADC,而不是單純的ADC

哦,沒用過H的,剛下載了PDF看了下是48號,話說DMA有啥好處?還要借用跳轉。直接用ADC中斷不行?
回復

使用道具 舉報

ID:161164 發表于 2024-7-16 16:09 | 顯示全部樓層
xiaobendan001 發表于 2024-7-15 07:28
哦,沒用過H的,剛下載了PDF看了下是48號,話說DMA有啥好處?還要借用跳轉。直接用ADC中斷不行?

不用頻繁進中斷
回復

使用道具 舉報

ID:1109793 發表于 2024-7-16 18:23 | 顯示全部樓層
lkc8210 發表于 2024-7-16 16:09
不用頻繁進中斷

意思是時不時的關掉48號?DMA中斷也是中斷啊。5號也可以時不時 的關閉一下吧。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品一区二区三区 | 日韩爱爱网 | 免费观看日韩精品 | 一区二区三区在线 | 亚洲精品一区二区三区蜜桃久 | 天堂男人av | 国产免费一区二区 | 日本又色又爽又黄又高潮 | 欧美成人精品在线 | 国产精品一区二区av | 日韩av一区二区在线观看 | 激情在线视频网站 | 国产区精品 | 九色91视频| 韩国精品在线观看 | 懂色av色香蕉一区二区蜜桃 | 精品久久久久久久久久久久 | 国产精品视频在线免费观看 | 在线播放国产一区二区三区 | 欧美性精品 | 精产国产伦理一二三区 | 国产日韩精品一区二区三区 | 久久国产精品一区二区 | 日韩在线视频网址 | 日本在线视频一区二区 | 91视频网 | 精品视频在线免费观看 | 日韩av在线一区二区 | 99re视频在线观看 | 羞羞的视频免费看 | 国产女人与拘做受视频 | 亚洲精品久 | 成人午夜精品一区二区三区 | 青青草社区 | 成人免费一区二区三区牛牛 | 黄色大片在线视频 | 日韩精品免费视频 | 国产成人精品一区二区三区在线 | 午夜精品一区二区三区在线视 | 欧美精品在线观看 | 亚洲九九精品 |