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

📄 r8c_ad.c

📁 少见的瑞萨,R8C/Tinmy系列弹片机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 + -