利用实验板上的ADC0809做A/D转换器,实验板上的电位器提供模拟量输入,编制程序,将模拟量转换成二进制数字量,用8255的PA口输出到发光二极管显示IN0 电位器输出 AD_CS CS0 EOC INT0 8255_CS CS1 PA0 L0 PA1 L1 PA2 L2 PA3 L3 PA4 L4 PA5 L5 PA6 L6 PA7 L7
时间: 2023-06-12 14:08:28 浏览: 175
下面是一个简单的程序,用于将ADC0809的模拟量输入转换为二进制数字,并通过8255的PA口输出到发光二极管显示:
```c
#include <reg51.h>
sbit AD_CS = P3^4; // 定义ADC0809的CS引脚
sbit EOC = P3^5; // 定义ADC0809的EOC引脚
sbit INT0 = P3^2; // 定义ADC0809的INT0引脚
sbit CS = P3^6; // 定义8255的CS引脚
sfr P0M1 = 0x93; // 定义P0口的模式寄存器1
sfr P0M0 = 0x94; // 定义P0口的模式寄存器0
void delay(int t) { // 延时函数
int i,j;
for(i=0; i<t; i++)
for(j=0; j<120; j++);
}
void write8255(char addr, char data) { // 向8255写入数据
CS = 0;
P0 = addr;
P0M1 = 0x00;
P0M0 = 0xFF;
CS = 1;
P0 = data;
P0M1 = 0x00;
P0M0 = 0xFF;
CS = 0;
}
void main() {
char i, adc_data;
AD_CS = 1;
INT0 = 1;
CS = 0;
while (1) {
AD_CS = 0; // 启动ADC0809
delay(1);
AD_CS = 1;
while (EOC); // 等待转换完成
INT0 = 0; // 读取转换结果
adc_data = P1;
INT0 = 1;
for (i = 0; i < 8; i++) { // 输出二进制数到发光二极管
write8255(0x80, adc_data & 0x01);
adc_data >>= 1;
}
delay(100);
}
}
```
程序中的核心部分是通过轮询ADC0809的EOC引脚来等待转换完成,然后读取P1口的数据寄存器,将其转换为二进制数后通过write8255函数输出到8255的PA口。其中write8255函数用于向8255写入数据,可以根据需要修改。本程序中,8255的CS引脚接在P3.6,PA口接在P0口。
阅读全文