⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lpc2131串口(tx+rx)+time0+adc采样的代码.txt

📁 LPC2131串口(TX+RX)+TIME0+ADC采样的代码,采用中断方式编写
💻 TXT
字号:
//LPC2131串口(TX+RX)+TIME0+ADC采样的代码!
#include "config.h"

#define TX0BUFF_LEN    4
#define RX0BUFF_LEN    8
                //0x55 if first send
uint8 gTx0Buff[TX0BUFF_LEN]={0xaa,0x00,0x00,0x00};
uint8 gTx0Point=TX0BUFF_LEN;

uint8 gRx0Buff[RX0BUFF_LEN];
uint8 gRx0Point=0;

typedef union dbdw
{
    uint8    db[2];
    uint16    dw;
}DBDW;

void Config_Uart0( void )
{
    int    Fdiv;
    //P0.0,P0.1 connect to Tx0 Rx0
    PINSEL0 = (PINSEL0&(~0x0f))|0x05;
    //enable baud rate set
    U0LCR = 0x80;
    //Set baud rate
    Fdiv = ( Fpclk/16 ) / 19200;
    U0DLM = Fdiv/256;
    U0DLL = Fdiv%256;
    //Set DataBit,Parity,StopBit...
    U0LCR = 0x03;    //8,n,1
    U0IER = 0x01;    //Rx,Interrupt enable, Tx Interrupt disable;
    U0FCR = 0x07;    //FIFO 1 byte
}

void Config_ADC0( void )
{
    PINSEL1 = (PINSEL1&(~(0x03<<28)))|(0x01<<28);
    ADCR =    (1<<3) |
        ((Fpclk/100000-1)<<8) |
        (0<<16) |
        (0<<17) |
        (1<<21) |
        (0<<22) |
        (1<<24) |
        (0<<27) ;
}

uint8 Uart0_GetByte( void )
{
    uint8 byte;
    while((U0LSR&0x01)==0);
    byte = U0RBR;
    return byte;
}


void __irq IRQ_Timer0(void)
{
    IRQDisable();
    AD0CR = (AD0CR&0xf8ffffff)|(0x1<<24);
    T0IR = 0x01;
    VICVectAddr = 0x00;
    IRQEnable();
}

void __irq IRQ_ADC0(void)
{
    uint32    ADdata;
    IRQDisable();
    ADdata = AD0DR;
    gTx0Buff[3]=gTx0Buff[1]=(uint8)(ADdata>>6);
    gTx0Buff[2]=(uint8)(ADdata>>14);
    gTx0Buff[3] += gTx0Buff[2];
    U0THR = 0x55;
    gTx0Point=0;
    U0IER = 0x03;
    VICVectAddr = 0x00;
    IRQEnable();
}

void __irq IRQ_UART0(void)
{
    uint8 byte;
    IRQDisable();
    while( ((byte=U0IIR)&0x01)==0 )
    {
        switch( byte&0x0e)
        {
        case    0x02:    //Tx Interrupt
            if( gTx0Point<TX0BUFF_LEN )
            {
                U0THR = gTx0Buff[gTx0Point];
                gTx0Point ++;
            }
            else
            {
                U0IER = 0x01;
            }
            break;
        case    0x04:    //Rx Interrupt
            gRx0Buff[gRx0Point] = U0RBR;
            gRx0Point = (gRx0Point+1)%RX0BUFF_LEN;
            break;
        case    0x0c:    //Rx timeout
            byte = U0RBR;
            break;
        case    0x06:
            byte = U0LSR;
            break;
        default:goto EXIT_UART_INT;
        }
    }
    EXIT_UART_INT:
    VICVectAddr = 0x00;    //clear interrupt
    IRQEnable();
}

int main (void)
{// add user source code 
    Config_Uart0();
    Config_ADC0();
    
    IRQEnable();
    
    T0TC = 0;
    T0PR = 0;
    T0MCR =0x03;
    T0MR0 =Fpclk/200;
    T0TCR =0x01;
    
    VICIntSelect = 0x00000000;
    VICVectCntl0 = 0x20|4;    //Timer0
    VICVectCntl1 = 0x20|18;    //ADC0
    VICVectCntl2 = 0x20|6;    //Uart0
    
    VICVectAddr0 = (uint32)IRQ_Timer0;
    VICVectAddr1 = (uint32)IRQ_ADC0;
    VICVectAddr2 = (uint32)IRQ_UART0;
    VICIntEnable = (1<<4)|(1<<18)|(1<<6);
    
    while(1);
    return 0;
}
200Hz的采样速度把AD0.3的电压数据通过串口发送出去。
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -