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

📄 osc.c

📁 80c51F020的开发程序 包括ADC DDS DAC
💻 C
字号:
/*------------------------------------------------------------
	File Name: 		osc.c
	Auther:			Samuel
	Revision:		R1
	History:		R1			Jul.05, 2007		Creation
------------------------------------------------------------*/

#include "common.h"
#include "osc.h"

void Osc_Init(Osc_Init_Parameter_t Osc_Init_Parameter)
{
	
	switch(Osc_Init_Parameter.Source_Select)
	{
		case EXTERNAL_OSC:
		{
			switch(Osc_Init_Parameter.External_Mode)
			{
				case DISABLE:
					break;
				
				case COMS_CLK:
					break;
				
				case COMS_CLK_DIV2:
					break;
				
				case RC_OR_C_DIV2:
					break;
				
				case CRYSTAL:

					if(Osc_Init_Parameter.Frequency>6700000)
					{
						OSCXCN = Reg_Field_Set(OSCXCN, BIT2);
						OSCXCN = Reg_Field_Set(OSCXCN, BIT1);
						OSCXCN = Reg_Field_Set(OSCXCN, BIT0);	
					}
					else
					{
						if(Osc_Init_Parameter.Frequency>2200000)
						{
							OSCXCN = Reg_Field_Set(OSCXCN, BIT2);
							OSCXCN = Reg_Field_Set(OSCXCN, BIT1);
							OSCXCN = Reg_Field_Clr(OSCXCN, BIT0);
						}
						else
						{
							if(Osc_Init_Parameter.Frequency>720000)
							{
								OSCXCN = Reg_Field_Set(OSCXCN, BIT2);
								OSCXCN = Reg_Field_Clr(OSCXCN, BIT1);
								OSCXCN = Reg_Field_Set(OSCXCN, BIT0);
							}
							else
							{
								if(Osc_Init_Parameter.Frequency>270000)
								{
									OSCXCN = Reg_Field_Set(OSCXCN, BIT2);
									OSCXCN = Reg_Field_Clr(OSCXCN, BIT1);
									OSCXCN = Reg_Field_Clr(OSCXCN, BIT0);
								}
								else
								{
									if(Osc_Init_Parameter.Frequency>95000)
									{
										OSCXCN = Reg_Field_Clr(OSCXCN, BIT2);
										OSCXCN = Reg_Field_Set(OSCXCN, BIT1);
										OSCXCN = Reg_Field_Set(OSCXCN, BIT0);
									}
									else
									{
										if(Osc_Init_Parameter.Frequency>30000)
										{
											OSCXCN = Reg_Field_Clr(OSCXCN, BIT2);
											OSCXCN = Reg_Field_Set(OSCXCN, BIT1);
											OSCXCN = Reg_Field_Clr(OSCXCN, BIT0);
										}
										else
										{
											if(Osc_Init_Parameter.Frequency>12000)
											{
												OSCXCN = Reg_Field_Clr(OSCXCN, BIT2);
												OSCXCN = Reg_Field_Clr(OSCXCN, BIT1);
												OSCXCN = Reg_Field_Set(OSCXCN, BIT0);
											}
											else
											{
												OSCXCN = Reg_Field_Clr(OSCXCN, BIT2);
												OSCXCN = Reg_Field_Clr(OSCXCN, BIT1);
												OSCXCN = Reg_Field_Clr(OSCXCN, BIT0);
											}
										}
									}
									
								}
							}

						}
					}
					
					OSCXCN = Reg_Field_Set(OSCXCN, BIT6);
					OSCXCN = Reg_Field_Set(OSCXCN, BIT5);
					OSCXCN = Reg_Field_Clr(OSCXCN, BIT4);

					break;
				
				case CRYSTAL_DIV2:
				 	break;
				
				default:
					break;

			}


			Loop_Delay(256);

			while (!(OSCXCN & 0x80));

			OSCICN = Reg_Field_Set(OSCICN, BIT3);
			OSCICN = Reg_Field_Set(OSCICN, BIT7);
			OSCICN = Reg_Field_Clr(OSCICN, BIT2);

			while (!(OSCXCN & 0x80));

			OSCICN = Reg_Field_Clr(OSCICN, BIT7);

			break;
		}

		case INTERNAL_OSC:
		{
			
			break;
		}

		default:
		{
			break;
		}
	}


}


⌨️ 快捷键说明

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