main.c

来自「meg16 的所有功能实例」· C语言 代码 · 共 107 行

C
107
字号
//ICC-AVR application builder : 2006-6-20 9:25:59
// Target : M16
// Crystal: 1Mhz

#include <iom16v.h>
#include <macros.h>
#include "main.h"

uint8 Buffer;

void Delay_us(unsigned int time)
{
while(time--);
}

void Delay_ms(unsigned int time)
{
while(time--)
	{
	Delay_us(10000);
	}
}
void main(void)
{
 Delay_ms(1);
 SPI_SS_IN;
 SPI_DO_OUT;
 SPI_DI_IN;
 SPI_CLK_IN;
 
 uart_init();                 //TART初始化
 SEI();                       //全局中断使能
 
 
 for(;;)
 {
  if(SS)
   {
    
	Buffer=Spi_Send(0XF0);
	
	USART_TXD(Buffer);
   } 
 }
}

//===============================================================
void uart_init(void)          //UART初始化
  { 
    //设置侦格式
	//异步,8位数据,无奇偶校验,一个停止位,无倍速
	UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
	
    //设置波特率
    UBRRL= (F_osc/Baud_rate/16-1)%256;
    UBRRH= (F_osc/Baud_rate/16-1)/256;

	//使能接收中断,使能接收,使能发送
    UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
  }
  

//===============================================================
void USART_TXD(uint8 data) //发送采用查询方式
{
	while( !(UCSRA & BIT(UDRE)) );
	UDR=data;
	while( !(UCSRA & BIT(TXC )) );
	UCSRA|=BIT(TXC);
}

//=======================================================================

#pragma interrupt_handler USART_RXC:12
void USART_RXC(void)
{

}

//*****************************************************************************************
//函数名:Spi_send(uint8 dat)
//输入:发送的数据
//输出:无
//功能描述:SPI从模式发送一个字节,先发送高位(发送的同时接收)
//*****************************************************************************************
uint8 Spi_Send(uint8 dat)
{
	uint8 i,temp;
	temp = 0;

	for(i=0; i<8; i++)
	{   
		if(dat & 0x80)
		{
			MOSI_1;
		}
		else MOSI_0;
		dat <<= 1;
		while(!SCK);
		while(SCK);

		temp <<= 1;
		if(MISO)temp++; 
	
	}
	return temp;
}

⌨️ 快捷键说明

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