AVR的IO操作感觉没51方便啊。
费劲9牛2虎之力,把数码管点亮了,模拟的SPI,不过在送完一位数据后不加延时,4位数码管亮的也很均匀?请问这是为什么呢?#include <iom128v.h>#include <macros.h>
unsigned char const codeLED[] = {0X8F,0X4F,0X2F,0X1F};
void PORTinitial(void)
{
DDRB = 0XFF;
PORTB= 0XFF;
DDRC|=BIT(PC7);
PORTC &= ~BIT(PC7);
PORTB |=BIT(PB3);
}
void SPIsendonedata(unsigned char dataSend)
{
unsigned char i = 0;
for (i = 0;i < 8;i++)
{
if (dataSend & 0x80) //判断高位
{
PORTB |=BIT(PB2);
}
else
{
PORTB &= ~BIT(PB2);
}
PORTB |=BIT(PB1);
PORTB &= ~BIT(PB1);
dataSend <<= 1;
}
}
void LEDdisplayline(void)
{
unsigned char i = 0;
for (i = 0;i < 4;i++)
{
PORTB |=0XFF;
PORTB &=codeLED;
SPIsendonedata(0X30);
PORTB |=BIT(PB0);
PORTB &= ~BIT(PB0);
//这里不加延时数码管也很亮。请问AVR的特色吗澹?
}
}
void main(void)
{
PORTinitial();
while(1)
{
LEDdisplayline();
}
}
好像avr这样的io操作是主流吧,方向、数据、类型……
是不是risc全部都这样 Garbage614 发表于 2012-10-28 22:55 static/image/common/back.gif
好像avr这样的io操作是主流吧,方向、数据、类型……
是不是risc全部都这样 ...
呵呵,是我太菜了。公司拿回一块板子,51没学好,但也弄了很久突然接触AVR不容易转弯啊~ HeP028 发表于 2012-10-28 22:59 static/image/common/back.gif
呵呵,是我太菜了。公司拿回一块板子,51没学好,但也弄了很久突然接触AVR不容易转弯啊~ ...
我也很菜,共同进步!
mega128!性价比太低了,可以试着用stm32 Garbage614 发表于 2012-10-28 23:03 static/image/common/back.gif
我也很菜,共同进步!
mega128!性价比太低了,可以试着用stm32
半路出家我当成业余爱好玩玩啦,
你说的那芯片太伤脑筋了,或过去与过来的容易迷糊{:lol:} /**********位段**************/
typedef struct
{ unsigned bit0: 1;
unsigned bit1: 1;
unsigned bit2: 1;
unsigned bit3: 1;
unsigned bit4: 1;
unsigned bit5: 1;
unsigned bit6: 1;
unsigned bit7: 1;
}PBIT;
/* Port A */
#define PINAB (*(volatile PBIT *)&PINA)
#define DDRAB (*(volatile PBIT *)&DDRA)
#define PORTAB (*(volatile PBIT *)&PORTA)
#define PA_0 PORTAB.bit0
#define PA_1 PORTAB.bit1
#define PA_2 PORTAB.bit2
#define PA_3 PORTAB.bit3
#define PA_4 PORTAB.bit4
#define PA_5 PORTAB.bit5
#define PA_6 PORTAB.bit6
#define PA_7 PORTAB.bit7
置位直接PA_0=1就行了 AVR有硬件SPI 似乎除51外,AVR、MSP430、stm32都差不多。 编译器用IAR 试试 能够模拟SPI算是不错的了吧。我可以说无数的人模拟不了 51习惯了 是不方便 qwermhb 发表于 2012-10-29 00:14:51 static/image/common/back.gif
/**********位段**************/
typedef struct
{ unsigned bit0: 1;
unsigned bit1: 1;
unsi
可以啊,可以把这个加到头文件中,以后就方便了。 51准双向端口,AVR标准双向端口。 HeP028 发表于 2012-10-28 23:20 static/image/common/back.gif
半路出家我当成业余爱好玩玩啦,
你说的那芯片太伤脑筋了,或过去与过来的容易迷糊...
avr位操作也是一样的,与或感觉挺方便,而且还有不好好处 用惯了一样,还可以装b{:titter:}{:titter:}
不过除51外的单片机几乎都是这样操作,建议学习。还有助于加深对位操作的理解,而且有些情况会比位操作方便,比如同时给多个端口赋值,比如进行一些移位写出,比如同时反转多个端口。 If you are used to C51's sbit notation, you may find this helpful:
typedef struct {
unsigned char B0: 1;
unsigned char B1: 1;
unsigned char B2: 1;
unsigned char B3: 1;
unsigned char B4: 1;
unsigned char B5: 1;
unsigned char B6: 1;
unsigned char B7: 1;
} BIT8_T;
//extend bit fields
#if defined (PORTA)
#define PORTAbits (*(volatile BIT8_T *)&PORTA)
#define DDRAbits (*(volatile BIT8_T *)&DDRA)
#define PINAbits (*(volatile BIT8_T *)&PINA)
#endif
#if defined (PORTB)
#define PORTBbits (*(volatile BIT8_T *)&PORTB)
#define DDRBbits (*(volatile BIT8_T *)&DDRB)
#define PINBbits (*(volatile BIT8_T *)&PINB)
#endif
#if defined (PORTC)
#define PORTCbits (*(volatile BIT8_T *)&PORTC)
#define DDRCbits (*(volatile BIT8_T *)&DDRC)
#define PINCbits (*(volatile BIT8_T *)&PINC)
#endif
#define _DDR(id, pin) DDR ## id ## bits.B ## pin
#define _PORT(id, pin) PORT ## id ## bits.B ## pin
//port functions
#define DDR(pin) _DDR(pin)
#define PORT(pin) _PORT(pin)
#define pinLED B, 5//pinLED on portB.5
//set pinLED as output
DDR(pinLED) = 1;
//set pinLED
PORT(pinLED) = 1;
...
//flip pinLED
PORT(pinLED) ^= 1;
I only extended the definitions to PORTA/B/C, but you can easily expand it to cover other ports / registers.
yurinacn 发表于 2012-10-29 10:48 static/image/common/back.gif
用惯了一样,还可以装b
不过除51外的单片机几乎都是这样操作,建议学习。还有助于加 ...
哈哈,赶上公司有块板子,学习学习。 {:smile:}习惯就好啊 51 IO操作是简单,但功能不够强呀
页:
[1]