AVR单片机怎么样位操作?比如对PA0写1,对PA1写0,其它引脚不变?
include<iom16V.h>#include<macros.h>#defineLCD_PORTPORTA#defineHI_LCD_A0PORTC|=BIT(0)#...
include <iom16V.h>
#include <macros.h>
#define LCD_PORT PORTA
#define HI_LCD_A0 PORTC|=BIT(0)
#define LO_LCD_A0 PORTC&=~BIT(0)
#define HI_LCD_A1 PORTC|=BIT(1)
#define LO_LCD_A1 PORTC&=~BIT(1)
#define HI_LCD_A2 PORTC|=BIT(2)
#define LO_LCD_A2 PORTC&=~BIT(2)
#define HI_LCD_A3 PORTC|=BIT(3)
#define LO_LCD_A3 PORTC&=~BIT(3)
#define HI_LCD_A4 PORTC|=BIT(4)
#define LO_LCD_A4 PORTC&=~BIT(4)
#define HI_LCD_WR PORTC|=BIT(5)
#define LO_LCD_WR PORTC&=~BIT(5)
#define busy PC6
//写X坐标子程序
void write_lcd_x_location(unsigned int wr_dat)
{
HI_LCD_A0;
LO_LCD_A0;
LO_LCD_A3;
LO_LCD_A4;
LO_LCD_A1;
LCD_PORT=(wr_dat&0x00ff); //写低八位
asm("nop");
LO_LCD_WR;
LCD_PORT=((wr_dat>>8)&0x0003); //写高两位
asm("nop");
HI_LCD_WR;
这样写不对吧? 展开
#include <macros.h>
#define LCD_PORT PORTA
#define HI_LCD_A0 PORTC|=BIT(0)
#define LO_LCD_A0 PORTC&=~BIT(0)
#define HI_LCD_A1 PORTC|=BIT(1)
#define LO_LCD_A1 PORTC&=~BIT(1)
#define HI_LCD_A2 PORTC|=BIT(2)
#define LO_LCD_A2 PORTC&=~BIT(2)
#define HI_LCD_A3 PORTC|=BIT(3)
#define LO_LCD_A3 PORTC&=~BIT(3)
#define HI_LCD_A4 PORTC|=BIT(4)
#define LO_LCD_A4 PORTC&=~BIT(4)
#define HI_LCD_WR PORTC|=BIT(5)
#define LO_LCD_WR PORTC&=~BIT(5)
#define busy PC6
//写X坐标子程序
void write_lcd_x_location(unsigned int wr_dat)
{
HI_LCD_A0;
LO_LCD_A0;
LO_LCD_A3;
LO_LCD_A4;
LO_LCD_A1;
LCD_PORT=(wr_dat&0x00ff); //写低八位
asm("nop");
LO_LCD_WR;
LCD_PORT=((wr_dat>>8)&0x0003); //写高两位
asm("nop");
HI_LCD_WR;
这样写不对吧? 展开
3个回答
展开全部
看你使用什么样的编译器啦,
如果是使用的IAR的,是可以直接位操作的,就像51单片机那样的。
如果是WinAVR的,可以这样子操作
#define SetBit( __port, __bit ) __port |= ( 1<<__bit )
#define ClrBit( __port, __bit ) __port &= ~( 1<<__bit )
对PA0写1 SetBit( PORTA, PA0 )
对PAr1写0 ClrBit( PORTA, PA1 )
这样子就可以了,
如果是使用的IAR的,是可以直接位操作的,就像51单片机那样的。
如果是WinAVR的,可以这样子操作
#define SetBit( __port, __bit ) __port |= ( 1<<__bit )
#define ClrBit( __port, __bit ) __port &= ~( 1<<__bit )
对PA0写1 SetBit( PORTA, PA0 )
对PAr1写0 ClrBit( PORTA, PA1 )
这样子就可以了,
追问
我用的是ICCAVR
追答
IICAVR跟WinAVR很相似,那样写没错啊,
BIT是编译器提供的一个宏来的
#define BIT( __bit ) ( 1<<__bit )
展开全部
#define PA0 0
#define PA1 1
PORTA |= 1<<PA0;//写1
PORTA &= ~(1<<PA1);//写0
#define PA1 1
PORTA |= 1<<PA0;//写1
PORTA &= ~(1<<PA1);//写0
追问
谢谢您的回答,我现在是PB0-PB4分别接的LCD 的A0-A4,
要求是PB=0000 1101 或者PB=0000 0101 或PB=0000 0010,该怎么控制?
我现在用的指令是:比如想让PB=XXXX 001X ; PORTB&=0B11100001;
PORTB|=0B00000100;
追答
PB=XXXX 001X:
PORTB &= ~(0x07 << 1);
PORTB |= 1 << 1;
其实么都一样的,通过公式么,你可以把一些参数直接放公式里去,可操作性,可读性强一点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
BIT()是个宏 你可以看看源文件
PORTA |= 1<<0;//PORTA的bit0写1
PORTA &= ~(1<<0);//PORTA的bit0写0
PORTA |= 1<<0;//PORTA的bit0写1
PORTA &= ~(1<<0);//PORTA的bit0写0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询