利用ADuC834构成二次仪表系统

[09-12 17:54:43]   来源:http://www.88dzw.com  单片机学习   阅读:8895

文章摘要:由于本系统要求有8种状态显示,故需要使用8个发光LED来表示当前程序运行的不同状态。而这可利用P1.0、P1.1和74HC164控制8个发光数码管来进行显示。3 二次仪表的软件程序设计3.1 数据采集程序进行AD采集时,可选择ADuC834的内部参考电压(注意此时内部参考电压是Vref=1.25V,所以ADC通道输入范围都缩小一半),并通过写寄存器AD0CON的RN2、RN1和RN0来选择不同的输入范围道替换,以实现对两个通道输入电压的AD采样。其初始采集程序如下:EADC=0; /*禁止ADC中断*/ADCMODE=0x20; /*启动主ADC*/tempfloat=flash_read(2

利用ADuC834构成二次仪表系统,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.com
由于本系统要求有8种状态显示,故需要使用8个发光LED来表示当前程序运行的不同状态。而这可利用P1.0、P1.1和74HC164控制8个发光数码管来进行显示。

3 二次仪表的软件程序设计

3.1 数据采集程序

进行AD采集时,可选择ADuC834的内部参考电压(注意此时内部参考电压是Vref=1.25V,所以ADC通道输入范围都缩小一半),并通过写寄存器AD0CON的RN2、RN1和RN0来选择不同的输入范围道替换,以实现对两个通道输入电压的AD采样。其初始采集程序如下:

EADC=0; /*禁止ADC中断*/

ADCMODE=0x20; /*启动主ADC*/

tempfloat=flash_read(2); /*读取输入通道选择配置*/

temp=(uchar)(tempfloat-10001); /*采用24位的ADC,使用内部参考电压,选择AIN1、AIN2输入,选择双极性编码,

ANGE=+-TEMP*/

EADC=1; /*允许ADC采样中断*/

ADCMODE=0x23; /*进行连续采样*/

……

下面是ADC中断服务子程序,其中ADC的中断号为6

void adc_int(void) interrupt 6

{

EADC=0;

RDY0=0;

……

EADC=1;

}

3.2 用户闪速/电擦除数据寄存器的编程

ADuC834的用户闪速/电擦除数据存储器的容量为4kB,利用这些EEPROM可以进行系统配置信息的存储。具体程序如下:

sfr EDARL=0xe6;

# define F_READ 0x01 /*读取页*/

# define F_WRITE 0x02 /*写入页*/

# define F_VERIFY 0x04 /*检测页*/

# define F_ERASE 0x05 /*擦除页*/

# define_F_ERASEALL 0x06 /*全部擦除*/

float flash_read(unsigned char f_add) /*从地址f_add读取浮点数据*/

{

float idata f_data=0;

float idata *ph;

uchar idata *puc;

pf=&f_data;

puc=(uchar idata *)pf;

EDARL=f_add;

ECON=0x01;

*puc=EDATA1;

++puc;

*puc=EDATA2;

++puc;

*puc=EDATA3;

++puc;

*puc=EDATA4;

return f_data;

}

unsigned char flash_write(unsigned char f_add,float f_data)

/*写浮点数据f_data到地址f_add*/

{

float idata *pf;

uchar idata *puc;

uchar idata temp;

上一页  [1] [2] [3]  下一页


Tag:单片机学习单片机开发,单片机原理,单片机教程单片机学习

《利用ADuC834构成二次仪表系统》相关文章

分类导航
最新更新
热门排行