我用的CVAVR写一个ATMEGA128的串口程序,要用中断实现。可是写出来之后根本没有反应。求大神~~

2025-03-22 04:07:04
推荐回答(2个)
回答1:

这个程序里面有一下几点:
1、主程序中没有发送数据的函数
2、你在中断中定义Declare1[]和Declare2[],我的确不知道用意何在,你是要发送这两个字符串么?如果是要发送的话应该定义在main()函数内,或者之外。
3、如果让单片机要发送数据和接收数据的话,那是不是还应该有一个从机?这个程序只发送了数据,那么接收的数据是从哪里产生的呢?
我贴一个我自己写的程序,板子是M16,M128是和这个差不多,编译器是ICCAVR:
#include "iom16v.h"
#include "macros.h"
#define uchar unsigned char
#define uint unsigned int
#define mclk 1000000
#pragma interrupt_handler USART_RX:12
uchar DATA,flag=0;
void USART_init(uint baud)
{
UCSRA=0x00;
baud=mclk/16/baud-1;
UBRRH=baud<<8;
UBRRL=baud;
UCSRB=((1< UCSRC=0x86;

SREG|=BIT(7);
DDRD|=0x02;
}
void USART_TX(uchar data)
{
while(!(UCSRA&(1< UDR=data;
while(!(UCSRA&BIT(TXC)));//查询发送完毕 发送完毕对TXC置位
UCSRA|=BIT(TXC);//查询操作不会自动清0通过写一进行清0
}
void USART_RX()
{
UCSRB&=~BIT(RXCIE);//接收完成中断屏蔽不让其使能
while(!(UCSRA&(1< DATA=UDR;
UCSRB|=BIT(RXCIE);//使能接收完成中断
}
void main ()
{
uchar temp=0x00;
USART_init(9600);
while(1)
{
USART_TX(temp);
}

}

回答2:

请问 你的问题解决了 吗?我现在用的128 串口0也遇到了这个问题 ,,求教???