?? main.c
字號(hào):
/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.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: Chenxibing
** Modified date: 2005-01-20
** Version:
** Descriptions: AD轉(zhuǎn)換實(shí)驗(yàn)。
**
********************************************************************************************************/
/********************************************************************************************************
** 功能 :使用ADC模塊的通道3進(jìn)行電壓的測量,然后將轉(zhuǎn)換結(jié)果從串口送出。
** 上位機(jī)使用EasyARM軟件全仿真的DOS窗口觀察。
** 說明 :由W1調(diào)節(jié)測量電壓值。
** 通訊波特率115200,8位數(shù)據(jù)位,1位停止位,無奇偶校驗(yàn)。
********************************************************************************************************/
#include "config.h"
/*
*******************************************************************************************************
** 函數(shù)名稱 :DelayNS()
** 函數(shù)功能 :長軟件延時(shí)
** 入口參數(shù) :dly 延時(shí)參數(shù),值越大,延時(shí)越久
** 出口參數(shù) :無
*******************************************************************************************************
*/
void DelayNS (uint32 dly)
{
uint32 i;
for ( ; dly>0; dly--)
for (i=0; i<5000; i++);
}
#define UART_BPS 115200 // 通訊波特率115200
/*
*******************************************************************************************************
** 函數(shù)名稱 :UART0_Init()
** 函數(shù)功能 :初始化串口0:波特率115200,8位數(shù)據(jù)位,1位停止位,無奇偶校驗(yàn)。
** 入口參數(shù) :無
** 出口參數(shù) :無
*******************************************************************************************************
*/
void UART0_Init (void)
{
uint16 Fdiv;
U0LCR = 0x83; // DLAB = 1
Fdiv = (Fpclk / 16) / UART_BPS;
U0DLM = Fdiv / 256;
U0DLL = Fdiv % 256;
U0LCR = 0x03;
}
/*
*******************************************************************************************************
** 函數(shù)名稱 :UART0_SendByte()
** 函數(shù)功能 :向串口發(fā)送字節(jié)數(shù)據(jù),并等待數(shù)據(jù)發(fā)送完畢。
** 入口參數(shù) :data 要發(fā)送的數(shù)據(jù)
** 出口參數(shù) :無
*******************************************************************************************************
*/
void UART0_SendByte (uint8 data)
{
U0THR = data;
while ((U0LSR & 0x40) == 0); // 等待數(shù)據(jù)發(fā)送完畢
}
/*
*******************************************************************************************************
** 函數(shù)名稱 :PC_DispChar()
** 函數(shù)功能 :向PC機(jī)發(fā)送顯示字符。
** 入口參數(shù) :x 顯示字符的橫坐標(biāo)
** y 顯示字符的縱坐標(biāo)
** chr 顯示的字符,不能為ff
** color 顯示的狀態(tài),包括前景色、背景色、閃爍位。
** 與DOS字符顯示一樣:0~3,前景色,4~6,背景色,7,閃爍位。
** 出口參數(shù) :無
*******************************************************************************************************
*/
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);
}
/*
*******************************************************************************************************
** 函數(shù)名稱 :ISendStr()
** 函數(shù)功能 :向上位機(jī)發(fā)送字符串。
** 入口參數(shù) :x 顯示字符的橫坐標(biāo)
** y 顯示字符的縱坐標(biāo)
** color 顯示的狀態(tài),包括前景色、背景色、閃爍位。
** 與DOS字符顯示一樣:0~3,前景色,4~6,背景色,7,閃爍位。
** str 要發(fā)送的字符串,以'\0'結(jié)束
** 出口參數(shù) :無
*******************************************************************************************************
*/
void ISendStr (uint8 x, uint8 y, uint8 color, char *str)
{
while (1)
{
if (*str == '\0') break; // 結(jié)束字符
PC_DispChar(x++, y, *str++, color);
if (x >= 80)
{
x = 0;
y++;
}
}
}
/*
*******************************************************************************************************
** 函數(shù)名稱 :main()
** 函數(shù)功能 :進(jìn)行3通道電壓ADC轉(zhuǎn)換,并把結(jié)果轉(zhuǎn)換成電壓值,發(fā)送到串口。
** 調(diào)試說明 :在config.h中包含stdio.h
*******************************************************************************************************
*/
int main (void)
{
uint32 ADC_Data;
char str[20];
PINSEL0 = 0x00000005; // 管腳連接串口
PINSEL1 = 1 << 28; // P0.30連接到AD0.3
UART0_Init();
/* 進(jìn)行ADC模塊設(shè)置 */
AD0CR = (1 << 3) | // SEL=8,選擇通道3
((Fpclk / 1000000 - 1) << 8) | // CLKDIV=Fpclk/1000000-1,轉(zhuǎn)換時(shí)鐘為1MHz
(0 << 16) | // BURST=0,軟件控制轉(zhuǎn)換操作
(0 << 17) | // CLKS=0, 使用11clock轉(zhuǎn)換
(1 << 21) | // PDN=1,正常工作模式
(0 << 22) | // TEST1:0=00,正常工作模式
(1 << 24) | // START=1,直接啟動(dòng)ADC轉(zhuǎn)換
(0 << 27); // 直接啟動(dòng)ADC轉(zhuǎn)換時(shí),此位無效
DelayNS(10);
ADC_Data = AD0DR; // 讀取ADC結(jié)果,并清除DONE標(biāo)志位
while (1)
{
AD0CR |= 1 << 24; // 進(jìn)行第一次轉(zhuǎn)換
while ((ADDR & 0x80000000) == 0); // 等待轉(zhuǎn)換結(jié)束
AD0CR |= 1 << 24; // 再次啟動(dòng)轉(zhuǎn)換
while ((AD0DR & 0x80000000) == 0); // 等待轉(zhuǎn)換結(jié)束
ADC_Data = AD0DR; // 讀取ADC結(jié)果
ADC_Data = (ADC_Data >> 6) & 0x3ff;
ADC_Data = ADC_Data * 2480; // 參考電壓經(jīng)過3/4分壓
ADC_Data = ADC_Data / 1024;
sprintf(str, "%4d mV VIN3", ADC_Data);
ISendStr(0,0,0x30,str);
}
return 0;
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -