成 都 理 工 大 学
核技术与自动化工程学院
实 验 报 告
课程名称: 单片机原理实验 姓 名: 汪缔洪 学 号: 201106040308 专 业:机械工程及自动化 学 期: 20013-2014(2) 任课教师: 刘 易
实验(1)名称:存储空间的认识
实验人员: 汪缔洪 指导老师: 刘易 实验地点: 6C703 实验时间:
实验内容(实验要求、实验原理、程序设计、现象及结果):片外数据送片内相加,以及循环操作体。 程序设计包括:程序流程图、源代码以及必要的说明(对流程图和源代码的说明)
一、实验要求
(1)将片内RAM2000单元的数89和片外RAM2000单元数32相加,相加结果放入片内RAM30单元。
(2) 将00~ff放入片外1000~10ff单元,加1后,再将数据放入片外2000~20ff单元。 二、实验原理
1、了解单片机的指令系统,数据传送指令、算术运算指令、逻辑运算指令、控制转移类指令以及位操作指令。其中数据传送指令的内容是将数据在单片机芯片内部或外部不同的部件之间进行传送,它是五大指令中最基础、最重要,同样也是指令条数最多的一类指令。算术运算指令,就是讲单片机芯片中的CPU进行加、减、乘除、加一、减一等不同功能的运算指令。控制转移内指令作用在于控制程序的执行顺序。
2、能够了解循环结构程序的设计。循环结构的程序一般包括4个组成部分,循环初始化、循环体、循环修改、循环的控制。 ①循环初始化:位于循环程序的开头,设置各个单元的初始值、数据指针以及控制循环次数的计数器初值。 ②循环体:循环程序的主体。 ③循环修改:每执行一次循环,就要进行一次循环计数其的修改,同时还要对相关数据及数据指针进行同步修改,这样才能为下一次的循环做好准备工作。
④、循环控制:根据循环次数计数器的现行值或其他循环控制条件来进行综合判断,从而控制程序的继续运行还是结束运行。 3、访问外部RAM数据必须采用寄存器间接寻址的方式,并通过累加器A来传送(MOVX)。 三、程序设计 (一)、片外数据送片内并相加
1、程序流程图
2、程序代码:
org 0000h //定位程序的入口地址 jmp main org 0100h main:
mov dptr,#2000h //给数据指针赋初值 mov a,#32h movx @dptr,a
movx a,@dptr //将片外RAM中数据送累加器 mov 40h,a
clr a
movc a,@a+dptr //查表指令,取出片内ROM数据 add a,40h //数据相加
da a //进行十进制调整
mov 30h,a //将所得数据放入片内30H sjmp $ //程序循环等待 org 2000h DB 89h, 0afh End
(二)将数据放入片外,加1后放入另一单元 1、程序流程图
2.程序源代码 org 0000h jmp main
org 0100h main:
;;xram 1000h~10ffh \\\\分配片外1000~10ffh单元 mov r0,#00h \\\\寄存器R0赋初值 mov dptr,#1000h \\\\数据指针赋初值 mov a,#00h loop1:
inc dptr inc a
movx @dptr,a \\\\累加器数据送片外 inc r0
cjne r0,#00h,loop1 \\\\如果r0等于00,则跳转
mov r3,#10h mov r4,#20h mov r5,#00h mov dpl,#00h loop2:
mov dph,r3
movx a,@dptr \\\\片外数据送累加器 add a,#01 \\\\累加器数据加1 mov dph,r4
movx@dptr,a \\\\累加器送片外 inc dpl inc r5
cjne r5,#00h,loop2 sjmp $ end
四、现象及结果
(一)片外数据送片内并相加
查询片外数据所用指令x:0x2000,可得结果如下:这便是我们所放入片外2000单元
的数32.相加后所得的数据为121.此时CY=1.
(二)将数据放入片外,加
1后放入另一单元
首先查询我们是否将数据放入00~ff放入片外1000~10ffh单元,在地址输入框中输入:
“x:0x1000”可得到如下的结果:
表明我们已经将数正确的放入片外1000~10ffH地址单元。
在地址输入框输入:“ x:0x2000”得到如图所示的结果:
由此我们已经正确的将1000~10ff单元的数+1后放入到了2000~20ff单元。
实验(2)名称:I/O口的使用及中断定时
实验人员: 汪缔洪 指导老师: 刘易 实验地点: 6C703 实验时间:
实验内容:控制流水灯移动 一、 实验要求 1、 使用C语言编程,使用MSC-51单片机的并口引脚控制流水
灯移动一位。 2、 使用中断定时,使流水灯每隔一秒钟移动一个单位。 二、 实验原理
1、 单片机的并行I/O口,简称单片机的并口,是指单片机芯片提供的并行输入输出
接口。在51系列单片机中,一共有P0、P1、P2、P3四个必行口,每个并行口有8个管脚。这四个并行口不仅可以作为8位并行数据输入\\输出接口使用,而且每个引脚还可以做为开关输入/输出信号单独使用。单片机的并行I/O接口除了用于上述的输入/输出控制功能外,还可以作为地址总线、数据总线以及第二功能管脚来使用。
2、 在本次的实验中,我们将用到P3口的第二功能,以实现定时,中断的特殊功能。
在实现本次实验中,我们还需要用到MSC-51单片机开发板和中断。中断系统是单片机内部的重要组成部分,单片机在与外部设备进行数据交换的过程中,中断系统能够提高CPU的工作效率,在此我么需要了解中断系统的基本概念。中断,主要指单片机的CPU,正在处理某些事件时,突发的另一紧急程度更高的事,并请求单片机的CPU迅速处理。中断源,是指产生中断信号的请求来源。中断优先级,是根据中断源的轻重缓急程度来进行排队,把最紧急的中断源请求信号排为最高的执行级别。在5个中断源中,默认优先级别最高的是外部中断0,接下来的是定时/计数器0、外部中断1、定时/计数器1以及串口中断。在单片机的C51语言中,使用中断函数来实现具体的中断服务程序。
三、 程序设计
(一)按键一次流水灯移位一次 1、程序流程图
2、程序源代码 #include void test_crol (void)interrupt 0 //外部中断0中断入口 { P0 = _crol_(P0,1); //循环左移 } void int0_init() { EA=1; //开CPU中断 EX0=1; //允许外部中断0中断 IT0=1; //选取外中断为脉冲触发方式 } void main () { P0=0x01; //指示灯亮灯一个 int0_init (); while(1); } (二)使用定时中断1s钟移位一次 1、程序流程图 2、程序源代码: #include void timer0_init() { TMOD=0X01; //设置定时器T0工作在方式1,16位定时器 ET0=1; //开启T0定时器的溢出中断允许位 TH0=0X3C; //定时器T0定时初值,每次定时50ms,系 TL0=0XB0; 统频率为11.0592MHz TR0=1; //启动T0定时器开始定时 EA=1; //开启总中断允许位 } void main() { P0=0XFE; //只亮一个LED灯 timer0_init(); while(1); } void tese_crol (void)interrupt 1 { static int temp=0; temp++; if(temp==20) { temp=0; P0=_crol_(P0,1); } TH0=0X3C; //重装T0产生50ms的定时 TL0=0XB0; } 四、现象及结果 (一)按键一次流水灯移位一次 当按下一次键,产生一次(或几次)外部中断,[由于程序中没有设置消颤,故按下一个键时可能产生多次抖动,就会产生多个脉冲信号]流水灯左移一位或几位。 (二)使用定时中断1s钟移位一次 程序运行后,按照预定的要求每个一秒钟向左移动一位。 实验(3)名称:键盘显示及串口通信 实验人员: 汪缔洪 指导老师: 刘易 实验地点: 6C703 实验时间: 实验内容:键盘显示及串口通讯 一、实验要求 从4×4的行列式矩阵式键盘中,按下一个键,数码管上显示所按下的键,同时设置一个发送功能键,将其发送到令一台PC中,PC电脑中调用串口调试助手,PC中接受到所发送的数据。在通过串口调试助手,向单片机发送数据,数码管显示所发送数据。 二、实验原理 1、矩阵键盘的扫描:通常扫描矩阵键盘的按键是否按下,有两种方法:即逐行扫描法和行反转法。在本次实验中,我们所用到的键盘扫描方法就是行反转法。这种方法就是先将四根列线作为输出线,4根行线作为输入线,然后四根行线得到输入的数据A,接下来进行方向的反转,将4根行线由输入变为输出线输出A,在将4根列线由输出线变为输入线,得到相应的数据B,最后AB组合成一个8位的二进制数据就是键值。同时,我们也要注意一个问题,当进行按键操作的时候,由于按键基本是由机械开关制成的,因此在按键按下的过程中伴随着抖动的现象,如果不及时的排除掉抖动的干扰,就可能使读到的按键键值产生错误。消除抖动的方法有硬件和软件两种方法,其中使用软件延时的方法是我们比较常用的方法。 2、了解51系列的单片机的串口内部结构。MSC-51单片机串行口内有两个物理上的独立接收、发送缓冲期(SBUF),他们占用同一地址99H。当CPU利用串口发送数据时,将要发送的数据写入发送缓冲期SBUF中,在时钟信号的控制下有P3.1引脚逐位发出,发送完成后是串口发送的中断标志位T1=1,代表一个字符帧发送结束。当P3.0引脚由高电平变为低电平时,起始位出现,表征有一个字符帧到来,输入移位寄存器在时钟信号的控制下,将信心逐位收进来,存放到接受缓冲器SBUF中,将RI置为1,代表一个字符帧接收完毕。此后,单片机的CPU通过读写SBUF就可以获得或发送串口中的数据。 3、单片机主要是通过两个特殊的功能寄存器来控制这个串口进 行通信,即串口控制寄存器(SCON)以及电源控制寄存器(PCON)。 串口控制寄存器SCON:它是MSC-51单片机中一个可以位寻址的特殊功能寄存器。它用于串口工作方式的选择、数据收发控制以及收发中断标志的设置和查询。 SM0、SM1:串口工作方式的选择位,SM0、SM1的四种组合结果,分别代表串口的四种工作方式。(方式0:8位移位寄存器,波特率固定;方式1:10位异步收发,波特率可变:方式2:11位异步收发,波特率固定;方式3:11为异步收发,波特率可变) SM2:多机通讯控制位,该位主要用于多机通讯,在双机通讯时一般将SM2设置为0. REN:允许串口接受数据的控制位,该位用于控制允许或禁止串口收发数据。当REN=1时,允许串口接受数据;当REN=0时,禁止串口接受数据。 TB8:发送数据的第8位,当串口工作于方式2或方式3时,TB8的内容被发送到发送字符帧的第9位,与字符帧的其他位一同发出,该位的值可由软件设置。在双机通讯时,TB8常作为奇偶校验位使用。 RB8:接受数据的第8位,当串口工作方式2或3时,RB8用于存放接受到字符帧的第9位,用于表示接收到字符帧的数据特征。 TI:发送中断标志位,该位是串口数据收发完的状态标志位。当串口发送完一帧数据时,该标志被自动置1,该位可用于查询方式编程时作为查询标志使用,同时也是一个串行口中断标志。需要注意的是:响应中断后该位不能自动清0,需在程序中使用软件清0. RI:接受中断标志位,该位是串口数据接受完毕的状态标志位。当串口接受完一帧数据时,该标志被自动置1,该位是串口中断标志位。也可以作为查询标志使用。同样,在响应中断后该位不能自动清0,需在程序中使用软件清0复位。 电源控制寄存器PCON:该寄存器在串行通信的过程中,只有用到了最高位SMOD。其余各位用于电源管理。SMOD位是串口波特率增倍控制位,当SMOD=1时,串口波特率增加一倍。 4、无论是使用双机通讯还是多机通讯,串口工作之前都要对其进行初始化。初始化主要用于设置产生波特率的定时器T1、串口的工作方式、控制位、中断标志,并且还要设置一些和中断相关的寄存器。 三、程序设计 1、程序流程图 四、现象及结果 实验(4)名称:电机控制 实验人员: 指导老师: 刘易 实验地点: 6C701 实验时间: 实验内容:单片机与PC机通讯方法 一、实验要求 二、实验原理 三、程序设计 四、现象及结果 因篇幅问题不能全部显示,请点此查看更多更全内容