[PIC®/AVR®/dsPIC®产品] 这个函数前两句如何理解

[复制链接]
797|4
 楼主| chuandaoxy 发表于 2020-12-9 10:00 | 显示全部楼层 |阅读模式
unsigned int read_a2d(unsigned char channel)

  {
    unsigned int temp;

    channel&=0b00001111;               //A2D通道选择
    ADCON0&=0b11000011;
    ADCON0|=(channel<<2);

}
我的AD管脚设置如下
   TRISA = 0b00000011;        /* RA0,RA1 */模拟输入
    TRISB = 0b00100000;        /* RB4,RB6,RB7(TX)、RB5(RX)*/
    TRISC = 0b00000111;        /* RC0,RC1,RC2 */模拟输入

和上面的函数如何对应?
ayb_ice 发表于 2020-12-9 10:27 | 显示全部楼层
因为只想修改寄存器中的某些位,所有通过与或操作实现,不能直接赋值而已
箫声欲碎 发表于 2020-12-10 11:14 | 显示全部楼层
我认为是输入的channel是正常输入1~8这样的数字,但通道选择位是在ADCON0的2~5bit,所以不能直接赋值1~8.
zlf1208 发表于 2020-12-11 11:14 | 显示全部楼层
高级语言不像汇编,没有直接操作寄存器位的指令,所以只能对整个寄存器进行读写,与运算是清除0对应的寄存器位,维持1对应的位不变;或运算是设置1对应的寄存器位,保持0对应的位不变。
lcczg 发表于 2020-12-11 15:29 | 显示全部楼层
   channel&=0b00001111;               //通道选择取齐 0-15
    ADCON0&=0b11000011;          //清除通道
    ADCON0|=(channel<<2);        // 设置通道
您需要登录后才可以回帖 登录 | 注册

本版积分规则

856

主题

1046

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部