📄 r8c_ad.c
字号:
/***********************************************************************/
/* */
/* FILE :R8C_AD.c */
/* DATE :Fri, Nov 09, 2007 */
/* DESCRIPTION :main program file. */
/* CPU GROUP :16(ROM16K) */
/* */
/* This file is generated by Renesas Project Generator (Ver.4.8). */
/* */
/***********************************************************************/
#include "rskr8c13def.h"//包含R8C/13开发套件宏定义和R8C/13的头文件
void MCU_Init(void); //MCU的初始化函数声明
void Clock_Init(void); //系统时钟初始化函数声明
void Port_Init(void); //端口初始化函数声明
void Timer_Init(void); //定时器初始化函数声明
void ADC_Init(void); //A/D采样初始化函数声明
unsigned char DispCount;//控制LED闪烁的全局变量
unsigned char TimerCount;//时间计数器
void main(void) //主函数
{
MCU_Init(); //MCU初始化
while(TRUE) //主循环
{
}
}
//***********************************************************************************
// 函数名称: MCU_Init
// 描述: MCU的初始化:设定系统时钟、设定SFR
//
// 参数: 无
// 输入/输出: 无
// 返回值: 无
//***********************************************************************************
void MCU_Init(void)
{
asm("FCLR I"); //禁止中断
Clock_Init(); //时钟初始化
Port_Init(); //端口初始化
Timer_Init(); //定时器初始化
ADC_Init(); //A/D采样初始化
asm("FSET I"); //允许中断
}
//***********************************************************************************
// 函数名称: Clock_Init
// 描述: 设定使用主时钟作为系统时钟
// CPU时钟不分频
// 参数: 无
// 输入/输出: 无
// 返回值: 无
//***********************************************************************************
void Clock_Init(void)
{
unsigned char WaitClockStable = 50;
prc0 = 1; //解除系统时钟控制寄存器的写保护
cm13 = 1; //选择Xin-Xout管脚
cm15 = 1; //选择Xin-Xout的驱动能力为高
cm05 = 0; //主时钟振荡
cm16 = 0; //主时钟为无分频模式
cm17 = 0;
cm06 = 0; //主时钟分频比选择位cm16、cm17有效
while(WaitClockStable--)
{ //等待主时钟振荡稳定
asm("nop");
asm("nop");
asm("nop");
}
ocd2 = 0; //选择主时钟
prc0 = 0; //解除系统时钟控制寄存器的写保护
}
//***********************************************************************************
// 函数名称: Port_Init
// 描述: 初始化端口寄存器
//
// 参数: 无
// 输入/输出: 无
// 返回值: 无
//***********************************************************************************
void Port_Init(void)
{
pd1 |= 0xf0; //设定P1_4~P1_7端口为输出端口,P1_0~P1_3端口为输入端口
pd0_3 = 0; //模拟输入引脚AN4(p0_3)为输入端口
}
//***********************************************************************************
// 函数名称: Timer_Init
// 描述: 初始化定时器寄存器
//
// 参数: 无
// 输入/输出: 无
// 返回值: 无
//***********************************************************************************
void Timer_Init(void)
{
tcss = 0x01; //定时器X的计数源为主时钟的8分频
txmr = 0x00; //设定定时器X为定时器模式
//定时值为 20MHz* 1/8 * 250 * 100 =10ms
prex = 250 - 1; //设定预定标器X
tx = 100 - 1; //设定定时器X
txic = 0x05; //设定定时器X中断优先级为5
txs = 1; //开始计数
}
//***********************************************************************************
// 函数名称: ADC_Init
// 描述: 初始化A/D寄存器
//
// 参数: 无
// 输入/输出: 无
// 返回值: 无
//***********************************************************************************
void ADC_Init(void)
{
adcon2 = 0x01; //设定具有采样保持功能
adcon1 = 0x20; //8位模式,连接Vref
adcon0 = 0x84; //单次模式、10M允许时钟、AN4(P0_3)为模拟输入引脚
}
//***********************************************************************************
// 函数名称: _timer_x
// 描述: TimerX的中断服务程序,在中断程序中改变定时时间
//
// 参数: 无
// 输入/输出: 无
// 返回值: 无
//***********************************************************************************
#pragma interrupt _timer_x(vect=22)
void _timer_x(void)
{
adst = 1; //启动A/D转换
while(adst == 1) //等待A/D转换结束
;
prex = adl; //将AD采样值传递给TimerX的预定标器
TimerCount++;
if(TimerCount >= 100)
{
TimerCount = 0;
++DispCount; //控制LED闪烁变量自加
if (DispCount > 5)
DispCount = 1;
switch (DispCount)
{
case 1:
//仅点亮LED3
LED3 = LED_ON;
LED2 = LED_OFF;
LED1 = LED_OFF;
LED0 = LED_OFF;
break;
case 2:
//仅点亮LED2
LED2 = LED_ON;
LED1 = LED_OFF;
LED3 = LED_OFF;
LED0 = LED_OFF;
break;
case 3:
//仅点亮LED1
LED2 = LED_OFF;
LED1 = LED_ON;
break;
case 4:
//仅点亮LED0
LED1 = LED_OFF;
LED0 = LED_ON;
break;
case 5:
//仅点亮LED1
LED1 = LED_ON;
LED0 = LED_OFF;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -