📄 adc01.c
字号:
/****************************************************************************
* Begin Of File
* 文 件 名:ADC01.C
* 功 能:
****************************************************************************/
#include "config.h"
#define UART_BPS 115200 /* 定义通讯波特率 */
uint16 l,uart_counter;
fp64 t_total;
uint32 count_t;
void __irq TimeIRQ_Interrupt(void);
void Uart_Send(void);
void Invaliable_Init(void);
/****************************************************************************
* 名 称:Invaliable_Init()
* 功 能:初始化
****************************************************************************/
void Invaliable_Init(void)
{
l = 0;
uart_counter = 0;
t_total = 0;
count_t = 0;
}
/****************************************************************************
* 名 称:PIN_Init()
* 功 能:初始化引脚功能
****************************************************************************/
void PIN_Init(void)
{
PINSEL0 = 0x00000005; // 设置P0.0、P0.1分别连接到UART0的TXD、RXD
//PINSEL1 = 0x01400000; // 设置P0.27、P0.28分别连接到AIN0、AIN1
}
/****************************************************************************
* 名 称:UART0_Init()
* 功 能:初始化串口0。设置为8位数据位,1位停止位,无奇偶校验,波特率为115200
****************************************************************************/
void UART0_Init(void)
{
uint16 Fdiv;
U0LCR = 0x83; // DLAB = 1,可设置波特率
Fdiv = (Fpclk / 16) / UART_BPS; // 设置波特率
U0DLM = Fdiv / 256;
U0DLL = Fdiv % 256;
U0LCR = 0x03;
}
/****************************************************************************
* 名 称:Time01Init()
* 功 能:初始化定时器0。
****************************************************************************/
void Time0_Init(void)
{
/* Fcclk = Fosc*4 = 11.0592MHz*4 = 44.2368MHz Fpclk = Fcclk/4 = 44.2368MHz/4 = 11.0592MHz */
T0PR = 99; // 设置定时器110592Hz
T0MCR = 0x03; // 匹配通道0 匹配中断 并复位T0TC
T0MR0 = 8; // 比较值(13824Hz定时值)
T0TCR = 0x03; // 启动并复位T0TC
T0TCR = 0x01;
VICIntSelect = 0x00000000;
VICVectAddr0 = (uint32)TimeIRQ_Interrupt;
VICVectCntl0 = 0x00000024;
VICIntEnable = 0x00000010;
}
/****************************************************************************
* 名 称:Uart_Send()
* 功 能:向串口发送字节数据,并等待发送完毕。
**************************************************************************/
void Uart_Send(void)
{
uint8 p;
uint8 second;
uint8 minite;
U0THR = '[';
while((U0LSR&0x40) == 0);
U0THR = 'T'; // 发送数据
while( (U0LSR&0x40)==0 ); // 等待数据发送完毕
U0THR = '=';
while((U0LSR&0x40) == 0);
minite=(uint8)(t_total*0.01666667);
second=(uint8)(t_total-minite*60);
if(minite<10)
{
U0THR = ' ';
while((U0LSR&0x40) == 0);
U0THR = minite+0x30;
while((U0LSR&0x40) == 0);
}
else
{
p = minite*0.1;
U0THR = 0x30+p;
while((U0LSR&0x40) == 0);
U0THR = 0x30+minite-p*10;
while((U0LSR&0x40) == 0);
}
U0THR = ':';
while((U0LSR&0x40) == 0);
if(second<10)
{
U0THR = second+0x30;
while((U0LSR&0x40) == 0);
U0THR = ' ';
while((U0LSR&0x40) == 0);
}
else
{
p = second*0.1;
U0THR = 0x30+p;
while((U0LSR&0x40) == 0);
U0THR = 0x30+second-p*10;
while((U0LSR&0x40) == 0);
}
U0THR = ']';
while((U0LSR&0x40) == 0);
}
/*********************************************************************************************************
** 函数名称: TimeIRQ_Interrupt
** 功能描述: AD转换结束后请求FIQ
********************************************************************************************************/
void __irq TimeIRQ_Interrupt(void)
{
uart_counter++;
count_t++;
if(uart_counter==13824)
{
t_total=(count_t*0.000072338);
Uart_Send();
uart_counter=0;
}
T0IR = 0x01; // 清除中断标志
VICVectAddr = 0x00; // 通知VIC中断处理结束
}
/****************************************************************************
* 名称:main()
* 功能:进行通道0、1电压ADC转换,并把结果转换成电压值处理,数据处理后发送到串口。
* 说明:在CONFIG.H文件中包含stdio.h。
****************************************************************************/
int main(void)
{
PIN_Init(); // 初始化引脚
UART0_Init(); // 初始化UART0
Time0_Init();
Invaliable_Init() ; // 初始化Time0
while(1); // 等待中断的到来
return(0);
}
/****************************************************************************
*
* 功能:此程序正在调试过程中 End Of File
*
****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -