第一篇:单片机实践报告
黑龙江科技大学
综合设计性实验报告
实验项目名称
生产车间流水线自动控制模拟 所属课程名称
单片机 实
验
日
期
2015-4-13—2015-4-17
班 班
级 级
自动化 13-5 班 学 学
号 号
2013022332 姓 姓
名 名
于思淼 成 成绩
电气与控制工程学院实验室
实验概述:
【实验目的及要求】
目的:基本掌握单片机的指令系统,尤其是 MCS-51 单片机指令系统,应根据所选课题的任务、要求和条件进行总体方案的设计,通过方案比较,确定总体方案。然后对方案中以单片机为核心的电路进行设计计算。
实践教学环节是对学生学习的综合性的训练,单片机工程实践是以工程项目和工程应用为课题,着重培养学生工程实践能力、独立工作能力及创新能力。
单片机工程实践应达到的基本要求:
1、综合运用单片机技术课程中所学到的理论知识
学生根据所选课题的任务、要求和条件进行总体方案的设计,通过方案比较,决定总体方案。然后对方案中以单片机为核心的电路进行设计计算,包括元器件的选择和电路参考的计算,并画出总体电路图。
2、硬件电路制作
设计方案指导教师审查通过后,学生可向指导教师领取所需元器件等材料,并制作电路。
3、软件的编制与仿真
根据已设计出的软件系统框图,用 MCX-51 汇编语言编制出各功能模块的子程序及整机软件系统的主程序,程序设计时,要充分考虑与所设计硬件电路的连接及有关定量的要求。
4、撰写实践总结报告.5、本实验要求:(1)模拟生产车间流水线自动控制及产生故障后自动报警停止流水线工作,只要按下任一按钮就产生报警信号,排除后继续工作。(2)P1.0~P1.7 分别控制从准备到入库的 8 道工序,P3.3 为报警的输入端(使用外部中断 INT1,触发方式为下降沿触发)。只要按下任一按钮(每道工序一个按钮)就产生报警信号,排除后继续工作。中断入口地址为 0013H。
【实验原理】
P1.0~P1.7 分别控制从准备到入库的 8 道工序,P3.3 为报警的输入端(使用外部中断 INT1,触发方式为下降沿触发)。只要按下任一按钮(每道工序一个按钮)就产生报警信号,排除后继续工作。中断入口地址为 0013H。
设计题目:生产车间流水灯的控制 第一步:了解流水灯的控制原理 第二部:拟定控制方案 第三部:根据方案用 Keil 软件编写程序 第四步:运用 Proteus 软件模拟真实流水灯将程序运行 第五步:观察,并记录
原理图如下所示:
【实验环境】(使用的软件)
本实验采用 Keil 软件和 Proteus 软件,该软件模拟了真实流水灯的电路
实验内容:
【实验方案设计】
方案一
流水灯控制(现象和程序)
org 0000h mov a,#01h main: mov p1,a acall delay rl a ljmp main
delay:mov r2,#2 d0:mov r0,#255 d1:mov r1,#98 nop djnz r1,$ djnz r0,d1 djnz r2,d0 ret end
流水灯依次亮无限循环不停止,延时时间 1s。
方案二
带中断的流水灯控制(现象和程序)
org 0000h mov ie,#84h mov tcon,#04h ljmp main org 0013h ljmp zd
org 0030h main:mov a,#01h
loop:mov p1,a acall delay rl a ajmp loop mov p1,#00h sjmp $
delay:mov r2,#2 d0:mov r0,#255 d1:mov r1,#98 nop djnz r1,$ djnz r0,d1 djnz r2,d0 ret
zd: mov a,#080h xh:mov p1,a acall delay rr a
jnb p3.3,xh reti end
流水灯按照次序依次亮中断后流水灯反向依次亮,延时时间 1s。
【 实验过程 】
(实验步骤、记录、数据、分析)
1、了解流水线模块硬件工作原理,设计出流程图,确定程序大体方案。
2、根据设计编制程序 3、编译,调试程序。若编译,连接过程中产生的信息显示在信息窗的“建立”视中。如编译有错误,警告信息,用鼠标左键双击错误,警告信息或将光标移到错误,警告信息上,回车,系统自动打开对应的出错文件,并定位于出错行上 4、运行方案一和方案二,观察实验现象,检查生产车间流水线自动控制模拟工作状况是否满足设计要求,若不满足重新检查程序,重新调试,若满足则实验结束后退出调试状态。
【结论】(结果)
1.流水灯依次亮无限循环不停止
2.流水灯按照次序依次亮,循环 5 5 次之后停止,中断后流水灯反向依次亮。
【小结】
通过本次实践操作,明白了流水灯编程的基本操作,在编程过程中应该细心仔细检查每一步程序。确保最后出现正确的结果。本次的实践告诉我平时还行该多细心做好日常事宜。
指导教师评语及成绩:
评语:
实验期间综合情况
出勤情况:
迟到次数1 次()2 次()3 次()
多次()
无())
旷课次数1 次()2 次()3 次()
多次()
无())
实验报告书写成绩:
原理部分
优()
良()
中()
及()
不及格()
方案部分
优()
良()
中()
及()
不及格()
过程部分
优()
良()
中()
及()
不及格()
结论部分
优()
良()
中()
及()
不及格()
指导教师签名:
批阅日期:
第二篇:PIC单片机报告
PIC单片机实验报告
一、定时器的使用
(1)实验目的:通过学习和实验理解PIC单片机定时器的内部工作原理,学会定时器 初始化配置编程,并能利用实验板对定时器有简单的应用。
(2)实验器材:16位PIC单片机学习板。
(3)实验过程:
1、PIC单片机定时器概述:根据具体器件,dsPIC30F 器件系列提供了几个16 位定时器。这些定时器被指定为Timer1、Timer2、Timer3 ……等。可分为三种类型:A类型时基、B类型时基和C类型时基。
A类型时基:在大多数dsPIC30F 器件上,至少有一个A 类型定时器。通常Timer1 是A 类型定时器。A 类型定时器与其他类型的定时器相比,有下列独特的功能:
可以使用器件的低功耗32 kHz 振荡器作为时钟源工作
可以在使用外部时钟源的异步模式下工作
A 类型定时器独特的功能使它可以用于实时时钟应用(Real-Time Clock,RTC)。16 位定时器模式:在16 位定时器模式下,定时器在每个指令周期递增,直到与预先装入周期寄存器PR1 中的值匹配,然后复位至0,继续计数。当CPU 进入空闲模式时,定时器将停止递增,除非TSIDL(T1CON<13>)位 = 0。如果TSIDL = 1,定时器模块逻辑将继续递增,直到CPU 空闲模式终止。位同步计数器模式:在16 位同步计数器模式下,定时器将在外部时钟信号的上升沿递增,外部时钟信号与内部相位时钟同步。定时器计数,直到等于PR1 中预先装入的值,然后复位至0,继续计数。当CPU 进入空闲模式时,同上。位异步计数器模式:在16 位异步计数器模式下,定时器在外部时钟信号的上升沿递增。定时器计数,直到等于PR1 中预先装入的值,然后复位至0,继续计数。当定时器配置为异步工作模式时,CPU 进入空闲模式,如果TSIDL = 1,则定时器将停止递增。
B类型时基:在大多数dsPIC30F 器件上,如果存在Timer2 和Timer4,它们是B 类型定时器。与其他类型的定时器相比,B 类型定时器有下列独特的功能:
B 类型定时器可以和C 类型定时器相连形成32 位定时器。B 类型定时器的TxCON
寄存器具备T32 控制位,用来使能32 位定时器功能。B 类型定时器的时钟同步在预分频逻辑后执行。为输入捕捉,输出比较/ 简单PWM 模块提供时基
C类型时基:在大多数dsPIC30F 器件上,Timer3 和Timer5 是C 类型定时器。与其他类型的定时器相比,C 类型定时器有下列独特的功能:
C 类型定时器可以和B 类型定时器相连形成32 位定时器。在某个给定的器件上,至少有一个C 类型定时器能够触发A/D 转换。
相关寄存器:要使用定时器,首先要了解定时器相关寄存器,dspic30f4011的定时器相关寄存器有:
以A类时基定时器(Timer1)为例,要用到的相关寄存器有:T1CON(定时器1控制寄存器)、IFS0bits(中断标志状态寄存器)、IPC0bits(中断优先级控制寄存器)、IEC0bits(中断允许控制寄存器)、PR1(定时器初值寄存器)
定时器模式:所有类型的定时器都可以在定时器模式下工作。在定时器模式下,定时器的输入时钟由内部系统时钟(FOSC/4)提供。当使能为该模式时,对于1:1 的预分频器设置,定时器的计数值在每个指令周期都会加1。
通过清零TCS 控制位(TxCON<1>)选择定时器模式。
同步模式控制位TSYNC(T1CON<2>)在该模式下不起作用,因为使用了系统时钟源产生定时器时钟。
定时器初值计算:指令周期=1/(fosc/4),定时器初值=所需定时时间/(指令周期×分频比)
程序代码:
#include “p30f4011.h” void timer_init()
{
T1CON=0X8030;
//预分频256,ton=1,开始计时,其余都为0//清除TMR1的中断标志 //中断优先级为7 //使能中断
//在预分频256模式下,计时1秒
IFS0bits.T1IF = 0;
IPC0bits.T1IP = 7;IEC0bits.T1IE = 1;}
PR1=0x1c20;
void __attribute__((__interrupt__))_T1Interrupt(void)//中断服务程序 {}
void main(){}
TRISE=0x100;
//将LED相连IO口设为输出 //执行定时器1初始化 //PORTE初始化输出为低
IFS0bits.T1IF=0;PORTE++;
//软件清除定时器1中断标志位 //实现每一秒对PORTE加1,用LED显示
timer_init();PORTE=0;
while(1);//程序进入死循环,定时执行定定时器中断程序
二、中断
实验目的:通过学习和实践理解PIC单片机中断的特性及工作原理,学会中断的初始化配置,并能对中断进行简单的应用。
实验器材:16位PIC单片机学习板。
实验过程:
dsPIC30F的中断特性:
多达8 个处理器异常和软件陷阱 7 个用户可选择的优先级
具有多达62 个向量的中断向量表(Interrupt Vector Table,IVT)每个中断或异常源都有唯一的向量 指定的用户优先级中的固定优先级
用于支持调试的备用中断向量表(Alternate Interrupt Vector Table,AIVT)固定的中断入口和返回延时
中断优先级:
(1)可以为每个外设中断源分配7 个优先级之一。
可用的优先级从1 开始为最低优先级,7 级为最高优先级。如果与中断源有关的IPC 位被全部清零,则中断源被有效禁止。
(2)由于特定的优先级会被分配给一个以上的中断请求源,所以在给定的用户分配
级别内提供了一种解决优先级冲突的方法。
根据每个中断源在IVT中的位置,它们都有一个自然顺序优先级。中断向量的编号越低,自然优先级越高,而向量的编号越高,自然优先级越低。
(3)任何待处理的中断源的总优先级都首先由该中断源在IPCx 寄存器中用户分配的优先级决定,然后由IVT 中的自然顺序优先级决定。
相关寄存器:INTCON1 和INTCON2(全局中断控制寄存器)、IFSx(中断标志状态寄存器)、IECx(中断使能控制寄存器)、IPCx(中断优先级控制寄存器)、SR(CPU状态寄存器)、CORCON(内核控制寄存器)。
初始化配置:
1.如果不需要中断嵌套,将NSTDIS 控制位置1。
2.通过写相应的IPCx 控制寄存器中的控制位选择中断源的用户分配优先级。如果不需要多个优先级,所有允许的中断源的IPCx 寄存器控制位均可以编程为同一个非零值。3.在相关的IFSx 状态寄存器中清零与外设相关的中断标志状态位。
4.通过在相应的IECx 控制寄存器中置1 与中断源相关的中断允许控制位,使能中断源。
程序代码:
void init(){
IFS0bits.INT0IF = 0;//清除INT0的中断标志
IPC0bits.INT0IP = 7;//中断优先级为7 IEC0bits.INT0IE = 1;}
void __attribute__((__interrupt__))_INT0Interrupt(void)//中断服务程序 {
IFS0bits.INT0IF = 0;Led=~Led;}
int main(){
unsigned char Led=0;init();while(1){
PORTE = Led;
//清INT0中断标志//实现LED亮灭变化 //使能中断
}}
第三篇:单片机课程设计报告
单片机课程设计报告
课程名称:单片机原理及接口课程设计
题目:基于
学院:电气信息学院
专业班级:测控技术与仪器
姓名:江让
学号:
指导老师:刘升老师
时间:
C51单片机的ADC0809数模转换103班1090640772013/1/16
第四篇:单片机课程设计报告
单片机课程设计报告
题目:小直流电机调速实验
教学单位: 机 电 工 程 系
专业: 机械设计制造及其自动化
班级: 0803班学号: 0811050342姓名: 程怀虎
2011 年 11月
(以下内容用宋体,五号,单倍行距)
第五篇:单片机实习报告
1602液晶显示设计
一、实验简介:
通过学习本门课程,能够掌握利用51单片机完成简单项目的应用系统设计和调试,掌握单片机应用程序的编写和调试过程。本次实习,我的题目是用51单片机控制1602液晶显示指定字符的设计,需要分别设计系统的硬件电路及调试软件程序,并能够正确演示调试结果。
二、实验要求:
1、查找资料学习单片机的LCD点阵显示原理;
2、理解KST-51的LCD点阵显示电路图;
3、编制程序在点阵LCD上实现字母:我爱单片机绘制原理图;
4、完成实验报告的撰写。
三、硬件电路:
(一)89C52系列单片机
89C52是INTEL公司MCS-51系列单片机中基本的产品,它内置8位中央处理单元、512字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。此外,89C52还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。在空闲模式下冻结CPU而RAM定时器、串行口和中断系统维持其功能。掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能。89C52有PDIP(40pin)和PLCC(44pin)两种封装形式。
1、单片机最小系统
KST-51单片机开发板
最小系统是指单片机正常工作的最基本的外围配置,主要包括时钟电路、复位电路等。
51单片机最小系统是利用XTAL1和XTAL2两个引脚外接晶体振荡器的内部时钟方式,C1和C2的作用是稳定频率和快速起振,典型值为30pf,晶体振荡器的振荡频率典型值为6 MHZ、12 MHZ或者11.0592 MHZ,系统与PC通信时常采用11.0592MHZ。
复位电路设计形式包括:上电复位、按键复位、和利用专业的复位芯片进行管理,本次设计采用按键复位方式。
51单片机最小系统
2、单片机引脚功能
51系列单片机有40个引脚,包括2个 电源引脚,2个外界晶振引脚,4个控制或 其他电源复用引脚,32个I/O引脚。1)主电源引脚(2根)VCC(Pin40):电源输入,接+5V电源 GND(Pin20):接地线 2)外接晶振引脚(2根)
XTAL1(Pin19)、XTAL2(Pin18)主要用来构成单片机的时钟电路。时钟电路用来产生单片机工作所需的时钟信号。时钟信号分为内部时钟方式和外部时钟方式。3)控制引脚(4根)
RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。
ALE/PROG(Pin30):地址锁存允许信号 PSEN(Pin29):外部存储器读选通信号
EA/VPP(Pin31):程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。4)输入/输出引脚(32根)
P0口是一个双功能的8位并行口,可以用做地址/数据总线,另外P0口还可以作为通用I/O口使用,此时为准双向口,且内部无上拉电阻。
P1口是单功能的I/O口,只能作为通用的I/O口使用,为准双向口,但内部有上拉电阻。
P2口是一个双功能口,为准双向口,但内部有上拉电阻,P2口功能主要有一下两个方面:一是作为高8位地址输出线使用时,P2口可以输出外部存储器的高8位地址,与P0口输出的低8位地址一起构成16位地址,可以寻址64位的地址空间;二是作为通用I/O口使用时,与P1口使用方法一样。
P3口作为通用I/O口时使用方法与P1一样。另外,P3口主要作为第二功能使用。
(二)1602字符液晶
P3口第二功能表
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,1602是指显示的内容为16*2,即可以显示两行,每行16个字符。字符液晶绝大多数是基于HD44780液晶芯片的。
1602实物图 1、1602LCD的特性
+5V电压,对比度可调 内含复位电路
提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能
有80字节显示数据存储器DDRAM 内建有160个5X7点阵的字型的字符发生器CGROM 8个可由用户自定义的5X7的字符发生器CGRAM
2、字符型LCD1602接口 引脚2、1为1602的电源和地,引脚15、16 为背光电源,引脚4、5、6为控制端口,引脚7-14为 数据端口,以下为各个端口的详细介绍。3、1602存储器
HD44780内置了DDRAM(显示数据存储RAM)、CGROM(字符存储ROM)和CGRAM(用户自定义RAM)。
DDRAM就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下表:
在DDRAM的00H地址处显示数据,则必须将00H加上80H,即0X80+0x00,若要在DDRAM的01H处显示数据,则必须将01H加上80H即 0X80+0x01。以此类推。
字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如下表所示,这些字符有:阿拉伯数字、英文字母的大小写、常 用的符号、和日文假名等,每一个字符都有一个固定的代码。4、1602指令表
对DDRAM的内容和地址操作,HD44780的指令集及其设置说明,共有11条指令: 1)清屏指令
功能:<1> 清除液晶显示器,即将DDRAM的内容全部填入“空白”的字符码20H;<2> 光标归位,即将光标撤回液晶显示屏的左上方;<3> 将地址计数器(AC)的值设为0。
2)光标归位指令
功能:<1> 把光标撤回到显示器的左上方;<2> 把地址计数器(AC)的值设置为0;<3> 保持DDRAM的内容不变 3)输入模式设置指令
功能:设定每次写入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。参数设定的情况如下所示: 位名 设置
I/D 0=写入新数据后光标左移 1=写入新数据后光标右移
S 0=写入新数据后显示屏不移动 1=写入新数据后显示屏整体右移1个字 4)显示开关控制指令
功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。参数设定的情况如下:
位名 设置 D 0=显示功能关 1=显示功能开 C 0=无光标 1=有光标 B 0=光标不闪烁 1=光标闪烁 5)设定显示屏或光标移动方向指令
功能:使光标移位或使整个显示屏幕移位。参数设定的情况如下: S/C R/L 设定情况
0 0 光标左移1格,且AC值减1 0 1 光标右移1格,且AC值加1 1 0 显示器上字符全部左移一格,但光标不动 1 1 显示器上字符全部右移一格,但光标不动 6)功能设定指令
功能:设定数据总线位数、显示的行数及字型。参数设定的情况如下: 位名 设置
DL 0=数据总线为4位 1=数据总线为8位 N 0=显示1行 1=显示2行 F 0=5×7点阵/每字符 1=5×10点阵/每字符 7)设定CGRAM地址指令
功能:设定下一个要存入数据的CGRAM的地址。8)设定DDRAM地址指令
功能:设定下一个要存入数据的CGRAM的地址。9)读取忙信号或AC地址指令
功能:<1> 读取忙碌信号BF的内容,BF=1表示液晶显示器忙,暂时无法接收单片机送来的数据或指令;当BF=0时,液晶显示器可以接收单片机送来的数据或指令;<2> 读取地址计数器(AC)的内容。10)数据写入DDRAM或CGRAM指令
功能:<1> 将字符码写入DDRAM,以使液晶显示屏显示出相对应的字符;<2> 将用户自己设计的图形存入CGRAM。11)从CGRAM或DDRAM读出数据的指令
功能:读取DDRAM或CGRAM中的内容。
5、时序图
(1)读状态 输入:RS=0,RW=1,E=1 读数据 输入:RS=1,RW=1,E=1(2)写指令 输入:RS=0,RW=0,E=下降沿脉冲,DB0~DB7=指令码 写数据 输入:RS=1,RW=0,E=下降沿脉冲,DB0~DB7=数据
四、实习结果与讨论:
通过程序的编辑在1602型LCD上实现了显示英文字符,通过本次实验的学习进一步熟悉了1602型LCD,对其操作有了更多的心得体会,在本次实验中获益匪浅。
五、实验程序: #include
sbit LCD_RS = P2^0;sbit LCD_RW = P2^1;sbit LCD_EN = P2^2;
uchar code dis1[] = {“woai danpianji”};uchar code dis2[] = {“huizhi yuanlitu”};uchar code dis3[] = {“chen jian”};uchar code dis4[] = {“ dianzihua 1101 ”};
void delay(int ms){ int i;while(ms--){ for(i = 0;i< 250;i++){ _nop_();_nop_();_nop_();_nop_();} } }
bit lcd_busy(){ bit result;LCD_RS = 0;LCD_RW = 1;LCD_EN = 1;_nop_();_nop_();_nop_();_nop_();result =(bit)(P0&0x80);LCD_EN = 0;return result;} void lcd_wcmd(uchar cmd){ while(lcd_busy());LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;_nop_();_nop_();P0 = cmd;_nop_();_nop_();_nop_();_nop_();LCD_EN = 1;_nop_();_nop_();_nop_();_nop_();LCD_EN = 0;}
void lcd_wdat(uchar dat){ while(lcd_busy());LCD_RS = 1;LCD_RW = 0;LCD_EN = 0;P0 = dat;_nop_();_nop_();_nop_();_nop_();LCD_EN = 1;_nop_();_nop_();_nop_();_nop_();LCD_EN = 0;}
void lcd_pos(uchar pos){ lcd_wcmd(pos|0x80);//数据指针=80+地址变量 }
void lcd_init(){ lcd_wcmd(0x38);//16*2显示,5*7点阵,8位数据 delay(5);lcd_wcmd(0x38);delay(5);lcd_wcmd(0x38);delay(5);lcd_wcmd(0x0c);//显示开,关光标 delay(5);lcd_wcmd(0x06);//移动光标 delay(5);lcd_wcmd(0x01);//清除LCD的显示内容 delay(5);}
void flash(){ delay(600);//控制停留时间 lcd_wcmd(0x08);//关闭显示 delay(200);//延时 lcd_wcmd(0x0c);//开显示 delay(200);//延时 lcd_wcmd(0x08);//关闭显示 delay(200);//延时 lcd_wcmd(0x0c);//开显示 delay(200);} main(){ uchar i;delay(10);lcd_init();// 初始化LCD
while(1){ lcd_wcmd(0x06);//向右移动光标
lcd_pos(0);//设置显示位置为第一行的第1个字符 i = 0;while(dis1[i]!= ' '){ //显示字符“ woai danpianji” lcd_wdat(dis1[i]);i++;delay(30);//控制两字之间显示速度 }
lcd_pos(0x40);//设置显示位置为第二行第1个字符 i = 0;
while(dis2[i]!= ' '){ lcd_wdat(dis2[i]);//显示字符“ huizhi yuanlitu ” i++;delay(30);//控制两字之间显示速度 }
flash();//闪动二次
lcd_wcmd(0x01);//清除LCD的显示内容 delay(200);//控制转换时间 lcd_wcmd(0x04);//向左移动光标
lcd_pos(15);//设置显示位置为第一行的第16个字符 i = 0;while(dis3[i]!= ' '){ //显示字符“ chen jian ” lcd_wdat(dis3[i]);i++;delay(30);//控制两字之间显示速度 } lcd_pos(0x4F);//设置显示位置为第二行的第16个字符 i = 0;while(dis4[i]!= ' '){ lcd_wdat(dis4[i]);//显示字符“ dianzihua1101 ” i++;delay(30);//控制两字之间显示速度 }
flash();//闪动二次
lcd_wcmd(0x01);//清除LCD的显示内容 delay(200);//控制转换时间 } }