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

📄 uart0.#1

📁 ad准确采集
💻 #1
字号:
#include <main.H>
#include <stdio.h>
//#include <C8051F020.H>

/*修改时钟!!!!*/
/*帧错误和传输错误监测需要吗?查询方式?只是具有发送功能?*/
void UART0_transmit (unsigned int *samples, unsigned int numSample) 
{  
   volatile int i;
  // SFRPAGE=0x0F;	
  // WDTCN = 0xde;                       // disable watchdog timer
  // WDTCN = 0xad;
   //Timer1_Init();
   //SYSCLK_Init ();               
//   PORT_Init ();                       // initialize crossbar and GPIO
   UART0_Init ();                      // initialize UART0
   //Timer2_Init (65536-(SYSCLK/SAMPLE_RATE/32/2));  //可选择定时器1或2作为波特率发生器
  // Timer1_Init();
 //???????????  ES0 =1;                             // sample rat//允许RI0或TI0产生中断。中断号为4
   //EA  =1;                             // Enable global interrupts
 //ES0 =1;                             // sample rat//??RI0?TI0????
 //  EA  =1;                             // Enable global interrupts
   EA=0;
   LED = 0;
  while (1) 
   {	                       			// disable interrupts
	  	SFRPAGE=0x0;
		for(i=0;i<numSample;i++)
			{
				TI0=0;                     
      			SBUF0=(samples[i]>>8)&0x0F;
				while(TI0==0);
				TI0=0;
				SBUF0=samples[i]&0xFF;
				while(TI0==0);
				TI0=0;
				LED=~LED;
				//break;
			}
       break;
	}
  TR1=0;//停止定时器1
  SCON0 &=0xEF; //禁止接收
  TI0=0;
  RI0=0;
  ES0=0;
  EA=0;               

}

//-----------------------------------------------------------------------------
// SYSCLK_Init
//-----------------------------------------------------------------------------
//
// This routine initializes the system clock to use an 22.1184MHz crystal
// as its clock source.
//
/*void SYSCLK_Init (void)
{
   int i;                              // delay counter

   OSCXCN = 0x67;                      // start external oscillator with
                                       // 22.1184MHz crystal

   for (i=0; i < 256; i++) ;           // XTLVLD blanking interval (>1ms)

   while (!(OSCXCN & 0x80)) ;          // Wait for crystal osc. to settle

   OSCICN = 0x88;                      // select external oscillator as SYSCLK
                                       // source and enable missing clock
                                       // detector
}*/

/*//-----------------------------------------------------------------------------
// PORT_Init
//-----------------------------------------------------------------------------
//
// Configure the Crossbar and GPIO ports
//
void PORT_UARTO_Init (void)
{
   XBR0    = 0x04;                     // Enable UART0
   XBR1    = 0x00;
   XBR2    = 0x40;                     // Enable crossbar and weak pull-ups
   P0MDOUT |= 0x01;                    // enable TX0 as a push-pull output
   P1MDOUT |= 0x40;                    // enable P1.6 (LED) as push-pull output
}

//-----------------------------------------------------------------------------
// UART0_Init
//-----------------------------------------------------------------------------
//
// Configure the UART0 using Timer1, for <baudrate> and 8-N-1.
//
void UART0_Init (void)
{
   SCON0   = 0x50;                     // SCON0: mode 1, 8-bit UART, enable RX
   
}

//----------------------------------------------------------------------------
void Timer1_UARTO_Init(void)
{
   TMOD    = 0x20;                     // TMOD: timer 1, mode 2, 8-bit reload
   TH1    = -(SYSCLK_UART0/BAUDRATE/16);     // set Timer1 reload value for baudrate
   //TH1    = 70;
   //TL1    = 70; 
  // ET1    = 1;
   TR1    = 1;                         // start Timer1
   CKCON |= 0x10;                      // Timer1 uses SYSCLK as time base
   PCON  |= 0x80;                      // SMOD00 = 1
}                 */

void PORT_Init (void)
{
   SFRPAGE=0x0F;
   XBR0 = 0x05; //UART0,SMbus0接到端口引脚
   XBR1 = 0x04; //外部中断0接到端口引脚(P0.4)
   //XBR0 = 0x04; //使能UART0
   //XBR1 = 0x00;
   XBR2 = 0x40; // 使能交叉开关和弱上拉
   //P0MDOUT |=0x0D;
   P0MDOUT |=0x01;
//   P0MDOUT |= 0x01; // ??TX0?????
   P1MDOUT |= 0x40; // ??P1.6(LED)?????
}

//-----------------------------------------------------------------------------
// UART0初始化
//-----------------------------------------------------------------------------
//
// 配置UART0 使用定时器1为波特率发生器
//
void UART0_Init (void)
{
SFRPAGE=0x0;
SCON0 = 0x50; // SCON0: 模式1(异步方式,数据位8,一个起始位和一个停止位), 8位UART,可变波特率。使能RX
 

/*修改 */
//TL1 = -(SYSCLK_AD/BAUDRATE/16);

TH1 = -(SYSCLK_AD/BAUDRATE/16); // 根据波特率的值设定定时器1重装值
//TH1 = -(24500000/BAUDRATE/16/8);

CKCON |= 0x10; // 定时器1使用系统时钟作为时基(T1M=1)
//PCON  |= 0x80; // SMOD00 = 1

SSTA0 |=0x10;//SMOD00 = 1,禁止系统时钟/2
TL1=TH1;
//TR1 = 1; // 启动定时器1
TMOD = 0x20; // TMOD: 定时器1, 模式2, 8位重装 
TR1 = 1; // 启动定时器1
TI0 = 1; // 表示TX0就绪
}
//void UART0_ISR(void) interrupt 4
//{
   	//for(i=0;i<=numSample;i++)
	//		{
//				SFRPAGE=0x0;
				//TI0=0;                     
      			//SBUF0=numSample;
				//SBUF0=samples[i];
				//while(TI0==0);
				//TI0=0;
        		//SBUF0=samples[i]&0xFF;
				//SBUF0=0xFF;
				//while(TI0==0);
//				TI0=0;
	//			SBUF0=(samples[i]>>8)&0x0F;
	//			while(TI0==0);
	//			TI0=0;
//				LED=~LED;
	//		}
//}

⌨️ 快捷键说明

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