📄 usart.c
字号:
#include <iom169.h>
#include <intrinsics.h>
#define SYSTEM_CLOCK 11059200
#define _NOP_nop(i) __delay_cycles(i)
#define _NOP_us(i) __delay_cycles((i*(unsigned long long)SYSTEM_CLOCK)/1000000)
#define _NOP_ms(i) __delay_cycles((i*(unsigned long long)SYSTEM_CLOCK)/1000)
#define _NOP_s(i) __delay_cycles((i*(unsigned long long)SYSTEM_CLOCK)/1)
void USART_Init( unsigned int baud )
{
/* 设置波特率*/
UBRR0H=(unsigned char)((0x0fff&(SYSTEM_CLOCK/(16*(unsigned long)baud)-1))>>8);
UBRR0L=(unsigned char)(0x0fff&(SYSTEM_CLOCK/(16*(unsigned long)baud)-1));
/* 接收器与发送器使能*/
UCSR0B = (1<<RXEN0)|(1<<TXEN0);
/* 设置帧格式: 异步 无校验 8 个数据位, 1 个停止位*/
UCSR0C = (0<<USBS0)|(1<<UCSZ01)|(1<<UCSZ00);
}
void USART_Transmit( unsigned char data )
{
/* W 等待发送缓冲器为空 */
while ( !( UCSR0A & (1<<UDRE0)) )
;
/* 将数据放入缓冲器,发送数据 */
UDR0 = data;
}
void USART_Transmit_Str( unsigned char *data )
{
while(*data)
{
USART_Transmit(*data++);
}
}
unsigned char USART_Receive( void )
{
/* 等待接收数据*/
while ( !(UCSR0A & (1<<RXC0)) )
;
/* 从缓冲器中获取并返回数据*/
return UDR0;
}
#pragma pack(4)
typedef struct arphdr
{
unsigned char arp_pln;
unsigned short arp_op;
unsigned long arp_spa;
//unsigned char arp_tha[6];
}ARPHDR;
void (*reset)(void) = 0x0000;
void main()
{
USART_Init(9600);
DDRD = 0x30;
/*
USART_Transmit(sizeof(unsigned long long));
USART_Transmit(sizeof(unsigned long));
USART_Transmit(sizeof(unsigned long int));
USART_Transmit(sizeof(ARPHDR));
*/
// reset();
while (1)
{
//USART_Transmit_Str("abcd");
PORTD_Bit4 = 1;
PORTD_Bit5 = 1;
USART_Transmit('a');
_NOP_s(1);
PORTD_Bit4 = 0;
PORTD_Bit5 = 0;
_NOP_s(1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -