打印
[PIC®/AVR®/dsPIC®产品]

这个函数前两句如何理解

[复制链接]
616|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对应的位不变。

使用特权

评论回复
5
lcczg| | 2020-12-11 15:29 | 只看该作者
   channel&=0b00001111;               //通道选择取齐 0-15
    ADCON0&=0b11000011;          //清除通道
    ADCON0|=(channel<<2);        // 设置通道

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

855

主题

1044

帖子

4

粉丝