专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
PIC单片机两路模拟量编程求助
2019-03-25 18:55
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
PIC单片机
12836
6
1744
哪位大神能帮忙给个PIC单片机两路模拟量的编程例子学习一下啊,谢谢
此帖出自
小平头技术问答
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
nmg
1楼-- · 2019-03-26 00:54
帮你呼叫丁丁版主
@dingzy_2002
加载中...
dingzy_2002
2楼-- · 2019-03-26 04:14
要汇编的还是C的?
一、汇编例程(PIC16F883):
①主程序(节选自我自己的一款车用仪表程序)
;-----------------
;油量AD转换及累加
MOVLW FUEL_CH
CALL AD_CONV
ADDWF FUEL_DA_COMPL ;数据与上50MS平均数据进行平均
MOVFW ADRESH
BTFSC STATUS,C
INCF ADRESH,W
ADDWF FUEL_DA_COMPH
RRF FUEL_DA_COMPH
RRF FUEL_DA_COMPL
MOVFW FUEL_DA_COMPL ;平均后的数据进行累加
ADDWF FUEL_DAL
MOVFW FUEL_DA_COMPH
BTFSC STATUS,C
INCF FUEL_DA_COMPH,W
ADDWF FUEL_DAH
②子程序
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;32微秒延时,并开启AD转换,检测AD转换成功子程序
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
AD_CONV: MOVWF ADCON0
BSF ADCON0,ADON
CLRF R7
DECFSZ R7
GOTO $-1
BSF ADCON0,GO_DONE
BTFSC ADCON0,GO_DONE
GOTO $-1
BSF STATUS,RP0
MOVFW ADRESL
CLRF STATUS
BCF ADCON0,ADON
RETURN
加载中...
dingzy_2002
3楼-- · 2019-03-26 07:29
本帖最后由 dingzy_2002 于 2016-8-25 09:28 编辑
二、C语言版:
①运算函数
void ad_opt(void)
{
uint8_t ang_da,comp_da,ang_value=0,count;
uint16_t i;
//油量AD转换并累加:
i=adc10_conv(fuel_ch);
fuel_data_add+=i;
if(fuel_ad_max<i)
fuel_ad_max=i;
if(fuel_ad_min>i)
fuel_ad_min=i;
}
②子函数:
/*---------------------------------------------
函数名: uint16_t adc10_conv(uint8_t ad_ch)
描述: AD转换函数(10位结果)
输入: 要进行转换的通道
输出: 转换后的数据
---------------------------------------------*/
uint16_t adc10_conv(uint8_t ad_ch)
{
uint16_t ad_value;
ADFM = 1; //结果右对齐
ADCON0 = ad_ch; //
ADON = 1; //打开AD模块
delay_5us;
GO = 1; //启动转换
while(GO) ; //等待转换完成
ADON = 0; //关闭AD模块
ad_value = (uint16_t)(ADRESL | (ADRESH << 8)); //注意是10位的转换精度 value、temph应为unsigned int 变量
return(ad_value);
}
/*---------------------------------------------
函数名: uint16_t adc8_conv(uint8_t ad_ch)
描述: AD转换函数(8位结果)
输入: 要进行转换的通道
输出: 转换后的数据
---------------------------------------------*/
uint8_t adc8_conv(uint8_t ad_ch)
{
ADFM = 0; //结果左对齐
ADCON0 = ad_ch; //
ADON = 1; //打开AD模块
delay_5us;
GO = 1; //启动转换
while(GO) ; //等待转换完成
ADON = 0; //关闭AD模块
return(ADRESH);
}
/*---------------------------------------------*/
/*文件结束*/
加载中...
809930477
4楼-- · 2019-03-26 09:50
精彩回答 2 元偷偷看……
加载中...
jinhai4385
5楼-- · 2019-03-26 14:44
谢谢分享!正在学习.....
加载中...
ysyhj
6楼-- · 2019-03-26 17:54
tWord adc10_conv(tByte ad_ch)
加载中...
一周热门
更多
>
相关问题
相关文章
一种用PIC单片机主时钟驱动的老式挂钟
0个评论
单片机程序必知的几个寄存器
0个评论
单片机 矩阵式按键
0个评论
51单片机上移植C语言的printf()
0个评论
STC89C52MCU--软件实现系统复位
0个评论
单片机C语言程序该这样写!不是教科书上教的那样!转[]
0个评论
单片机并行I/O口(P0)硬件结构
0个评论
壹:单片机的内部资源
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
@dingzy_2002
一、汇编例程(PIC16F883):
①主程序(节选自我自己的一款车用仪表程序)
;-----------------
;油量AD转换及累加
MOVLW FUEL_CH
CALL AD_CONV
ADDWF FUEL_DA_COMPL ;数据与上50MS平均数据进行平均
MOVFW ADRESH
BTFSC STATUS,C
INCF ADRESH,W
ADDWF FUEL_DA_COMPH
RRF FUEL_DA_COMPH
RRF FUEL_DA_COMPL
MOVFW FUEL_DA_COMPL ;平均后的数据进行累加
ADDWF FUEL_DAL
MOVFW FUEL_DA_COMPH
BTFSC STATUS,C
INCF FUEL_DA_COMPH,W
ADDWF FUEL_DAH
②子程序
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;32微秒延时,并开启AD转换,检测AD转换成功子程序
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
AD_CONV: MOVWF ADCON0
BSF ADCON0,ADON
CLRF R7
DECFSZ R7
GOTO $-1
BSF ADCON0,GO_DONE
BTFSC ADCON0,GO_DONE
GOTO $-1
BSF STATUS,RP0
MOVFW ADRESL
CLRF STATUS
BCF ADCON0,ADON
RETURN
二、C语言版:
①运算函数
void ad_opt(void)
{
uint8_t ang_da,comp_da,ang_value=0,count;
uint16_t i;
//油量AD转换并累加:
i=adc10_conv(fuel_ch);
fuel_data_add+=i;
if(fuel_ad_max<i)
fuel_ad_max=i;
if(fuel_ad_min>i)
fuel_ad_min=i;
}
②子函数:
/*---------------------------------------------
函数名: uint16_t adc10_conv(uint8_t ad_ch)
描述: AD转换函数(10位结果)
输入: 要进行转换的通道
输出: 转换后的数据
---------------------------------------------*/
uint16_t adc10_conv(uint8_t ad_ch)
{
uint16_t ad_value;
ADFM = 1; //结果右对齐
ADCON0 = ad_ch; //
ADON = 1; //打开AD模块
delay_5us;
GO = 1; //启动转换
while(GO) ; //等待转换完成
ADON = 0; //关闭AD模块
ad_value = (uint16_t)(ADRESL | (ADRESH << 8)); //注意是10位的转换精度 value、temph应为unsigned int 变量
return(ad_value);
}
/*---------------------------------------------
函数名: uint16_t adc8_conv(uint8_t ad_ch)
描述: AD转换函数(8位结果)
输入: 要进行转换的通道
输出: 转换后的数据
---------------------------------------------*/
uint8_t adc8_conv(uint8_t ad_ch)
{
ADFM = 0; //结果左对齐
ADCON0 = ad_ch; //
ADON = 1; //打开AD模块
delay_5us;
GO = 1; //启动转换
while(GO) ; //等待转换完成
ADON = 0; //关闭AD模块
return(ADRESH);
}
/*---------------------------------------------*/
/*文件结束*/
一周热门 更多>