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

📄 main.c

📁 相关富士通单片机实用资料5
💻 C
字号:
//This is a testing route of ad converter in interrupt
#include "MB90540.h"
unsigned int ADCResults[8];
char ADPoint;
const char welcome[150]= "Welcome at FUJITSU,This is a testing route of ADC in interrupt by Xiaoquan Tang";
const char typechar[100]= "Please type any char";

void InitADC(void)
{
	//enable 7 channel analog 
	ADER = 0xff;
	// ADC control status register 0,
	// signal mode,sample channel 0 -7
	ADCS0 = 0x07;
	// ADC control status register 1
	// enable interrupt,software activation
	ADCS1 = 0xA0;
	// ADC data register,10 bit resolution
	ADCR1 = 0x28; 
}

void InitUart(void)
{
	/* initialize UART1 e.g. operation mode, baud rate, stop bit, data length etc. */
	/* set clockspeed as PLLX4 in start.asm */
	DDR4_D45 = 1;				 /* Make SOT1 working */
	SMR1 = 0x01;				 /* serial mode register */
	SCR1 = 0x13;				 /* serial control register */
	U1CDCR = 0x88;				 /* prescaler control register */
         						 /* baud rate 9600*/
}

void Putch (char ch)             /* sends a char */
{
	while (SSR1_TDRE == 0);	     /* wait for transmit buffer empty 	*/
	 SODR1 = ch;		         /* put ch into buffer			*/
}

void Puts (const char *Name2)    /* Puts a String to UART */
{
 char c;
 int i,len;
 
  len = strlen(Name2);
  for (i=0; i<len; i++) 	/* go through string */
  {
	c=(Name2[i]);			/* pick char */
	Putch (c);			/* send it out */
  }
}

unsigned char Getch()
{
	unsigned char ch;
	while( SSR1_RDRF == 0);
	ch = SIDR1;
	return ch;
}

void delay(void)
{
	int k;
	for(k = 0; k<= 32760; k++);
}

__interrupt void ADCIRQ(void)
{
	// bulit 16 bit
	ADCResults[ADPoint] = (ADCR1&0x03)<<8;
	// ADCR1(16 BIT) or ADCR0( 8 BIT) 
	ADCResults[ADPoint] = ADCResults[ADPoint] | ADCR0; 
	// array Point increase
	ADPoint = ADPoint+1;
	// clear convert interrupt flage
	ADCS1_INT = 0;
}
void main(void)
{
	int i;
	unsigned char HiByte,LowByte;
	// enable PORT2 as Output
	DDR2 = 0xff;
	// inital UART
	InitUart();
	// display Welcom
	Puts(welcome);
	// enter
	Putch(10);
	// linear
	Putch(13);
	// inital ADC 
	InitADC();	
	// clear array point
	ADPoint = 0;
	// Initial interrupt level 
	InitIrqLevels();
	// enable all interrupt level
	__set_il(7);
	// enable interrupt
	__EI();
	// start ADC
	ADCS1_STRT=1;
	
	while(1)
	{
		if(ADPoint >= 8)
		{
			// reset ADCResults array point
			ADPoint = 0;
			// display LED 
			PDR2 = 0xaa;
			delay();
			// display LED
			PDR2 = 0x55;
			delay();
			for(i=0;i<=7;i++)
			{
				// get ad result converter high byte
				HiByte=ADCResults[i] >> 8;
				// get ad result converter low byte
				LowByte=ADCResults[i] & 0xff;
				// transmit low byte
				Putch(LowByte);
				// ransmit high byte
				Putch(HiByte);
			}
			    Puts(typechar);
			    Putch(10);
				Putch(13);
				// wait for any char to type
				Getch();
				// restart ad converter
				ADCS1_STRT = 1;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -