打印

这个函数前两句如何理解

[复制链接]
498|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 | 只看该作者
高级语言不像汇编,没有直接操作寄存器位的指令

使用特权

评论回复
5
wyjie| | 2022-7-9 19:55 | 只看该作者
所以只能对整个寄存器进行读写,与运算是清除0对应的寄存器位,维持1对应的位不变

使用特权

评论回复
6
zhanglli| | 2022-7-9 19:59 | 只看该作者
或运算是设置1对应的寄存器位,保持0对应的位不变

使用特权

评论回复
7
huangchui| | 2022-7-9 20:07 | 只看该作者
channel&=0b00001111;               //通道选择取齐 0-15
    ADCON0&=0b11000011;          //清除通道
    ADCON0|=(channel<<2);        // 设置通道

使用特权

评论回复
8
dengdc|  楼主 | 2022-7-9 20:10 | 只看该作者

嗯,我再好好缕一缕吧,有了好消息及时通知大家

使用特权

评论回复
9
cyclefly| | 2022-7-10 20:14 | 只看该作者
等好消息了

使用特权

评论回复
10
nongshengjiang| | 2022-7-10 21:16 | 只看该作者
唉呀妈呀

使用特权

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

本版积分规则

892

主题

13885

帖子

7

粉丝