最近刚接触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(); } } |
yanjibao 发表于 2015-6-22 08:54
interrupt里加大delay,大忌啊。把这样会很容易引发中断优先级仲裁,结果很难预期的
堂吉诃德 发表于 2015-6-22 13:28
我在这边把delay改到while里面去了,还是不行,主要是同样的程序,软件,老师的电脑烧进去是对的,我的编 ...
yanjibao 发表于 2015-6-22 14:46
编译的时候有没有什么错误提示?出错了运行肯定不正常。不同的编译器结果可能有差异。你编译错误的环境还 ...
chhome 发表于 2015-6-22 18:37
中断里尽量不要放延时
slaoliu 发表于 2015-6-22 15:51
程序改下吧,中断里尽量不要放延时
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |