mega16a不能进入for 循环
#include<iom16v.h>#define BAUD 9600 //波特率采用9600
#define CRYSTAL 8000000 //系统时钟8MHz
#define BAUD_SETTING (unsigned char)((unsigned long)CRYSTAL/(16*(unsigned long)BAUD)-1)// 设置波特率
#define BAUD_H (unsigned char)(BAUD_SETTING>>8)
#define BAUD_L (unsigned char)(BAUD_SETTING)
#define _nop() #asm("nop")
//PORT D///////////
#define EN_485 4
#define RUN 5
void delay(char k) //延时ms
{
unsigned char j;
for(;k>0;k--)
for(j=220;j>0;j--)
_nop();
}
//===========================
//main主程序
//===========================
void main()
{
unsigned char i,j;
DDRD |= (1<<RUN);
SREG =0x00;
TIMSK |= (1<<TOIE1);
TCCR1B = 0x00;
TCNT1 = 0x00;
TCCR1B |= (1<<CS11);
UCSRB |= (1<<RXCIE);
USART_Init();
SREG = 0x80;
PORTD |= (1<<RUN);
delay(200);
PORTD &= ~(1<<RUN);
while(1)
{
}
}
for语句只有一次循环,也跳不出来,所以一到延时地方就停了。谁知道怎么回事啊
for(;k>0;k--)
~~~~不说,自己去看 本帖最后由 binaimei2007 于 2013-5-25 18:06 编辑
自己找找看 tanguicaicai 发表于 2013-5-25 17:57 static/image/common/back.gif
for(;k>0;k--)
~~~~不说,自己去看
我在void delay(char k)这有对k赋值delay(200); char k;一般是-128<k<127,200? char k。。。 unsigned char k, unsigned int k 多了很多字么 lsy5110 发表于 2013-5-25 22:46 static/image/common/back.gif
char k;一般是-128
Proteus-Pro我用这个软件仿真就可以,但是在板子上就不行 本帖最后由 askme 于 2013-5-27 11:21 编辑
[-128 127] ...路过吧 jiongeyes 发表于 2013-5-27 11:01 static/image/common/back.gif
Proteus-Pro我用这个软件仿真就可以,但是在板子上就不行
你可以小于127试一下,仿真和实际是有出入的。200如果是有符号是负数。 lsy5110 发表于 2013-5-27 12:11 static/image/common/back.gif
你可以小于127试一下,仿真和实际是有出入的。200如果是有符号是负数。
这两天认真仿真了一下,不是for的问题,是485发送的问题
////////////////RS232////////////////////
void USART_Init() //232波特率初始化
{
UBRRH = BAUD_H;
UBRRL = BAUD_L;
UCSRB |= (1<<RXEN)|(1<<TXEN); //接收器与发送器使能
UCSRC = (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1); //设置帧格式:8个数据位,1个停止位
}
///////////////458发送///////////////////
void UART_TX485( unsigned char data )
{
PORTD |= (1<<4);
delay(2);
while ( !( UCSRA & (1<<UDRE)) );
UDR = data;
while(!(UCSRA & (1<<UDRE)));
delay(2);
PORTD&= ~(1<<4); // 将数据放入缓冲器,发送数据
}
main()
{
DDRD |= (1<<4);
}
如果不设置DDRD就可以发送485,如果设置就会报帧错误,而且跟PORTD是高低电平没有关系,只要不设置DDRD就能发送
jiongeyes 发表于 2013-5-28 11:23 static/image/common/back.gif
这两天认真仿真了一下,不是for的问题,是485发送的问题
////////////////RS232////////////////////
voi ...
就是不能开全局中断SREG =0x80;一加入这一条就不能发送485,说明一下,整个程序没有加入任何中断 问题算找到了,就不知道是不是正确的,我先开了UCSRB |= (1<<RXCIE)接收结束中断使能,在发送485前必须先关了RXCIE。一切就正常了,大家是不是也要把这个位置0先的 问题算找到了
not even close.
your problem is your inability to understand the datasheet and code to the datasheet.
页:
[1]