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

📄 main.c

📁 ATMega16驱动Cy2198TR无线串口程序
💻 C
字号:
/*
Cy2198TR-B Program
by Chenxi
*/
#include <iom16v.h>

/*====================MACRO DEFINE============================================*/
/*define system as transmitter or receiver*/
/*
transmitter -- 1
receiver -- 0
*/
#define WIRELESS_TRANSIMIT_SEL 1

/*----------ports---------*/
#define W_EN	3
#define W_BUSY	2
#define W_RT	1
#define W_FS	0
#define W_RXD	0  
#define W_TXD	1

#define WIRELESS_EN()			PORTC &= (~(1 << W_EN))
#define WIRELESS_REC_EN()		PORTC |= (1 << W_RT)
#define WIRELESS_SEND_EN()		PORTC &= (~(1 << W_RT))
#define WIRELESS_IS_BUSY		PINC & (1 << W_BUSY)
#define WIRELESS_FREQUENCY_SEL() PORTC |= (1 << W_FS)

/*============================================================================*/
/*=================FUNCTIONS DECLARATION======================================*/
void Port_Init(void);
void USART_Init(void);
void Wireless_Init(void);
void USART_Transmit(unsigned char ucbyte);
void Wireless_TransmitByte(unsigned char ucbyte);
void Delay_nms(unsigned int n);
unsigned char USART_Receive(void);
/*============================================================================*/

/*================== MAIN ====================================================*/
int main(void)
{
	Wireless_Init();
	while(1)
	{	
    	Wireless_TransmitByte(0x01);
    	Delay_nms(1000);
    	Wireless_TransmitByte(0x02);
    	Delay_nms(1000);
	}
	return 0;
}
/*============================================================================*/

/*===============FUNCTIONS HERE===============================================*/
/*--------------Initialize Ports--------------------*/
void Port_Init(void)
{
 	PORTB = 0x01;
 	DDRB = 0xFF;
	DDRC |= (1 << W_EN) | (1 << W_RT) | (1 << W_FS);
	DDRC |= ~(1 << W_BUSY);
	PORTC = (1 << W_EN) | (1 << W_RT) | (1 << W_BUSY) | (1 << W_FS);
	DDRD |= (1 << W_TXD);
	DDRD &= ~(1 << W_RXD);
	PORTD |= (1 << W_TXD) | (1 << W_RXD);	
}

/*--------------UART0 initialize----------------*/
/*baudrate: 19200*/
void USART_Init(void)
{
	UCSRB = 0x00; 
	UCSRA = 0x00;
	UCSRC = (1 <<URSEL) | 0x06;
	UBRRL= 25;
	UBRRH= 0x00;
	UCSRB = 0x98;
}

/*----------------initialize system-----------------*/
void Wireless_Init(void)
{
 	asm("cli");
	Port_Init();
	USART_Init();
	
	#if WIRELESS_TRANSIMIT_SEL
		WIRELESS_SEND_EN();
	#else
		WIRELESS_RECEIVE_EN();
	#endif
	
	WIRELESS_EN();
	asm("sei");
}

/*--------------UART0 transmit a byte----------------*/
void USART_Transmit( unsigned char ucbyte )
{
	while ( !( UCSRA & (1<<UDRE)));
	UDR = ucbyte;
}

/*------------wireless transmit a byte-------------*/
void Wireless_TransmitByte(unsigned char ucbyte)
{
	while(!(WIRELESS_IS_BUSY));
	USART_Transmit(ucbyte);
	USART_Transmit(0x0D);
	USART_Transmit(0x0A);
}

/*--------------delaly function---------------------*/
void Delay_nms(unsigned int n)       //N ms
{
   unsigned int i = 0;
   unsigned int j = 0;
   for (i = 0 ; i < n ; i ++)
   {
   	   for (j = 0 ; j < 1140 ;j ++);
   }
}

/*--------------USART receive a byte---------------------*/
unsigned char USART_Receive(void)
{
	while(!(UCSRA&(1<<RXC)));
	return UDR;
}

/*--------------wireless receive -------------------------*/
#pragma interrupt_handler uart0_rx_isr:12
void uart0_rx_isr(void)
{
 	//add receiver code here......
 	PORTB = UDR;
}
/*=============================================================================*/

/*END WIRELESS*/

⌨️ 快捷键说明

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