单片机真有效值程序实现.docx

上传人:b****7 文档编号:23637103 上传时间:2023-05-19 格式:DOCX 页数:27 大小:192.43KB
下载 相关 举报
单片机真有效值程序实现.docx_第1页
第1页 / 共27页
单片机真有效值程序实现.docx_第2页
第2页 / 共27页
单片机真有效值程序实现.docx_第3页
第3页 / 共27页
单片机真有效值程序实现.docx_第4页
第4页 / 共27页
单片机真有效值程序实现.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

单片机真有效值程序实现.docx

《单片机真有效值程序实现.docx》由会员分享,可在线阅读,更多相关《单片机真有效值程序实现.docx(27页珍藏版)》请在冰豆网上搜索。

单片机真有效值程序实现.docx

单片机真有效值程序实现

1前言

单片微型计算机简称单片机,又称微控制器(MCU),它的出现是计算机发展史上的一个重要的里程碑,它以体积小、功能全、性价比高等诸多优点独具特色,在工业控制、尖端武器、通信设备、信息处理、家用电器等嵌入式应用领域中独占鳌头。

本次课设采用的STC89C51单片机是51系列单片机的一种代表,目前51系列单片机是国内目前应用最广泛的一种单片机之一。

单片机以其系统硬件构架完整、价格低廉、学生能动手等特点,成为工科学生硬件设计的基础课。

2单片机系统板的介绍

本次课设所使用的单片机最小系统板包括以下器件:

电源端子(DC+5V),可以USB供电,也可独立电源供电。

通用异步串口,采用MAX232做电平转换。

STC89C51单片机,支持串口下载和单步调试ZLG7290管理芯片,是IIC总线通信的键盘扫描和数码管显示芯片,自带8M晶振,最多可扫描64个键盘和8个数码管。

各种颜色的LED发光二极管共9个,其中8个接于P1口做LED显示,还有一个做电源灯显示。

TLC549,8位串行AD。

TLC5615,10位串行DA。

还有其他电阻电容若干,系统板一个,大按键开关两个,用于中断控制和通信开关。

利用STC51系列特有的ISP在线编程,方便我们初学者的二次开发,省去大量芯片烧写时间。

USB电源线供电和外接供电并存,方便学生在寝室使用。

电源保护电路,有效防止电源接反对CPU造成的损害。

增加专门的键盘扫描和数码管显示芯片,只占用2个I/O口和一个外部中断就能完成8个数码管显示和最多64个键盘扫描。

增加了I/O口键盘扫描,2种扫描方式可通过跳线由用户自己选择。

所有I/O口均用引脚引出,方便用户扩展。

外部中断0和外部脉冲记数按键复用,通过跳线,用户即可以进行外部中断实验,也可以进行外部T0记数实验。

增加了串行的AD和DA芯片,可直接在开发板上进行AD和DA的实验。

3有效值测量程序流程图

本次课设的任务是利用自己亲手做的单片机最小系统,通过编程和调试,实现正弦波的有效值测量,并用数码管将测量的有效值显示出来。

其过程是先通过A/D采样取出最大值,然后根据定义计算出有效值,通过进制转换将16进制转换称10进制BCD码,把查表得到的码形值通过STC89C51单片机的IIC总线方式写到ZLG7290中用数码管显示,流程图如图3.1所示。

图3.1 有效值测量程序流程图

4A/D转换部分

本次课设的任务是实现正弦波有效值的测量,一般有效值的测量主要有平均值法峰值法,真有效值转换芯片测量等方法。

本次课程设计采用TI公司的串行A/D转换芯片TLC549测量交流信号,再根据有效值的定义式求得其有效值。

4.1TLC549功能简介

TLC549是以8位开关电容逐次逼近A/D转换器为基础而构造的CMOSA/D转换器。

它设计成能通过3态数据输出和模拟输入与微处理器或外围设备串行接口。

TLC549仅用输入/输出时钟(I/OCLOCK)和芯片选择(CS)输入作数据控制。

TLC549的I/OCLOCK输入频率最高可达1.1MHz。

