单片机试编程用中断方式读回A/D结果
时间: 2023-07-24 14:25:11 浏览: 116
单片机通过A/D转换器将模拟量转换为数字量,我们可以通过编程的方式读取A/D转换器的结果。中断方式读回A/D结果可以提高程序的响应速度,以下是一个使用中断方式读回A/D结果的示例程序:
```c
#include <reg52.h>
sbit AD_START = P3^7; // A/D转换开始触发信号
sbit AD_RESULT = P3^6; // A/D转换结果标志
unsigned int AD_value; // 存储A/D转换结果
void AD_init()
{
TMOD |= 0x01; // 定时器0工作在模式1
TH0 = 0xFC; // 定时器0计数初值
TL0 = 0x67;
TR0 = 1; // 启动定时器0
ET0 = 1; // 允许定时器0中断
EA = 1; // 开启总中断
}
void AD_interrupt() interrupt 1
{
if (AD_RESULT == 0) // 判断A/D转换是否完成
{
AD_value = (unsigned int)(ADRESH << 8) + ADRESL; // 读取A/D转换结果
AD_RESULT = 1; // 清除A/D转换结果标志
AD_START = 1; // 启动下一次A/D转换
}
}
void main()
{
AD_init(); // 初始化A/D转换模块
AD_START = 1; // 启动A/D转换
while(1)
{
// 等待A/D转换完成
while (!AD_RESULT);
// 处理A/D转换结果
// ...
AD_RESULT = 0; // 清除A/D转换结果标志
AD_START = 1; // 启动下一次A/D转换
}
}
```
在这个示例程序中,我们使用定时器0来触发A/D转换,定时器0每次中断时启动一次A/D转换,当A/D转换完成后,程序将读取A/D转换结果,并进行处理。读取A/D转换结果的代码在中断函数中处理,而不是在主函数中处理,这样可以避免程序在读取A/D转换结果时被阻塞。