最近刚接触mega128a,在使用由于是小白,遇到一些问题。
目的:发送20~0,21个数字,发完后便停止发送。
问题:单片机一直不停地发送14(20的16进制表示),看着都累
程序:
#include< mega128.h>
#include< delay.h>
#define UDRE 5
#defineF_CPU 4000000
#define baud 9600 //设置波特率的大小
#define baud_setting (unsigned int)((unsigned long)F_CPU/(16*(unsigned long)baud)-1) //波特率计算公
#define baud_h (unsigned char)(baud_setting>>8) //提取高位
#define baud_l (unsigned char)(baud_setting) //低位
unsigned int tx_count=20;
interrupt [USART0_TXC] void txc0_over(void)
{
delay_ms(1000);
tx_count--;
}
void USART0_Transmit()
{
while(!(UCSR0A& (1<< UDRE)));
UDR0 = tx_count;
}
void main(void)
{
PORTE.6 = 0;
PORTE.7 = 0;
DDRE.6 = 1;
DDRE.7 = 1;
UCSR0A=0x00; //单倍速模式
UCSR0B=0x48; //接收中断和发送中断允许
UCSR0C=0x06; //写UCSRC寄存器,异步通信无校验,8位数据1位停止位
UBRR0H=baud_h; //写波特率的值
UBRR0L=baud_l;
#asm("sei")
while (1)
{
if(tx_count >= 0)
USART0_Transmit();
}
}
目的:发送20~0,21个数字,发完后便停止发送。
问题:单片机一直不停地发送14(20的16进制表示),看着都累
程序:
#include< mega128.h>
#include< delay.h>
#define UDRE 5
#defineF_CPU 4000000
#define baud 9600 //设置波特率的大小
#define baud_setting (unsigned int)((unsigned long)F_CPU/(16*(unsigned long)baud)-1) //波特率计算公
#define baud_h (unsigned char)(baud_setting>>8) //提取高位
#define baud_l (unsigned char)(baud_setting) //低位
unsigned int tx_count=20;
interrupt [USART0_TXC] void txc0_over(void)
{
delay_ms(1000);
tx_count--;
}
void USART0_Transmit()
{
while(!(UCSR0A& (1<< UDRE)));
UDR0 = tx_count;
}
void main(void)
{
PORTE.6 = 0;
PORTE.7 = 0;
DDRE.6 = 1;
DDRE.7 = 1;
UCSR0A=0x00; //单倍速模式
UCSR0B=0x48; //接收中断和发送中断允许
UCSR0C=0x06; //写UCSRC寄存器,异步通信无校验,8位数据1位停止位
UBRR0H=baud_h; //写波特率的值
UBRR0L=baud_l;
#asm("sei")
while (1)
{
if(tx_count >= 0)
USART0_Transmit();
}
}