(单片机原理与应用)keilC51编译环境的使用(C版和汇编版)

来源:互联网 发布:windows ssh客户端 编辑:程序博客网 时间:2024/06/05 02:54

一、实验内容

将-8到7的16个数放入30H开始的RAM区,其中正数、负数分别送40H和50H开始的存储单元,正数、负数和零的个数分别送到单元60H,61H,62H。

二、实验目的

掌握proteus和软件环境——keilC的联机调试过程

三、实验设备

DELL台式机

keilC51版本7

四、实验电路图

五、程序流程图

汇编版:R1=30h//存放地址;R2=16//循环次数;R3=40h//正数存放地址

            R4=50h//负数存放地址;A=-8//存放的数据

C版:a=-8;i=16;*p3=0//正数个数;*p4=0//负数个数;*p5=0//0个数;

指针:p0=0x30;p1=0x40;p2=0x50;p3=0x60;p4=0x61;p5=0x62


六、程序源码 

汇编版:

org 0000hmov R1,#30hmov R2,#16//循环次数mov R3,#40hmov R4,#50hmov A,#-8//数mov 60h,#0mov 61h,#0mov 62h,#0next:mov @R1,Ajnb acc.7,znumber//判断是否为负数mov B,R4mov R0,B//通过R0寄存器存入50h单元开始的RAM区inc R4inc 61h//负数个数+1jb acc.7,lastznumber://正数和0addc A,#0ffhmov A,@R1jc positive_number//判断是否是正数inc 62h//0的个数+1jnc overpositive_number:mov B,R3mov R0,B//通过R0寄存器存入40h单元开始的RAM区inc R3inc 60h//正数的个数+1last:mov @R0,A//将A存入RAM区over:inc R1inc Adjnz R2,next//判断循环是否结束sjmp $end       

C版:

#include<reg51.h>void main(){int i;//循环次数char a=-8;char data *p0=0x30;char data *p1=0x40;char data *p2=0x50;char data *p3=0x60;char data *p4=0x61;char data *p5=0x62;*p3=0;*p4=0;*p5=0;for(i=0;i<16;i++){*p0=a;if(a>0){*p1=a;p1++;(*p3)++;}else if(a<0){*p2=a;p2++;(*p4)++;}else (*p5)++;a++;p0++;}}


0 0