通过电脑测试串口通讯发送单个数字是没问题,但是要把发送的数据在5110显示却做不到 一直显示的W 我想是不是发送的数据类型不对 或者应该怎么解决呢?
#include "iom16v.h"
#include "macros.h"
#include "E:\AVR学习板\串口-5110试验\m5110.c"
#define uchar unsigned char
#define uint unsigned int
//波特率,晶振
#define BAUD 19200
#define FXTAL 12000000
//串口接收完毕中断触发声明
#pragma interrupt_handler USART_Received_Ir:12
//变量定义:接收缓冲变量,接收标志位
unsigned int RX_Buffer=0,RX_Flag=0;
//函数声明
void USART_Send(unsigned char);
//串口IO初始化函数
void USART_IO_Init()
{
DDRD|=BIT(PD1); //PD1:TX为输出状态
}
//串口初始化函数
void USART_Init()
{
unsigned int Temp;
USART_IO_Init(); //串口IO初始化函数调用
UCSRA=0x00; //串口控制器A清零
UCSRB=0x00; //串口控制器B清零
UCSRC|=BIT(URSEL)|BIT(UCSZ1)|BIT(UCSZ0)|BIT(UPM1)|BIT(UPM0); //选择USCRC,同膊讲僮鳎琂I检验危,1个停止位,八位数据
Temp=(FXTAL/BAUD/16)-1; //求出9600波特率的赋值
UBRRH=((Temp>>8)&0x00ff); //波特率寄存器高八位赋值
UBRRL=(Temp&0x00ff); //波特率寄存器低八位赋值
//UBRR=71; //从手册中直接取得赋值,9600kbps
UCSRB|=BIT(TXEN)|BIT(RXEN)|BIT(RXCIE); //发送使能,接收使能,接收完毕中断使能
SREG|=BIT(7); //全局中断使能
}
//串口发送函数
void USART_Send(unsigned char Data)
{
while(!(UCSRA&(BIT(UDRE)))); //数据寄存器UDR是否为空?
UDR=Data; //UDR赋值
while(!(UCSRA&(BIT(TXC)))); //数据是否已经发送完毕?
UCSRA|=BIT(TXC); //清除发送完毕标志位
}
//主函数
void main()
{
lcd5110_init();
display_english7X14(1,2,LIB[17]);
USART_Init();
while(1)
{
if(RX_Flag)
{
RX_Flag=0;
//USART_Send(RX_Buffer);
switch (RX_Buffer)//比较收到的数据
{
case 0: display_english7X14(1,1,LIB[16]);break;//收到是0 就显示0 display_english7X14(1,1,LIB[16])是5110显示函数
case 1: display_english7X14(1,1,LIB[17]);break;
case 2: display_english7X14(1,1,LIB[18]);break;
case 3: display_english7X14(1,1,LIB[19]);break;
case 4: display_english7X14(1,1,LIB[20]);break;
case 5: display_english7X14(1,1,LIB[21]);break;
case 6: display_english7X14(1,1,LIB[22]);break;
case 7: display_english7X14(1,1,LIB[23]);break;
case 8: display_english7X14(1,1,LIB[24]);break;
case 9: display_english7X14(1,1,LIB[25]);break;
default: display_english7X14(1,1,LIB[86]);//没有匹配的 就显示字符W
}
USART_Send(RX_Buffer);
}
}
}
//串口接收完毕中断函数
void USART_Received_Ir()
{
UCSRB&=~BIT(RXCIE); //接收完毕中断不使能
if(UCSRA|BIT(PE)) //如果出现奇偶校验错误
{UCSRA|=BIT(UDRE);//清空数据寄存器
//RX_Buffer=UDR; //
}
RX_Buffer=UDR; //读取UDR的数据
RX_Flag=1; //接收标志位置一
UCSRB|=BIT(RXCIE); //接收完毕中断使能
}
|