文档介绍:说
明
书
题目:89C52单片机采用中断方式实现A/D转换
姓名:郑巍
学号:201103740001
班级:2011级机械(1)班
指导老师:谢剑刚
2011年12月 14日
题目要求
编写一个完备的程序,间隔一定时间依次对8路输入IN0-IN7进行采样,采样结果要求压入堆栈,采集5组数据,并将每一路采集的5组数据求和后取平均值,依次放入R0-R7。要求使用89c52单片机和ADC0809转换器,采用中断方式采集数据,并完成电路图,流程图,汇编程序以及对应的机器码和解释语言。
电路图
图1 电路图
3 流程图
主程序流程图
开始
输入数据累加的高位起始地址30H送R0
输入数据累加的低位起始地址31H送R1
输入数据计数指针05H送R3
输入通道计数值08H送R4
开启CPU中断
允许中断
(即为边沿触发)
输入ADC0809的首地址送DPTR
启动A/D转换
等待中断
中断数据处理求和
N
Y
调用子程序取平均值
结束
将平均值分别送入对应的存储单元
8路数据取平均值?
中断服务程序流程图
数据采样
对转换后的模拟量与地位相加
将和存于低位
进位?
Y
高位加1
N
指向下一存储单元
指向下一模拟通道
启动下一A/D转换
中断返回
8路通道转换?
N
Y
5组数据采集?
Y
N
子程序流程图
A,余数,商单元分别清零
输入左循环次数16
清位
被除数低位左移
被除数高位左移
被除数高位移入余数单元
余数左移
余数减除数
够减?
商加1
相减结果存入余数单元
循环16次?
子程序返回
N
Y
Y
N
4 程序清单
程序代码
注释
机器码(H)
ORG 0000H
LJMP MAIN
ORG 2000H
从2000H地址开始安排如下程序
MAIN:
MOV R0,#30H
数据累加的高位
78 30
MOV R1,#31H
数据累加的低位
79 31
MOV R3,#05H
5组数据计数指针
7B 05
MOV R4,#08H
8通道计数值
7E 08
SETB IT1
边沿触发方式
D2 8A
SETB EA
允许全局中断
D2 AF
SETB EX1
允许外部中断1
D2 AA
LOOP:
MOV R0,#30H
数据累加的高位
78 30
MOV R1,#31H
数据累加的低位
79 31
MOV DPTR #0FEF8H
ADC0809的首地址
90 FEF8
MOVX ***@DPTR,A
启动A/D转换
F0
INTER:
LJMP INTER
等待中断
80 INTER
ORG 0013H
外部中断1程序入口地址
MOVX A,***@DPTR
数据采样
E0
ADDC A,***@R1
对转换后的模拟量与低位相加
37
MOV ***@R1,A
存低位
F6
JNC QQ
判断进位,无进位则转移
50 QQ
INC ***@R0
有进位,则高位加1
06
QQ:
INC R0
指向下一存储单元
08
INC R0
指向下一存储单元
08
INC R1
指向下