📄 main.c
字号:
/****************************************Copyright (c)****************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2004-09-16
** Last Version: 1.0
** Descriptions: The main() function example template
**
**--------------------------------------------------------------------------------------------------------
** Created by: Chenmingji
** Created date: 2004-09-16
** Version: 1.0
** Descriptions: The original version
**
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
*********************************************************************************************************/
#include "main.h"
#define UART_BPS 115200 /* 通讯波特率115200 */
/********************************************************************************************************
** 函数名称 :DelayNS
** 函数功能 :长软件延时
** 入口参数 :dly 延时参数,值越大,延时越久
** 出口参数 :无
*********************************************************************************************************/
void DelayNS(uint32 dly)
{
uint32 i;
for ( ; dly > 0; dly--)
for (i = 0; i < 5000; i++);
}
/*********************************************************************************************************
** 函数名称:UART0_IniDft
** 函数功能:按默认值初始化串口0的引脚和通讯参数。设置为8位数据位,1位停止位,无奇偶校验,波特率115200。
** 入口参数:无
** 出口参数:无
**********************************************************************************************************/
void UART0_IniDft(void)
{
uint32 Fdiv = 0;
/* 初始化相关的IO */
PINSEL0 = (0x01 << 4) | (0x01 << 6); /* 设置P0.2和P0.3连接到UART0 */
/* 初始化串口通讯参数 */
U0LCR = 0x80; /* 设置为8位数据位,1位停止位 , */
/* 无奇偶校验,DLAB=1, */
/* 允许设置波特率 */
Fdiv = (Fpclk / 16) / 115200; /* 设置波特率 */
U0DLM = (unsigned long)Fdiv / 256;
U0DLL = (unsigned long)Fdiv % 256;
U0LCR = 0x03; /* 令DLAB位为0 */
U0FCR &= ~0x07; /* 禁用FIFO */
U0IER &= ~0x07; /* 禁止UART0产生中断 */
}
/*********************************************************************************************************
** 函数名称 :UART0_SendByte
** 函数功能 :向串口发送字节数据,并等待数据发送完毕。
** 入口参数 :data 要发送的数据
** 出口参数 :无
**********************************************************************************************************/
void UART0_SendByte(uint8 data)
{
U0THR = data;
while ((U0LSR & 0x40) == 0); /* 等待数据发送完毕 */
}
/*********************************************************************************************************
** 函数名称 :PC_DispChar
** 函数功能 :向PC机发送显示字符。
** 入口参数 :x 显示字符的横坐标
** y 显示字符的纵坐标
** chr 显示的字符,不能为ff
** color 显示的状态,包括前景色、背景色、闪烁位。
** 与DOS字符显示一样:0~3,前景色,4~6,背景色,7,闪烁位。
** 出口参数 :无
**********************************************************************************************************/
void PC_DispChar(uint8 x, uint8 y, uint8 chr, uint8 color)
{
UART0_SendByte(0xff); /* 起始字符 */
UART0_SendByte(x);
UART0_SendByte(y);
UART0_SendByte(chr);
UART0_SendByte(color);
}
/*********************************************************************************************************
** 函数名称 :ISendStr
** 函数功能 :向上位机发送字符串。
** 入口参数 :x 显示字符的横坐标
** y 显示字符的纵坐标
** color 显示的状态,包括前景色、背景色、闪烁位。
** 与DOS字符显示一样:0~3,前景色,4~6,背景色,7,闪烁位。
** str 要发送的字符串,以'\0'结束
** 出口参数 :无
**********************************************************************************************************/
void ISendStr(uint8 x, uint8 y, uint8 color, char *str)
{
while (1){
if (*str == '\0'){ /* 结束字符 */
break;
}
PC_DispChar(x++, y, *str++, color);
if (x >= 80){
x = 0;
y++;
}
}
}
/*******************************************************************************************************
** 函数名称 :main
** 函数功能 :使用Burst模式,使硬件自动不断地进行通道0电压ADC转换,并把结果转换成电压值,发送给上位机显示
** 调试说明 :1、在config.h中包含stdio.h;
** 2、在开发板上短接V_test;
** 3、在Flash中进行调试。
********************************************************************************************************/
int main(void)
{
uint32 ADC_Data;
char str[20];
UART0_IniDft(); /* 串口0初始化为8位数据位, */
/* 1位停止位,无奇偶校验 */
PCONP |= 1 << 12; /* 打开ADC的功率控制位 */
PINSEL1 = ((unsigned)0x01) << 14; /* 设置P0.23为AIN0[0]功能 */
/* 进行ADC模块设置 */
AD0CR = (1 << 0) | /* SEL=0x01,选择通道0 */
((Fpclk / 1000000 - 1) << 8) | /* CLKDIV=Fpclk/1000000-1 */
(1 << 16) | /* BURST=1,使用Burst模式, */
/* 让硬件不断地进行转换 */
(0 << 17) | /* CLKS=0, 使用11clock转换 */
(1 << 21) | /* PDN=1,正常工作模式 */
(0 << 24); /* START=0,在Burst模式下, */
/* 起始位(bit24~26)必须为0 */
DelayNS(10);
ADC_Data = (uint32)ADDR0; /* 读取ADC结果,并清除DONE标志位 */
while (1){
AD0CR |= 1 << 24; /* 进行第一次转换 */
while ((AD0STAT & (1 << 0)) == 0); /* 等待第一通道AIN0转换结束 */
AD0CR |= 1 << 24; /* 再次启动转换 */
while ((AD0STAT & (1 << 0)) == 0); /* 等待第一通道AIN0转换结束 */
ADC_Data = (uint32)ADDR0; /* 读取ADC结果 */
ADC_Data = (ADC_Data >> 6) & 0x3ff;
ADC_Data = ADC_Data * 2500; /* 参考电压由精密恒压源提供的2.5V*/
ADC_Data = ADC_Data / 1024;
sprintf(str, "%4d mV VIN0", ADC_Data);
ISendStr(0, 0, 0x30, str);
}
return (0);
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -