|
本帖最后由 qs130 于 2012-12-1 21:38 编辑
#include <iom16v.h>
#include <macros.h>
#pragma interrupt_handler uartrupt:12
unsigned char temp; //接收临时变量
unsigned char adr; //从机地址及标志
unsigned int m;
//======================
//名称:延时
//功能:ms延时
//======================
void delay(unsigned int ms)
{
unsigned int i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<1141;j++);
}
}
//======================
//名称:USARTinit()
//功能:串行通信初始化,设置引脚功能,波特率,通信方式
//波特率=fosc/16(ubrr+1)
//======================
#define F_CPU 8000000
void USART_Init( unsigned int baud )
{
unsigned int tmp;
/* 设置波特率*/
tmp= F_CPU/baud/16-1;
UBRRH = (tmp>>8);
UBRRL = tmp;
/* 接收器与发送器使能*/
UCSRB = (1<<RXEN)|(1<<TXEN);
/* 设置帧格式: 8 个数据位, 2 个停止位*/
UCSRC = (1<<URSEL)|(1<<USBS)|(1<<UCSZ0)|(1<<UCSZ1);
}
//======================
//名称:接收中断
//功能:接收数据
//======================
void uartrupt(void)
{
m=1;
temp=UDR; //读数
}
//======================
//名称:发送
//功能:发送数据
//======================
void SEND(unsigned char mydata)
{
DDRD|=0X04; //MAX485允许输出
PORTD|=0X04;
UCSRB|=0x01; //TXB8=0发地址
delay(100);
while(!UDRE);
UDR=mydata;
delay(5);
PORTD&=~0X04; //发送后立即转为接收等从机发来数据
delay(5);
}
//======================
//名称:主函数
//======================
void main(void)
{ unsigned char str;
m=0;
DDRD|=0X04; //MAX485使能端允许输出
USART_Init(9600);
while(1)
{
SEND(0X33);
delay(100); //读数据
SEND(temp);
delay(100);
}
}
检测n,一直都是0,一直不产生接收中断。串口的temp显示也一直是0. |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|