為什么相同的程序,同樣的CVAVR和progisp,燒進單片機,運行的效果不一樣?
最近剛接觸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();
}
}
|
|