打印

STC手册里的A/D 转换测试程序,有几处不懂

[复制链接]
1210|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1、P1 = P1 | 0x63; 为什么要把AD转换的那几个脚设为高啊?直接设置寄存器不行吗?
2、delay(0X200)是什么意思啊,是地址吗?延时时间是0X200按16位数算转为10进制吗?

void main()
{
initiate_RS232();
P1 = P1 | 0x63; // 0110,0011,要设置为 A/D 转换的P1.x 口,先设为高
P1_ADC_EN = 0x63; //0110,0011, P1 的P1.0,P1.1,P1.5,P1.6 设置为 A/D 转换输入脚
// 断开P1.0,P1.1,P1.5,P1.6 内部上拉电阻
while(1)
{
Send_Byte(get_AD_result(0)); //P1.0 为 A/D 当前通道, 测量并发送结果
delay(0x200);
Send_Byte(get_AD_result(1)); //P1.1 为 A/D 当前通道, 测量并发送结果
delay(0x200);
Send_Byte(get_AD_result(5)); //P1.5 为 A/D 当前通道, 测量并发送结果
delay(0x200);
Send_Byte(get_AD_result(6)); //P1.6 为 A/D 当前通道, 测量并发送结果
delay(0x200);
Send_Byte(0); // 连续发送 4 个 00H, 便于观察输出显示
Send_Byte(0);
Send_Byte(0);
Send_Byte(0);
delay(0x200); // 延时
delay(0x200);
delay(0x200);
delay(0x200);
delay(0x200);
delay(0x200);
}
}

相关帖子

沙发
han52414133|  楼主 | 2014-7-2 16:27 | 只看该作者
另外初始化里
RCAP2H = 0xFF; // 时钟11.0592MHz, 9600 波特率
RCAP2L = 0xDB;
这两句的数我怎么算的和他不一样啊?


void initiate_RS232 (void) // 串口初始化
{
ES = 0; // 禁止串口中断
SCON = 0x50; // 0101,0000 8 位数据位, 无奇偶校验
T2CON = 0x34; // 0011,0100, 由T2 作为波特率发生器
RCAP2H = 0xFF; // 时钟11.0592MHz, 9600 波特率
RCAP2L = 0xDB;
ES = 1; // 允许串口中断
}

14.bmp (365.39 KB )

14.bmp

使用特权

评论回复
板凳
dirtwillfly| | 2014-7-2 22:02 | 只看该作者
建议楼主直接问厂家

使用特权

评论回复
评论
ccmc 2014-7-3 20:46 回复TA
他不买个几百k的量,老姚不会鸟他的 
地板
roykin| | 2014-7-4 19:34 | 只看该作者
我先回答你的第一个问题:
首先你要了解STC里面自带8路8位的ADC。什么叫8路8位?就是说可以设置为8个输入模拟信号,每个模拟信号转化成数字信号有8位。
sfr P1_ADC_EN = 0x97; //A/D转换功能允许寄存器
在这里sfr 是用于定义特殊寄存器的关键字。
然后开启AD功能要做到两个前提步骤:1.把相关AD端口相对应的相关引脚变成高阻态2.把相关AD端口使能。

第二个问题 0X什么的都是16进制,如果换算十进制,那你就用16*16*2来代替吧 反正都一样。

使用特权

评论回复
5
han52414133|  楼主 | 2014-7-7 08:44 | 只看该作者
roykin 发表于 2014-7-4 19:34
我先回答你的第一个问题:
首先你要了解STC里面自带8路8位的ADC。什么叫8路8位?就是说可以设置为8个输入模 ...

谢谢了,再麻烦能看一下二楼的问题吗

使用特权

评论回复
6
roykin| | 2014-7-7 22:59 | 只看该作者
han52414133 发表于 2014-7-7 08:44
谢谢了,再麻烦能看一下二楼的问题吗

那个问题。。其实我计算出来的是FFDC...与参考代码相差一。
不知道你的那个软件是怎么计算的。

使用特权

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

本版积分规则

41

主题

147

帖子

0

粉丝