收藏 分销(赏)

飞思卡尔8位单片机MC9S0809程序MC68HC908GP32MCUAD转换编程实例.doc

上传人:xrp****65 文档编号:7691960 上传时间:2025-01-12 格式:DOC 页数:5 大小:53KB
下载 相关 举报
飞思卡尔8位单片机MC9S0809程序MC68HC908GP32MCUAD转换编程实例.doc_第1页
第1页 / 共5页
飞思卡尔8位单片机MC9S0809程序MC68HC908GP32MCUAD转换编程实例.doc_第2页
第2页 / 共5页
飞思卡尔8位单片机MC9S0809程序MC68HC908GP32MCUAD转换编程实例.doc_第3页
第3页 / 共5页
飞思卡尔8位单片机MC9S0809程序MC68HC908GP32MCUAD转换编程实例.doc_第4页
第4页 / 共5页
飞思卡尔8位单片机MC9S0809程序MC68HC908GP32MCUAD转换编程实例.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、9.5 MC68HC908GP32 MCU A/D转换编程实例本节给出的A/D转换程序,包含了中值滤波与平均值滤波的复合滤波方式,不含软件滤波的A/D转换程序很少能够实际应用的。本程序中的中值滤波,就是对三次采样值比较大小,取中间的一个。所谓平均值滤波,就是N个采样值求平均。而中值滤波与平均值滤波的复合滤波方式,就是先进行中值滤波,再进行平均值滤波。9.5.1 A/D转换汇编语言编程实例(1)A/D转换有关子程序ADsub.ASM*-*文件描述:本文件包含了A/D转换的3子程序,分别为: * *(1)advalue:获取1路A/D转换结果 *(2)admid:获取中值滤波后的A/D转换结果 *

2、(3)adave:获取均值滤波后的A/D转换结果 *-嵌入式应用技术基础教程-*/*相关位定义COCOBit EQU 7 ;转换完成标志位*advalue:1路A/D转换子程序-*功能描述:对某通道进行A/D转换,结果放入A *入 口:A=通道号 *出 口:A=该通道的A/D转换结果 *堆栈深度:2+1=3 *-*/ advalue: AIS #-!1 AND #%00011111 STA !1,SP ;暂存通道号 ;选取通道ADCH4-ADCH0=00000-00111 LDA ADSCR AND #%11100000 ORA !1,SP STA ADSCR BRCLR COCOBit,AD

3、SCR,* ;取A/D转换结果 LDA ADR AIS #!1 RTS *admid:1路A/D转换子程序(中值滤波)-*功能描述:对某通道进行三次采样,中值滤波结果放入A *入 口:A=通道号 *出 口:A=该通道中值滤波后的A/D转换结果 *堆栈深度:2+5=7 *-*/ admid: PSHX ;保护X AIS #-!4 ;在堆栈区开辟临时变量 STA $4,SP ;暂存通道号 ;取三次A/D转换结果 LDA $4,SP JSR advalue STA !1,SP LDA $4,SP JSR advalue STA !2,SP LDA $4,SP JSR advalue STA !3,S

4、P ;从三次A/D转换结果中取中值 ;取出堆栈前2个数比较,小的放在(SP+1),大的放在(SP+2) LDA !1,SP CMP !2,SP BLS admid1 ;若(SP+1)(SP+2),转admid2 CMP !1,SP ;否则与(SP+1)比较 BHI admid3 LDA !1,SP BRA admid_Exitadmid2:LDA !2,SP BRA admid_Exitadmid3:LDA !3,SPadmid_Exit AIS #!4 ;释放临时变量 PULX ;恢复X RTS*adave:1路A/D转换子程序(均值滤波)-*功能描述:求某通道X次均值滤波结果,并放入A中

5、*入 口:A=通道号 X=平均次数(1-255) *出 口:A=该通道中值滤波后的A/D转换结果 *堆栈深度:2+5=7 *-*/ adave:AIS #-!4 ;在堆栈区开辟临时变量 STX !4,SP ;暂存平均次数 STA !3,SP ;暂存通道号 LDA #!0 ;初始化X次和值 STA !2,SP STA !1,SP ;求X次的和adave_1:LDA !3,SP ;取通道号 JSR admid ADD !1,SP ;相加 STA !1,SP CLRA ADC !2,SP STA !2,SP DBNZX adave_1 ;求平均值 LDA !2,SP ;高位-H PSHA PULH

