AVR单片机端口赋值问题
时间:10-02
整理:3721RD
点击:
我应用的单片机是Atmeg16,在一本书上我看到对某一端口赋值8位二进制数,
void HC164_send_byte(unsigned char byte) //这里写的是一个串口扩展的发送函数
{
unsigned char i ;
for (i = 0;i<=7;i++)
{
PORTA.0 = byte & 1 << i //这是什么意思呢,一个八位的char类型的数值赋值给某一个端口,它是怎样工作的呢?还请哪位高手给解释一下,在此谢过!
}
}
void HC164_send_byte(unsigned char byte) //这里写的是一个串口扩展的发送函数
{
unsigned char i ;
for (i = 0;i<=7;i++)
{
PORTA.0 = byte & 1 << i //这是什么意思呢,一个八位的char类型的数值赋值给某一个端口,它是怎样工作的呢?还请哪位高手给解释一下,在此谢过!
}
}
这个程序是串口传输一个8位的无符号数,低位开始传输。“<<”左移的优先级比“&”与的优先级高,以此先执行 1<<i 操作。就是 1(十六进制为 0x01)左移 i 位。依次得出的结果为 0x00,0x01,0x02,0x04,0x08……(十六进制表示),再和 byte与则等到对应的位。PORTA.0 = byte & 1 << i 就是分别取byte的每一位,通过PORTA.0传送出去,最低位开始传输。
补充一下,(byte & (1 << i ))为0时PORTA.0端口输出0,非0时输出为1,以此实现串口输出。
2楼正解,如果LZ还不解,你应该去看一下串口通信,了解了串口是怎么送发数据了,那应该就清楚了,原理就重要,了解了原理,学习起来就容易多了
谢谢各位的点播