转换结果有DOUT脚读出。

其外围管脚如图4.1所示。

图4.1TLC549的外围管脚图

当输入的模拟电压大于REF+端电压时,TCL549输出为FFH,当输入的模拟电压小于REF-端电压时,TCL549输出00H。

使用时通常将REF-端与GND相连。

TCL549的工作时序如图4.2所示。

图4.2TCL549的工作时序图

 端为高电平时,DOUT端为高阻态。

 跳变为低电平经过1.7us后,上次转换结果的D7位被放置在DOUT端。

在随后的4个I/OCLOCK的下降沿,分别输出D6、D5、D4、D3位。

在输出D3位的同时,启动片内采样电路,对模拟输入采样,在其后的3个I/OCLOCK的下降沿,分别输出D2、D1、D0位,第8个I/OCLOCK的下降沿启动片内的保持电路,在DOUT端输出的数据无效。

此后,应将

 端拉为高电平,并至少保持17us,以使TLC549完成一次A/D转换。

重复上述过程可读出本次转换的结果,其过程如图4.3所示。

图4.3 AD转换原理框图

若定义STC89C51单片机的P1.2口为片选信号控制,P1.3口为A/D转换后输出结果读取端,P1.4口为TLC549的时钟输入端,则TCL549与单片机的硬件连接如图4.4所示。

图4.4TCL549与单片机的硬件连接

4.2A/D转换的驱动程序

AD:

MOV R2,#08H     ;第一次采样CLOCK的8个脉冲

CLR  P1.2       ;CS变为低电平

NOP

NOP

NOP

L3:

MOVC,P1.3         ;对模拟输入采样,读出结果OUT

MOVA,20H

RLCA

MOV20H,A

LCALLPULSE     ;调用产生CLK时钟脉冲子程序

DJNZR2,L3

MOVR2,#24H     ;A/D转换的36个时钟周期

SETB P1.2        ;CS变为高电平,开始保持和转换

L4:

LCALL PULSE

DJNZR2,L4

RET

PULSE:

SETB P1.4        ;p1.4输出高电平,CLOCK时钟

NOP

NOP

NOP

CLR  P1.4

RET

5有效值的计算

根据有效值的定义,有效值等于最大值除以

 ,为了计算方便,程序中取

 为1.414,A/D转换输出的结果(设为M)是16进制的数,最大为#0FFH,对应的是基准电压,约为4.2V,所以每个十六进制的单位1对应的电压是

 ,有效值为                     。

