📄 uart._c
字号:
#include <iom16v.h>
#include <macros.h>
//常量定义
#define BAUDRATE 9600 //波特率
#define F_CPU 16000000 //这个已经在makefile里面定义了
#define IRsignal (PINB&BIT(3)) //检测一个端口电平输入情况就要这样定义了
#define DIR_I DDRB&=~BIT(3)
#define DIR_O DDRB|=BIT(3)
unsigned char table[]="qfasdfasdf";
void init_USART(void)//USART 初始化
{
UCSRC = (1<<URSEL) | 0x06;
UBRRL= (F_CPU/BAUDRATE/16-1)%256;
UBRRH= (F_CPU/BAUDRATE/16-1)/256;
UCSRA = 0x00;
UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
}
void put_c(unsigned char c) //发送采用查询方式
{
while( !(UCSRA & (1<<UDRE)) );
UDR=c;
}
void put_s(unsigned char *ptr)
{
while (*ptr)
{
put_c(*ptr++);
}
put_c(0x0D);
put_c(0x0A); //结尾发送回车换行
}
//外部中断1中断服务函数
#pragma interrupt_handler int1_isr:3
void int1_isr(void)
{
CLI();
static unsigned char cnt = 0;
static unsigned char k;
if ( cnt == 0 ) //起始位
{
}
else if ( cnt <= 8 ) //数据位
{
k >>= 1;
DIR_I;
if (IRsignal==BIT(3)) k|= 0x80;
}
else //校验位和停止位
{
}
cnt++;
if ( cnt >= 11 ) //一帧数据接收完毕
{
cnt = 0;
if ( k == 0xF0 ) //抬起标志
{
KB_UpFlag = 1;
}
else
{
if ( KB_UpFlag )
{
KB_UpFlag = 0;
}
else
{
KB_Buf = k;
KB_HitFlag = 1;
SBUF=KB_Buf; //发送码值
while(!TI);
TI=0;
}
}
}
}
void main()
{
init_USART();
while(1)
{
put_s(table);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -