angmall 发表于 2020-8-25 20:35 您好!请问在ADC程序里,能解释一下为什么是*500而不是1023呀? num=tp*1.0/255*500; |
angmall 发表于 2020-8-25 20:35 您好!请问在ADC程序里,能解释一下第24为什么是*500而不是1023呀? num=tp*1.0/255*500; |
青桑叶 发表于 2020-8-25 13:03 使用两路做ADC,ADC_CONTR是不是要重复写两次,还是能更简单点呢 ADC_CONTR=XXXX1101; ADC_CONTR=XXXX1110; |
YUANYUXING 发表于 2020-8-25 21:10 就是把 ADC_CONTR=0x80 改为 ADC_CONTR=0x8B就可以正常显示电压了吗?我这几天也在看这款单片机。片内1.19V的LDO怎么用呢 |
青桑叶 发表于 2020-8-26 08:14 谢谢,已经解决了,可以直接使用ADC_RES的数据的。STC8G的手册上说的,这款是新上市的单片机,和之前的有些区别。 |
dalaoshi 发表于 2020-8-25 21:48 谢谢,已经解决了。 |
| 转换出来的数据的对齐格式是:左对齐; 不能直接使用ADC_RES 的数据吧? |
|
STC8G与STC12的AD不同之处在于有一个叫ADCTIM的寄存器,放在很远的地址,需要用DPTR才能赋值。 INITADC: MOV P_SW2,#80H ;访问X寄存器打开 MOV DPTR,#ADCTIM; ;设置 ADC 内部时序 #0FEA8H 这是厂家的数值 MOV A,#3FH ;必须通过A才能送到 MOVX @DPTR,A MOV P_SW2,#00H ;访问X寄存器关闭 MOV ADCCFG,#0FH ;设置 ADC 时钟为系统时钟/2/XXXX 16=慢,8=快 B6决定结果的格式 ;MOV ADC_CONTR,#10001111B ;使能 ADC 模块, #1000 CCCC B 通道暂定16 为内部参考电压1.91V MOV ADC_CONTR,#10001101B ;使能 ADC 模块, #1000 CCCC B 通道13 X ;MOV ADC_CONTR,#10001100B ;使能 ADC 模块, #1000 CCCC B 通道12 Y ;MOV ADC_CONTR,#10001010B ;使能 ADC 模块, #1000 CCCC B 通道10 MIC NOP NOP NOP RET |
angmall 发表于 2020-8-25 20:35 一切正常了,原来是ADC控制寄存器配置错了,ADC_CONTR=0x8B; //P3^3为ADC口 ADC_CONTR=1XXX1011 难怪我怎么改P3口的配置就是不行。谢谢老大! |
angmall 发表于 2020-8-25 20:35 一切正常了,原来是ADC控制寄存器配置错了, ADC_CONTR=0x8B; //P3^3为ADC口 ADC_CONTR=1XXX1011 难怪我怎么样改P3口配置就是不行。谢谢老大! |
给你改了一下试试。 对比一下就知道哪里错了。
|
| 参与人数 1 | 黑币 +12 | 收起 理由 |
|---|---|---|
|
| + 12 | 回帖助人的奖励! |
青桑叶 发表于 2020-8-25 13:03 我试一下,谢谢 |
angmall 发表于 2020-8-25 13:13 还是不行,P3^3口怎么修改都是显示00.00,我是用P3^3口采集5V信号显示在数码管上的。单片机用的是STC8G1K08的TSSOP20封装的,我把代码传上去,帮忙看一下是哪里出了问题。
|
xqleft 发表于 2020-8-25 12:12 感谢师傅赐教! |
我给你来个程序试试
|
| 包括这两个设置 P3M0=00000000; P3M1=00001000(高阻);ADC_CONTR=XXXX1101; |
| 这个要初始化程序;首先 要把IO口最优先级的设置为输入,且不开上拉.其次,就是配置ADC寄存器.比如说通道,你的是通道几就配置通道机,还有就是采样频率,等这些寄存器一定要配置好,因为这个配置一旦配置好就不能改变.最后就是写采集的程序了.程序的话就是采集中和采集后,初始化是采集前. 采集中就等待采集完成.采集完成以后把采集出来的值转换成我们需要的10进制,因为一般情况下采集出来的是2进制的值. 再最后我们利用这个只来做比较,比如低电压报警,或者利用这个值来调光,调速等一系列的. |
|
最近测试了一下stc8G的ADC功能,想单独使用某一个口采集一路信号,比如P3^3口,怎样设置IO口? |