16F877 PIC单片机A/D转换C语言编程实战

5星 · 超过95%的资源 需积分: 10 3 下载量 67 浏览量 更新于2024-09-17 收藏 124KB DOC 举报
"本文档是关于PIC单片机使用C语言进行A/D转换编程的实例教程,主要针对16F877型号的单片机,介绍了如何初始化A/D转换,以及如何处理转换结果。文中通过示例代码详细讲解了A/D转换的初始化过程,并利用共用体来存储转换结果。此外,还包含了系统的I/O口初始化、延时子程序、报警子程序和中断服务程序的实现。" 在这个教程中,我们学习了如何在基于16F877的PIC单片机上应用A/D转换。A/D(模拟到数字)转换是将连续的模拟信号转换为离散的数字信号的过程,这对于处理传感器数据和其他物理测量值至关重要。在16F877单片机中,A/D转换的初始化是通过配置ADCON0和ADCON1寄存器完成的。 初始化A/D转换的关键步骤包括: 1. 设置ADCON0寄存器:在本例中,`ADCON0 = 0x51`,这选择了A/D通道RA2,开启了A/D转换器,并设置了转换时钟为8个系统时钟周期(8tosc)。 2. 配置ADCON1寄存器:`ADCON1 = 0X80`,这使得转换结果右移,ADRESH寄存器的高6位清零,并将RA2设置为模拟输入模式。 3. 允许A/D转换中断:通过设置`ADIE = 1`和`PEIE = 1`,允许A/D转换中断和外围中断。 在C语言编程中,为了处理A/D转换的10位结果,作者使用了一个共用体(union),`union adres`,它包含一个整型变量`y1`和两个字节型数组`adre[2]`。这样可以方便地访问和存储转换结果的高低字节。 除了A/D转换初始化,教程还提供了系统I/O口初始化的子程序,将D口配置为输出。延时子程序使用循环来实现固定时间的延迟,而报警子程序通过异或操作改变并输出D口的值来实现报警功能。 中断服务程序`void interrupt adint(void)`中,当A/D转换完成时,首先清除中断标志`ADIF = 0`,然后读取并存储A/D转换的低字节`ADRESL`和高字节`ADRESH`到共用体中。 通过这个实例,开发者能够学习到如何在实际项目中实现和管理A/D转换,以及如何结合中断系统处理转换结果,为基于PIC单片机的嵌入式系统开发提供了实用的指导。