“8通道10位串行AD转换器MAX192”,Keil开发环境下源程序及工程文件
("8-channel 10-bit serial AD converter MAX192", Keil development environment, source code and project files)
单片机源程序如下:
- /****************************************************************/
- /* 这是调用MAX192编程序(MAX192B.ASM)的C51程序。 */
- /* 文件名为CALL192.C。 */
- /* 功能:本程序主要是读出MAX192芯片输入通道CH0,CH1,...,CH7的模数*/
- /* 转换值,转换值依次放在数组mid1[8]中,转换值的标度变换值放在*/
- /* 浮点数组volt[8]中。MAX192芯片的8个通道可编程为单极性/双极 */
- /* 性和差动/单端工作,这里采用单端\单极性输入。MAX192有内部时 */
- /* 钟和外部时钟两种工作模式,这里采用内部时钟模式。MAX192具有 */
- /* 片内电压基准,也可用外部基准,这里使用内部4.096V电压基准。 */
- /****************************************************************/
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- void delay1(uint x);
- extern uint chai; //把全局变量chai声明为外部变量
- extern uint a_func(uchar); //把a_func 声明为外部函数
- uint idata mid1[8];
- float idata volt[8];
- uchar idata i;
- void delay1(uint x) //延时程序
- {
- uchar tw;
- while (x-->0){
- for (tw=0;tw<125;tw++){;}
- }
- }
- void main() //主程序
- {
- SP=0xcf;
- delay1(1000);
- EA=0;
- chai=a_func(0x8e); // 读出MAX192芯片输入通道CH0的AD转换值
- mid1[0]=chai; // 把它放入数组mid1中。
- delay1(10);
- chai=a_func(0xce); // 读出MAX192芯片输入通道CH1的AD转换值
- mid1[1]=chai; // 把它放入数组mid1中。
- chai=a_func(0x9e);
- mid1[2]=chai;
- chai=a_func(0xde);
- mid1[3]=chai;
- chai=a_func(0xae);
- mid1[4]=chai;
- chai=a_func(0xee);
- mid1[5]=chai;
- chai=a_func(0xbe);
- mid1[6]=chai;
- chai=a_func(0xfe); // 读出MAX192芯片输入通道CH7的AD转换值
- mid1[7]=chai; // 把它放入数组mid1中。
- for (i=0;i<8;i++){
- volt[i]=(float)mid1[i]/1024.0*4.096; // 标度变换,且变成浮点数。
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
汇编语言源程序:
- ;/*****************************************************************/
- ;/* 这是MAX192的汇编程序, 文件名MAX192.ASM */
- ;/* 功能:本程序主要是读出MAX192输入通道CH0,CH1,..CH7的模数转换值, */
- ;/* 转换值放在寄存器R6,R7中,R6放高位。MAX192芯片的8个通道 */
- ;/* 可编程为单极性/双极性和单端/差动工作, 这里采用单端\单极性 */
- ;/* 输入。MAX192有内部时钟和外部时钟两种工作模式,这里采用内 */
- ;/* 部时钟模式。MAX192有内带4.096V的基准电压,也可用外部基准 */
- ;/* 电压,这里采用内带4.096V的基准电压。 */
- ;/******************************************************************/
- SI EQU P1.3
- SO EQU P1.2
- SCK EQU P1.1
- CS EQU P1.0
- ORG 0030H
- CLR EA
- CLR SCK
- CLR CS ;发送一个字节
- MOV A,#08EH ;08EH-选择CH0,单端/单极性,内部时钟模式,用内带基准电压
- LCALL BYTE_OUT ;0CEH-选择CH1,单端/单极性,内部时钟模式,用内带基准电压
- SETB CS ;09EH-选择CH2,单端/单极性,内部时钟模式,用内带基准电压
- NOP ;0DEH-选择CH3,单端/单极性,内部时钟模式,用内带基准电压
- NOP ;0AEH-选择CH4,单端/单极性,内部时钟模式,用内带基准电压
- NOP ;0EEH-选择CH5,单端/单极性,内部时钟模式,用内带基准电压
- NOP ;0BEH-选择CH6,单端/单极性,内部时钟模式,用内带基准电压
- NOP ;0FEH-选择CH7,单端/单极性,内部时钟模式,用内带基准电压
- NOP
- CLR CS ;读回两个字节
- LCALL BYTE_IN
- MOV R6,A
- LCALL BYTE_IN
- MOV R7,A
- SETB CS
- CLR C
- MOV A,R6
- RRC A
- MOV R6,A
- MOV A,R7
- RRC A
- MOV R7,A
- CLR C
- MOV A,R6
- RRC A
- MOV R6,A
- MOV A,R7
- RRC A
- MOV R7,A
- CLR C
- MOV A,R6
- RRC A
- MOV R6,A
- MOV A,R7
- RRC A
- MOV R7,A
- CLR C
- MOV A,R6
- RRC A
- MOV R6,A
- MOV A,R7
- RRC A
- MOV R7,A
- CLR C
- MOV A,R6
- RRC A
- MOV R6,A
- MOV A,R7
- RRC A
- MOV R7,A
- MOV A,R6
- ANL A,#03H
- MOV R6,A
- LJMP $
- BYTE_OUT: MOV R0,#08H ;发送单个字节到芯片串口
- BOUT1: CLR SCK
- RLC A
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
4115624MAX192-c51.rar
(33.96 KB, 下载次数: 21)
|