6、LDA !1,SP ;低位-A LDX !4,SP ;除数-X DIV ;(H:A)/X-A 忽略余数 AIS #!4 ;释放临时变量 RTS(2)A/D转换测试程序汇编主程序实例编号:A04 路径:ASMA04_ AD模数转换实验 (AD.ASM)*-*文 件 名:AD.ASM *硬件连接:PTB0/AD0 接模拟量输入端 *程序描述:获取1路A/D转换结果,并滤波,通过串口发送出去 *目 的:掌握AD转换的基本编程方法 *注 意:用SD-1实验板测试时,把液晶拔出,否则可能影响结果 *-嵌入式应用技术基础教程教学实例-*头文件$include GP32ASM.H*=*主程序 org $80

7、00 ;程序起始地址MainInit: ;复位后程序从此开始执行 ;系统初始化 SEI LDHX #$023F ;堆栈初始化 TXSJSR GP32Init ;调系统初始化子程序GP32InitJSR SCIInit ;调串行口初始化子程序SCIInit;A/D初始化,用内部总线时钟,2分频LDA #%00110000STA ADCLKMainLoop:LDA #$00 ;采集通道0,并求20次的平均值LDX #!20JSR adave ;调A/D转换均值滤波子程序 JSR SCISend1 ;串口发送转换结果 BRA MainLoop *外部子程序存放处,这些子程序都在当前目录中$INCLU

8、DE ADsub.asm$INCLUDE H08SCI.asm $INCLUDE GP32init.asm $INCLUDE SCIInit.asm*中断向量 ORG $FFFE ;复位矢量 DW MainInit9.5.2 A/D转换08C语言编程实例(1)A/D转换有关C语言子函数ADsub.c/*-*文件描述:本文件包含了A/D转换的3个子函数,分别为: *(1)advalue:获取1路A/D转换结果 * unsigned char advalue(unsigned char channel) *(2)admid:获取中值滤波后的A/D转换结果 * unsigned char admid

9、(unsigned char channel) *(3)adave:获取均值滤波后的A/D转换结果 * unsigned char adave(unsigned char n, unsigned char channel) *-嵌入式应用技术基础教程-*/以下为子程序源代码/包含头文件#include GP32C.H#define COCOBit 7 /转换完成标志位/*advalue:1路A/D转换函数-*功能:获取通道channel的A/D转换结果 *参数:channel=通道号 *返回:该通道的A/D转换结果 *-*/unsigned char advalue(unsigned char

10、 channel)/选取通道号ADCH4-ADCH0=00000-00111unsigned char tmp;channel&=0b00011111;tmp=ADSCR&0b11100000;tmp=tmp|channel;ADSCR=tmp;/取A/D转换结果while(1)if(ADSCR&(1j) tmp=i; i=j; j=tmp; if (k=j)tmp=j;elseif (k=i) tmp=k;else tmp=i;return tmp;/*adave:1路A/D转换函数(均值滤波)-*功能:对通道channel的A/D转换结果求n次平均值 *参数:n=平均次数,channel=

11、通道号 *返回:该通道均值滤波后的A/D转换结果 *-*/unsigned char adave(unsigned char n,unsigned char channel)/求n次A/D转换的平均值unsigned char i;unsigned int j;j=0;for (i=0;in;i+)j+=admid(channel);j=j/n;return (unsigned char)j;(2)A/D转换08C测试实例主函数实例编号:C04 路径:CC04_AD模数转换实验 (AD.prj)/*-*工 程 名:AD.prj *硬件连接:PTB0/AD0 接模拟量输入端 *程序描述:获取1路

12、A/D转换结果,并滤波,通过串口发送出去 *目 的:掌握AD转换的基本编程方法 *注 意:用SD-1实验板测试时,把液晶拔出,否则可能影响结果*-嵌入式应用技术基础教程教学实例-*/*头文件*/#include GP32C.H/*函数声明*/extern void SCIInit(void); /串行口函数声明extern void SCISend1(unsigned char o);/有关A/D转换函数声明extern unsigned char adave(unsigned char n,unsigned char channel);extern unsigned char advalue(unsigned char channel);extern unsigned char admid(unsigned char channel);/*主程序*/void main(void)SCIInit(); /串行口初始化ADCLK=0b00110000; /A/D用内部总线时钟,2分频while(1)SCISend1(adave(20,0); /采集、滤波并发送

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服