在实验程序中先取出采样结果M,然后乘以12(即#0CH),再将所得的结果(也是十六进制)转换成十进制BCD码,其计算和转换的流程图如图5.1所示。

图5.1有效值计算的流程图

按照上面介绍的有效值近似计算方法和结果进制转换的过程,可以编写出计算有效值的实验程序如下:

MOVA,21H     ;A/D转换的结果存于21H中

MOVB,#0CH

MULAB

MOV39H,B    ;得到的新的16进制数高字节放39H中,低字节放40H中

MOV40H,A

HUAN:

MOVA,39H   ;将存放于39H单元中待转换的16进制数高字节存于A

MOVB,#0AH   

DIVAB   

MOV41H,A    ;商送41H单元暂存

MOVA,B      ;余数送回A

MOV42H,40H  ;待变换16进制数的低字节送42H单元暂存

ANL42H,#0F0H ;屏蔽低半字节

ADDA,42H    ;高字节除#0AH后余数与低字节的前半字节相加,

;后半字节换位使上次除法余数仍在高位

SWAPA   

MOVB,#0AH

DIVAB   

MOV43H,A    ;商送43H单元暂存

MOVA,B       ;余数送到A

SWAPA       ;使余数处在高半字节位数

ANL40H,#0FH  ;屏蔽待转换数低字节的高半字节

ADDA,40H

MOVB,#0AH   

DIVAB   

MOV7FH,B    ;得到待转换的最低位的BCD码值

MOV44H,A    ;商送44H单元暂存

MOVA,41H

SWAPA   

ADDA,43H

MOVB,#0AH   

DIVAB   

MOV41H,A

MOVA,B      

SWAPA   

ADDA,44H

MOVB,#0AH   

DIVAB   

MOV42H,A       ;以上是将前面计算所得到的商再除以#0AH,

;以得到倒数第二位的BCD码值

MOV7EH,B

MOVA,41H

SWAPA   

ADDA,42H

MOVB,#0EH

DIVAB   

MOV7DH,B

MOV7CH,A

RET

6显示部分

6.1ZLG7290介绍

本次课程设计的单片机系统板采用ZLG7290管理芯片来控制键盘和LED数码管,ZLG7290芯片负责LED显示及键盘扫描,它与单片机采用IIC总线方式进行通信。

ZLG7290的IIC接口传输速率可达32kbit/s,容易与处理器接口,并提供键盘中断信号,提高主处理器时间效率.ZLG7290的从地址(slaveaddress)为70H(01110000B).

ZLG7290内可通过IIC总线访问的寄存器地址范围为00H到17H,任一寄存器都可按字节直接读写,也可以通过命令接口间接读写或按位读写。

它的控制和状态查询全部都是通过读/写寄存器实现的,用户只需像读24C02内的单元一样,即可实现对ZLG7290的控制。

ZLG7290与数码管的连接如图6.1所示。

其中ZLG7290的引脚SCL和SDA分别与STC89C51单片机的P1.0和P1.1相连,实现IIC总线方式通信。

图6.1ZLG7290与数码管的连接图

6.2IIC通信的原理

 通信总线是串行传输总线,通过定义单片机两根引脚(串行时钟线SCL和串行数据线SDA)能实现全双工同步数据传送。

在数据传输时,发送开始后,主器件送出8位控制字节,以选择从器件并控制总线传送方向,其后再传送数据。

每传送完一个字节后,接收器都必须发一位应答信号ACK,发送器确定后,再发下一数据。

每一数据都是先发高位,再发低位,在全部数据传送结束后主控制器发送停止信号。

还要注意写时钟SCL和SDA的发送起始和停止条件程序时,要根据单片机晶振来确定NOP指令条数,由于我们用的外部时钟晶振是11.0592M,需要四个NOP指令。

 通信程序设计流程图如图6.2所示。

图6.2 

 通信程序设计流程图

6.3ZLG7290的驱动程序

   ZLG7290与单片机是通过IIC总线方式通信的,所以只需要一根数据线和一根时钟线即可完成通信。

而在通信之前和之后需要编写满足起始和停止条件的程序,为保证数据成功传输,要有发送应答位和非应答位子程序。

实验程序如下:

多个字节数据发送子程序:

WRNBYT:

 PUSH PSW

WRNBYT1:

SETBRS0

    SETBRS1

    CALLSTA

   MOVA,SLA

   CALLWRB

   CALLCACK

   JB F0,WRNBYT

   MOV R0,#MTD

   MOV R5,NUMBYT

WRDA:

 MOV A,@R0

    LCALL WRB

    LCALL   CACK

   JB F0,WRNBYT1

   INC R0

   DJNZ R5,WRDA

   LCALL STOP

   POP PSW

   RET

发送一个字节子程序:

WRB:

  MOV R7,#8

WLP:

  RLC A

    JC WR1

   CLR SDA

   SETB SCL

   NOP

   NOP

   NOP

   NOP

   CLR SCL

   DJNZ R7,WLP

   RET

WR1:

  SETB SDA

    SETB SCL

   NOP

   NOP

   NOP

   NOP

   CLR SCL

   CLR SDA

   DJNZ R7,WLP

   RET

应答位检查子程序:

CACK:

 SETB SDA

   SETB SCL

   NOP

   NOP

   MOV C,SDA

   MOV F0,C

   CLR SCL

   NOP

   NOP

   RET

发送起始位子程序:

STA:

 SETB SDA   

SETB SCL

   NOP

   NOP

   NOP

   NOP

   CLR SDA

   NOP

   NOP

   NOP

   NOP

   CLR SCL

   RET

发送停止位子程序:

STOP:

CLR SDA 

   SETB SCL

   NOP

   NOP

   NOP

   NOP

   SETB SDA

   NOP

   NOP

   NOP

   NOP

   CLR SCL

   RET

7刷新频率的计算

刷新频率即数据更新一次所需要的时间,也就是一个完整的抽样周期。

在一个抽样周期内完成很多个A/D转换的抽样取值,抽样的次数由R3和R4确定,程序中R3为#0AH,R4等于#0C8H,所以抽样次数为2000次,即每进行2000次A/D转换之后取出最大值,并且计算出有效值加以显示,然后进行下一轮抽样,也是取2000次/AD转换的最大值,并且计算出有效值加以显示(这样显示的数据就得到了更新)。

而这2000次的A/D转换中每两次A/D转换的之间的间隔时间由定时器决定,由于TH0为#0FFH,TL0为#0A4H,所以每次AD抽样间隔约为100us,这样每一轮AD转换之后取最大值计算出有效值并显示的时间间隔约为200ms。

8误差分析

通过单片机测量有效值的方法有多种,如利用有效值的定义式

 通过积分来求,以

 为采样间隔对

 连续采样转换N次,且

 ,则有

式中

 为各采样值的瞬时值,就其原理而言,在不考虑AD转换精度的情况下,只要保证采样时间间隔

 的准确度,得到的有效值即具有较高的精度。

但是此方法要求的程序比较复杂,而且计算转换过程较多,为了使实验程序简单易懂而精度要求在允许的误差范围内,我们采用一种近似算法,也就是取最大值,然后除以

 得到有效值。

经过反复实验采集数据分析,得到误差分析如表1所示。

表1 测量差误分析

单位:

V

一组

二组

三组

四组

五组

六组

七组

八组

九组

十组

输入电压

0.36

0.76

1.32

1.56

1.88

2.28

2.6

3.0

3.32

3.72

实际有效值

0.27

0.54

0.9

1.12

1.41

1.69

1.94

2.24

2.51

2.81

测量有效值

0.28

0.56

0.94

1.18

1.47

1.70

1.96

2.23

2.52

2.96

误 差

3.6%

3.6%

4.3%

5.1%

4.1%

0.6%

1.0%

0.4%

0.4%

5.1%

本次实验的AD转换芯片输入的基准电压约为4.2V,测量的正弦波信号的最大值不得超过4V,由实验结果可知,当输入的信号的最大值越接近基准电压,其测量结果误差越大。

9小结与体会

通过这次单片机课程设计,使我的编程能力得到了很大的提高,在大脑里面形成了初步的体系结构,以致于在编程时能够灵活的运用和变更。

回顾整个设计过程,从硬件焊接到软件编程,从小程序的编写调试到整个单片机功能的了解,从分析到实际运用,都经过了许多思考过程。

刚开始对整个系统板不是很熟悉,有很多芯片的用法都了解,以至于编程调试时遇到了很多的困难,失败了很多次。

后来上网查资料和一些技术文献,在图书馆借了很多有关单片机的书,慢慢分析调试,最后问题都一一解决了。

总结下来,这三周学会了很多东西,例如知道了在编写大程序的时候要把握一些原则,要不然很容易出错,而且很难查出错在哪里,还学会了ZLG7290键盘和数码管管理芯片的使用,以及A/D转换芯片TLC549的使用和驱动程序的编写,觉得自己的专业知识又得到了丰富。

参考文献

[1]李群芳主编.单片微型计算机与接口技术.北京:

电子工业出版社,2005

[2]宋 浩主编.单片机原理及应用.北京:

清华大学出版社,2005

[3]凌玉华编著.单片机原理及应用系统设计.北京:

中南大学出版社,2006

[4]蒋力培编著.单片微机系统实用教程.北京:

机械工业出版社,2004

[5]潘 昊编著.单片机十六进制数与BCD码转换新探讨(摘要),1997

[6]佟为明主编.TLC549在交流有效值测量中的应用(摘要),2006

附录一 设计总体电路图

附录二 设计总程序

NUMBYT EQU 5DH    ;发送的个数,包括第一位地址

SLA    EQU 5EH    ;控制字或7290的地址

MTD    EQU 5FH    ;7290存“显示的数字”的寄存器的地址10H

SCL    EQU P1.0   ;时钟脉冲

SDA    EQU P1.1   ;发送数据

ORG 0000H

AJMP MAIN

ORG 0030H

MAIN:

MOVSP,#30H

     MOV21H,#0

       MOVR3,#0AH   

       MOVR4,#0C8H

     LCALLAD

     MOVTMOD,#01H

       MOVTH0,#0FFH

       MOVTL0,#0A4H

       SETBEA

       SETBET0

SS:

 SETBTR0

    JNBTF0,$

       CLRTF0

     LCALLAD

       MOVA,21H

       CJNE A,20H,SS2

       JMPSS3

SS2:

JNCSS3

    XCHA,20H

       MOV21H,A

SS3:

MOVTH0,#0FFH

       MOVTL0,#0A4H

    DJNZR4,SS

       MOV R4,#0C8H

       DJNZR3,SS

       MOVA,21H

       MOVB,#0CH

       MULAB

       MOV39H,B           

       MOV40H,A

    LCALLHUAN            

       LCALLMA            

       LCALLXIAN        

       MOVTH0,#0FFH

       MOVTL0,#0A4H

       MOV21H,#0

       MOVR3,#0AH

       MOVR4,#0C8H

       SJMPSS

查表程序

MA:

MOVDPTR,#TAB  

       MOVR0,#7FH

       MOVA,@R0

       MOVCA,@A+DPTR

       MOV60H,A

       DECR0

       MOVA,@R0

       MOVCA,@A+DPTR

       MOV61H,A

       DECR0

       MOVA,@R0

       MOVCA,@A+DPTR

       MOV62H,A

       MOVDPTR,#TAB1

       DECR0

       MOVA,@R0

       MOVCA,@A+DPTR

       MOV63H,A

    RET

TAB:

DB

0FCH,60H,0DAH,0F2H,66H,

0B6H,0BEH,0E0H,0FEH,0E6H

TAB1:

DB0FDH,61H,0DBH,0F3H,67H,0B7H,

0BFH,0E1H,0FFH,0E7H

进制转换程序

HUAN:

MOVA,39H

MOVB,#0AH     

DIVAB        

MOV41H,A 

MOVA,B            

MOV42H,40H    

ANL42H,#0F0H

ADDA,42H 

SWAPA        

MOVB,#0AH     

DIVAB        

MOV43H,A 

MOVA,B            

SWAPA        

ANL40H,#0FH

ADDA,40H 

MOVB,#0AH     

DIVAB        

MOV7FH,B 

MOV44H,A 

MOVA,41H 

SWAPA        

ADDA,43H 

MOVB,#0AH     

DIVAB        

MOV41H,A 

MOVA,B            

SWAPA        

ADDA,44H 

MOVB,#0AH     

DIVAB        

MOV42H,A 

MOV7EH,B

MOVA,41H 

SWAPA        

ADDA,42H 

MOVB,#0AH     

DIVAB        

MOV7DH,B

MOV7CH,A

RET

单片机读A/D转换结果

AD:

MOV R2,#08H   

     CLR  P1.2    

     NOP

     NOP

     NOP

L3:

MOVC,P1.3   

          MOVA,20H

          RLCA

          MOV20H,A

          LCALLPULSE

          DJNZR2,L3

          MOVR2,#24H  

          SETB P1.2   

L4:

   LCALLPULSE

          DJNZR2,L4

          RET

PULSE:

  SETB P1.4 

          NOP

             NOP

             NOP

             CLR  P1.4

             RET

显示子程序

XIAN:

 MOV MTD,#10H             

             MOV NUMBYT,#05H

             MOV SLA,#70H

           LCALL WRNBYT

             RET

WRNBYT:

PUSH PSW

WRNBYT1:

SETBRS0

          SETBRS1

          CALLSTA

             MOVA,SLA

      

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1