这个函数前两句如何理解

[复制链接]
667|9
 楼主| dengdc 发表于 2022-7-9 19:41 | 显示全部楼层 |阅读模式
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 */模拟输入

和上面的函数如何对应?
supernan 发表于 2022-7-9 19:43 | 显示全部楼层
因为只想修改寄存器中的某些位,所有通过与或操作实现,不能直接赋值而已
renyaq 发表于 2022-7-9 19:46 | 显示全部楼层
我认为是输入的channel是正常输入1~8这样的数字,但通道选择位是在ADCON0的2~5bit,所以不能直接赋值1~8.
heweibig 发表于 2022-7-9 19:49 | 显示全部楼层
高级语言不像汇编,没有直接操作寄存器位的指令
wyjie 发表于 2022-7-9 19:55 | 显示全部楼层
所以只能对整个寄存器进行读写,与运算是清除0对应的寄存器位,维持1对应的位不变
zhanglli 发表于 2022-7-9 19:59 | 显示全部楼层
或运算是设置1对应的寄存器位,保持0对应的位不变
huangchui 发表于 2022-7-9 20:07 | 显示全部楼层
channel&=0b00001111;               //通道选择取齐 0-15
    ADCON0&=0b11000011;          //清除通道
    ADCON0|=(channel<<2);        // 设置通道
 楼主| dengdc 发表于 2022-7-9 20:10 | 显示全部楼层

嗯,我再好好缕一缕吧,有了好消息及时通知大家
cyclefly 发表于 2022-7-10 20:14 | 显示全部楼层
等好消息了
nongshengjiang 发表于 2022-7-10 21:16 来自手机 | 显示全部楼层
唉呀妈呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则

892

主题

13885

帖子

7

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