已知某单片机系统每隔20ms测一次温度 8位温度A/D值存在特殊功能寄存器SBUF中 试分别求其1s和1min内的平均值

大学 温度,寄存器,平均值 已帮助 人

已知某单片机系统每隔20ms测一次温度,8位温度A/D值存在特殊功能寄存器SBUF中,试分别求其1s和1min内的平均值,分别存30H和31H。

热搜:什么是嵌入式系统,系统中嵌入了单片机

答案解析

难度★★☆ 搜索
  • 程序如下:
       (1)  1s平均值
       AVRIS:MOV  R2,#0       ;低8位累加寄存器清0
             MOV  R3,#0       ;高8位累加寄存器清0
             MOV  R4,#50      ;置平均次数
       ALOP: MOV  A,SBUF      ;读8位温度A/D值
             ADD  A,R2        ;低8位累加
             MOV  R2,A        ;回存
             CLR  A           ;高8位与进位累加
             ADDC A,R3        ;
             MOV  R3,A        ;回存
             LCALL DY20ms     ;延时20ms
             DJNZ R4,ALOP     ;判50次累加完否?未完继续
             MOV  A,R3        ;50次累加完,求平均值,被除数→A、B
             MOV  B,R2        ;
             MOV  R0,#30H     ;置商间址
             MOV  R6,#0       ;置除数50,除数→R6R5
             MOV  R5,#50      ;
             LCALL  SUM       ;(A、B)÷(R6、R5)=商@R0,余数A
             CJNE  A,#25,NEXT ;四舍五入
       NEXT: JC GRET          ;C=1,<25,舍
             INC    30H       ;C=0,≥25,入
       GRET:RET              ;
       (2)  1min平均值
       AVRlm:MOV  31H,#0     ;商累加寄存器清0
             MOV  32H,#0     ;余数累加寄存器清0
             MOV  33H,#60    ;置平均次数
       AMVR: LCALL AVRIS     ;求1s温度平均值
             MOV  A,30H      ;读1s温度平均值
             MOV  B,#60      ;置除数(平均次数)
             DIV  AB         ;1s温度平均值除以60
             ADD  A,31H      ;商累加
             MOV  31H,A      ;回存
             MOV  A,B        ;
             ADD  A,32H      ;余数累加
             MOV  32H,A      ;回存
             CLR  C          ;
             SUBB A,#60      ;
             JC   CON        ;余数累加<60,余数累加寄存器不变
             INC  31H        ;余数累加≥60,商累加寄存器+1
             MOV    32H,A    ;余数累加器减去60后差→32H
       CON:
             DJNZ  33H,AMVR   ;判60次累加完否?未完继续
             MOV   A,32H      ;余数累加四舍五入
             CJNE  A,#30,NEXT ;
       NEXT: JC    GRET       ;C=1,<30,舍
             INC   31H        ;C=0,≥30,入
             GREI: RET        ;